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 fb6d63704c972d1186f0b0dd0513f2e85b6f9894
Author: Antonin Stefanutti <[email protected]>
AuthorDate: Mon Oct 28 14:51:35 2019 +0100

    feat(quarkus): Use runtime provider label selector to list kits
---
 pkg/builder/builder_steps.go            | 23 ++++++++++++++++++++---
 pkg/controller/integration/build_kit.go |  4 ++++
 pkg/controller/integration/util.go      | 22 ++++++++++++++++++++--
 pkg/util/camel/camel_runtime.go         |  4 ++--
 4 files changed, 46 insertions(+), 7 deletions(-)

diff --git a/pkg/builder/builder_steps.go b/pkg/builder/builder_steps.go
index 3e08e79..d44d579 100644
--- a/pkg/builder/builder_steps.go
+++ b/pkg/builder/builder_steps.go
@@ -24,9 +24,13 @@ import (
        "reflect"
        "strings"
 
+       "k8s.io/apimachinery/pkg/labels"
+       "k8s.io/apimachinery/pkg/selection"
+
        k8sclient "sigs.k8s.io/controller-runtime/pkg/client"
 
        "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+       "github.com/apache/camel-k/pkg/util/controller"
        "github.com/apache/camel-k/pkg/util/kubernetes"
        "github.com/apache/camel-k/pkg/util/maven"
        "github.com/apache/camel-k/pkg/util/tar"
@@ -329,9 +333,22 @@ func packager(ctx *Context, selector artifactsSelector) 
error {
 }
 
 func listPublishedImages(context *Context) ([]publishedImage, error) {
-       list := v1alpha1.NewIntegrationKitList()
+       options := []k8sclient.ListOption{
+               k8sclient.InNamespace(context.Namespace),
+       }
 
-       err := context.Client.List(context.C, &list, 
k8sclient.InNamespace(context.Namespace))
+       if context.Catalog.RuntimeProvider != nil && 
context.Catalog.RuntimeProvider.Quarkus != nil {
+               options = append(options, k8sclient.MatchingLabels{
+                       "camel.apache.org/runtime.provider": "quarkus",
+               })
+       } else {
+               provider, _ := 
labels.NewRequirement("camel.apache.org/runtime.provider", 
selection.DoesNotExist, []string{})
+               selector := labels.NewSelector().Add(*provider)
+               options = append(options, controller.MatchingSelector{Selector: 
selector})
+       }
+
+       list := v1alpha1.NewIntegrationKitList()
+       err := context.Client.List(context.C, &list, options...)
        if err != nil {
                return nil, err
        }
@@ -350,7 +367,7 @@ func listPublishedImages(context *Context) 
([]publishedImage, error) {
                        continue
                }
 
-               // TODO: should ideally be made generic
+               // TODO: should ideally be made generic from the runtime 
providers
                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 &&
diff --git a/pkg/controller/integration/build_kit.go 
b/pkg/controller/integration/build_kit.go
index c2976ee..beb078c 100644
--- a/pkg/controller/integration/build_kit.go
+++ b/pkg/controller/integration/build_kit.go
@@ -113,6 +113,10 @@ func (action *buildKitAction) Handle(ctx context.Context, 
integration *v1alpha1.
                "camel.apache.org/kit.created.by.version": 
integration.ResourceVersion,
        }
 
+       if integration.Status.RuntimeProvider != nil && 
integration.Status.RuntimeProvider.Quarkus != nil {
+               platformKit.Labels["camel.apache.org/runtime.provider"] = 
"quarkus"
+       }
+
        // Set the kit to have the same characteristics as the integrations
        platformKit.Spec = v1alpha1.IntegrationKitSpec{
                Dependencies: integration.Status.Dependencies,
diff --git a/pkg/controller/integration/util.go 
b/pkg/controller/integration/util.go
index 39e3495..261153a 100644
--- a/pkg/controller/integration/util.go
+++ b/pkg/controller/integration/util.go
@@ -22,10 +22,14 @@ import (
 
        "github.com/pkg/errors"
 
+       "k8s.io/apimachinery/pkg/labels"
+       "k8s.io/apimachinery/pkg/selection"
+
        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/controller"
        "github.com/apache/camel-k/pkg/util/kubernetes"
 )
 
@@ -45,8 +49,22 @@ func LookupKitForIntegration(ctx context.Context, c 
k8sclient.Reader, integratio
                return kit, nil
        }
 
+       options := []k8sclient.ListOption{
+               k8sclient.InNamespace(integration.Namespace),
+       }
+
+       if integration.Status.RuntimeProvider != nil && 
integration.Status.RuntimeProvider.Quarkus != nil {
+               options = append(options, k8sclient.MatchingLabels{
+                       "camel.apache.org/runtime.provider": "quarkus",
+               })
+       } else {
+               provider, _ := 
labels.NewRequirement("camel.apache.org/runtime.provider", 
selection.DoesNotExist, []string{})
+               selector := labels.NewSelector().Add(*provider)
+               options = append(options, controller.MatchingSelector{Selector: 
selector})
+       }
+
        kits := v1alpha1.NewIntegrationKitList()
-       if err := c.List(ctx, &kits, 
k8sclient.InNamespace(integration.Namespace)); err != nil {
+       if err := c.List(ctx, &kits, options...); err != nil {
                return nil, err
        }
 
@@ -66,7 +84,7 @@ func LookupKitForIntegration(ctx context.Context, c 
k8sclient.Reader, integratio
                        continue
                }
 
-               // TODO: should ideally be made generic
+               // TODO: should ideally be made generic from the runtime 
providers
                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 &&
diff --git a/pkg/util/camel/camel_runtime.go b/pkg/util/camel/camel_runtime.go
index c9aea1b..420ebe3 100644
--- a/pkg/util/camel/camel_runtime.go
+++ b/pkg/util/camel/camel_runtime.go
@@ -37,8 +37,8 @@ func LoadCatalog(ctx context.Context, client client.Client, 
namespace string, ca
        }
 
        if provider == nil {
-               integration, _ := 
labels.NewRequirement("camel.apache.org/runtime.provider", 
selection.DoesNotExist, []string{})
-               selector := labels.NewSelector().Add(*integration)
+               requirement, _ := 
labels.NewRequirement("camel.apache.org/runtime.provider", 
selection.DoesNotExist, []string{})
+               selector := labels.NewSelector().Add(*requirement)
                options = append(options, controller.MatchingSelector{Selector: 
selector})
        } else if _, ok := provider.(v1alpha1.QuarkusRuntimeProvider); ok {
                options = append(options, k8sclient.MatchingLabels{

Reply via email to