This is an automated email from the ASF dual-hosted git repository.

astefanutti pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit 042310641db2d1f93b97ad3cffc0a291986db986
Author: Antonin Stefanutti <[email protected]>
AuthorDate: Mon Oct 28 12:24:17 2019 +0100

    feat(quarkus): Filter kits based on integration or catalog runtime provider 
info
---
 pkg/builder/builder_steps.go       | 13 ++++++++++-
 pkg/controller/integration/util.go | 46 +++++++++++++++++++++++---------------
 2 files changed, 40 insertions(+), 19 deletions(-)

diff --git a/pkg/builder/builder_steps.go b/pkg/builder/builder_steps.go
index 23d15be..3e08e79 100644
--- a/pkg/builder/builder_steps.go
+++ b/pkg/builder/builder_steps.go
@@ -349,10 +349,21 @@ func listPublishedImages(context *Context) 
([]publishedImage, error) {
                if kit.Status.RuntimeVersion != context.Catalog.RuntimeVersion {
                        continue
                }
+
+               // TODO: should ideally be made generic
+               if kit.Status.RuntimeProvider == nil && 
context.Catalog.RuntimeProvider != nil ||
+                       kit.Status.RuntimeProvider != nil && 
context.Catalog.RuntimeProvider == nil ||
+                       kit.Status.RuntimeProvider != nil && 
context.Catalog.RuntimeProvider != nil &&
+                               (kit.Status.RuntimeProvider.Quarkus != nil && 
context.Catalog.RuntimeProvider.Quarkus == nil ||
+                                       kit.Status.RuntimeProvider.Quarkus == 
nil && context.Catalog.RuntimeProvider.Quarkus != nil ||
+                                       *kit.Status.RuntimeProvider.Quarkus != 
*context.Catalog.RuntimeProvider.Quarkus) {
+                       continue
+               }
+
                if kit.Status.Phase != v1alpha1.IntegrationKitPhaseReady || 
kit.Labels == nil {
                        continue
                }
-               if ctxType, present := kit.Labels["camel.apache.org/kit.type"]; 
!present || ctxType != v1alpha1.IntegrationKitTypePlatform {
+               if kitType, present := kit.Labels["camel.apache.org/kit.type"]; 
!present || kitType != v1alpha1.IntegrationKitTypePlatform {
                        continue
                }
 
diff --git a/pkg/controller/integration/util.go 
b/pkg/controller/integration/util.go
index b3d61c4..39e3495 100644
--- a/pkg/controller/integration/util.go
+++ b/pkg/controller/integration/util.go
@@ -20,10 +20,10 @@ package integration
 import (
        "context"
 
-       k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
-
        "github.com/pkg/errors"
 
+       k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
+
        "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
        "github.com/apache/camel-k/pkg/util"
        "github.com/apache/camel-k/pkg/util/kubernetes"
@@ -45,30 +45,40 @@ func LookupKitForIntegration(ctx context.Context, c 
k8sclient.Reader, integratio
                return kit, nil
        }
 
-       ctxList := v1alpha1.NewIntegrationKitList()
-       if err := c.List(ctx, &ctxList, 
k8sclient.InNamespace(integration.Namespace)); err != nil {
+       kits := v1alpha1.NewIntegrationKitList()
+       if err := c.List(ctx, &kits, 
k8sclient.InNamespace(integration.Namespace)); err != nil {
                return nil, err
        }
 
-       for _, ctx := range ctxList.Items {
-               ctx := ctx // pin
+       for _, kit := range kits.Items {
+               kit := kit // pin
 
-               if ctx.Status.Phase == v1alpha1.IntegrationKitPhaseError {
+               if kit.Status.Phase == v1alpha1.IntegrationKitPhaseError {
                        continue
                }
-               if ctx.Status.CamelVersion != integration.Status.CamelVersion {
+               if kit.Status.CamelVersion != integration.Status.CamelVersion {
                        continue
                }
-               if ctx.Status.RuntimeVersion != 
integration.Status.RuntimeVersion {
+               if kit.Status.RuntimeVersion != 
integration.Status.RuntimeVersion {
                        continue
                }
-               if ctx.Status.Version != integration.Status.Version {
+               if kit.Status.Version != integration.Status.Version {
+                       continue
+               }
+
+               // TODO: should ideally be made generic
+               if integration.Status.RuntimeProvider == nil && 
kit.Status.RuntimeProvider != nil ||
+                       integration.Status.RuntimeProvider != nil && 
kit.Status.RuntimeProvider == nil ||
+                       integration.Status.RuntimeProvider != nil && 
kit.Status.RuntimeProvider != nil &&
+                               (integration.Status.RuntimeProvider.Quarkus != 
nil && kit.Status.RuntimeProvider.Quarkus == nil ||
+                                       
integration.Status.RuntimeProvider.Quarkus == nil && 
kit.Status.RuntimeProvider.Quarkus != nil ||
+                                       
*integration.Status.RuntimeProvider.Quarkus != 
*kit.Status.RuntimeProvider.Quarkus) {
                        continue
                }
 
-               if allowed, ok := 
allowedLookupLabels[ctx.Labels["camel.apache.org/kit.type"]]; ok && allowed {
+               if allowed, ok := 
allowedLookupLabels[kit.Labels["camel.apache.org/kit.type"]]; ok && allowed {
                        ideps := len(integration.Status.Dependencies)
-                       cdeps := len(ctx.Spec.Dependencies)
+                       cdeps := len(kit.Spec.Dependencies)
 
                        if ideps != cdeps {
                                continue
@@ -86,12 +96,12 @@ func LookupKitForIntegration(ctx context.Context, c 
k8sclient.Reader, integratio
                        // A kit can be used only if it contains a subset of 
the traits and related configurations
                        // declared on integration.
                        //
-                       if !HasMatchingTraits(&ctx, integration) {
+                       if !HasMatchingTraits(&kit, integration) {
                                continue
                        }
 
-                       if util.StringSliceContains(ctx.Spec.Dependencies, 
integration.Status.Dependencies) {
-                               return &ctx, nil
+                       if util.StringSliceContains(kit.Spec.Dependencies, 
integration.Status.Dependencies) {
+                               return &kit, nil
                        }
                }
        }
@@ -101,14 +111,14 @@ func LookupKitForIntegration(ctx context.Context, c 
k8sclient.Reader, integratio
 
 // HasMatchingTraits compare traits defined on kit against those defined on 
integration.
 func HasMatchingTraits(kit *v1alpha1.IntegrationKit, integration 
*v1alpha1.Integration) bool {
-       for ctxTraitName, ctxTraitConf := range kit.Spec.Traits {
-               iTraitConf, ok := integration.Spec.Traits[ctxTraitName]
+       for kitTraitName, kitTraitConf := range kit.Spec.Traits {
+               iTraitConf, ok := integration.Spec.Traits[kitTraitName]
                if !ok {
                        // skip it because trait configured on kit is not 
defined on integration.
                        return false
                }
 
-               for ck, cv := range ctxTraitConf.Configuration {
+               for ck, cv := range kitTraitConf.Configuration {
                        iv, ok := iTraitConf.Configuration[ck]
 
                        if !ok {

Reply via email to