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 {
