This is an automated email from the ASF dual-hosted git repository. lburgazzoli pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 27e03854c670f01804cd7023db54afdcd0b40514 Author: nferraro <ni.ferr...@gmail.com> AuthorDate: Mon Nov 5 18:33:35 2018 +0100 Moved dependencies to a proper trait --- deploy/cr-example.yaml | 2 - deploy/resources.go | 2 - docs/traits.adoc | 7 +++ pkg/apis/camel/v1alpha1/types.go | 13 +++-- pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go | 5 -- pkg/client/cmd/run.go | 53 +++++++----------- pkg/stub/action/integration/deploy.go | 2 +- pkg/stub/action/integration/initialize.go | 41 +++----------- pkg/trait/catalog.go | 61 ++++++++++++++------- pkg/trait/dependencies.go | 69 ++++++++++++++++++++++++ pkg/trait/deployment.go | 2 +- pkg/trait/ingress.go | 2 +- pkg/trait/owner.go | 2 +- pkg/trait/route.go | 2 +- pkg/trait/service.go | 2 +- pkg/trait/trait.go | 23 ++++++-- pkg/trait/trait_test.go | 2 +- pkg/trait/types.go | 16 ++++-- pkg/trait/util.go | 3 +- 19 files changed, 186 insertions(+), 123 deletions(-) diff --git a/deploy/cr-example.yaml b/deploy/cr-example.yaml index c2851c7..253c402 100644 --- a/deploy/cr-example.yaml +++ b/deploy/cr-example.yaml @@ -3,8 +3,6 @@ kind: Integration metadata: name: example spec: - dependencies: - - camel:groovy source: content: |- // This is Camel K Groovy example route diff --git a/deploy/resources.go b/deploy/resources.go index b3e753e..de96acf 100644 --- a/deploy/resources.go +++ b/deploy/resources.go @@ -2188,8 +2188,6 @@ kind: Integration metadata: name: example spec: - dependencies: - - camel:groovy source: content: |- // This is Camel K Groovy example route diff --git a/docs/traits.adoc b/docs/traits.adoc index ff2ec93..27f90b2 100644 --- a/docs/traits.adoc +++ b/docs/traits.adoc @@ -55,6 +55,13 @@ The following is a list of common traits that can be configured by the end users |======================= | Trait | Profiles | Description +| dependencies +| Kubernetes, OpenShift +| Automatically adds dependencies required by the Camel routes by inspecting the user code. + + + + + It's enabled by default. + | service | Kubernetes, OpenShift | Exposes the integration with a Service resource so that it can be accessed by other applications (or integrations) in the same namespace. diff --git a/pkg/apis/camel/v1alpha1/types.go b/pkg/apis/camel/v1alpha1/types.go index 06cccce..b79a0c5 100644 --- a/pkg/apis/camel/v1alpha1/types.go +++ b/pkg/apis/camel/v1alpha1/types.go @@ -49,13 +49,12 @@ type Integration struct { // IntegrationSpec -- type IntegrationSpec struct { - Replicas *int32 `json:"replicas,omitempty"` - Source SourceSpec `json:"source,omitempty"` - Context string `json:"context,omitempty"` - Dependencies []string `json:"dependencies,omitempty"` - Traits map[string]IntegrationTraitSpec `json:"traits,omitempty"` - DependenciesAutoDiscovery *bool `json:"dependenciesAutoDiscovery,omitempty"` - Configuration []ConfigurationSpec `json:"configuration,omitempty"` + Replicas *int32 `json:"replicas,omitempty"` + Source SourceSpec `json:"source,omitempty"` + Context string `json:"context,omitempty"` + Dependencies []string `json:"dependencies,omitempty"` + Traits map[string]IntegrationTraitSpec `json:"traits,omitempty"` + Configuration []ConfigurationSpec `json:"configuration,omitempty"` } // SourceSpec -- diff --git a/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go index 1c13379..af2406c 100644 --- a/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/camel/v1alpha1/zz_generated.deepcopy.go @@ -341,11 +341,6 @@ func (in *IntegrationSpec) DeepCopyInto(out *IntegrationSpec) { (*out)[key] = *val.DeepCopy() } } - if in.DependenciesAutoDiscovery != nil { - in, out := &in.DependenciesAutoDiscovery, &out.DependenciesAutoDiscovery - *out = new(bool) - **out = **in - } if in.Configuration != nil { in, out := &in.Configuration, &out.Configuration *out = make([]ConfigurationSpec, len(*in)) diff --git a/pkg/client/cmd/run.go b/pkg/client/cmd/run.go index 3c59c84..6a52e03 100644 --- a/pkg/client/cmd/run.go +++ b/pkg/client/cmd/run.go @@ -63,7 +63,7 @@ func newCmdRun(rootCmdOptions *RootCmdOptions) *cobra.Command { } cmd.Flags().StringVarP(&options.Language, "language", "l", "", "Programming Language used to write the file") - cmd.Flags().StringVarP(&options.Runtime, "runtime", "r", "jvm", "Runtime used by the integration") + cmd.Flags().StringVarP(&options.Runtime, "runtime", "r", "", "Runtime used by the integration") cmd.Flags().StringVar(&options.IntegrationName, "name", "", "The integration name") cmd.Flags().StringSliceVarP(&options.Dependencies, "dependency", "d", nil, "The integration dependency") cmd.Flags().BoolVarP(&options.Wait, "wait", "w", false, "Waits for the integration to be running") @@ -74,7 +74,6 @@ func newCmdRun(rootCmdOptions *RootCmdOptions) *cobra.Command { cmd.Flags().BoolVar(&options.Logs, "logs", false, "Print integration logs") cmd.Flags().BoolVar(&options.Sync, "sync", false, "Synchronize the local source file with the cluster, republishing at each change") cmd.Flags().BoolVar(&options.Dev, "dev", false, "Enable Dev mode (equivalent to \"-w --logs --sync\")") - cmd.Flags().BoolVar(&options.DependenciesAutoDiscovery, "auto-discovery", true, "Automatically discover Camel modules by analyzing user code") cmd.Flags().StringSliceVarP(&options.Traits, "trait", "t", nil, "Configure a trait. E.g. \"-t service.enabled=false\"") cmd.Flags().StringSliceVar(&options.LoggingLevels, "logging-level", nil, "Configure the logging level. E.g. \"--logging-level org.apache.camel=DEBUG\"") @@ -86,21 +85,20 @@ func newCmdRun(rootCmdOptions *RootCmdOptions) *cobra.Command { type runCmdOptions struct { *RootCmdOptions - IntegrationContext string - Language string - Runtime string - IntegrationName string - Dependencies []string - Properties []string - ConfigMaps []string - Secrets []string - Wait bool - Logs bool - Sync bool - Dev bool - DependenciesAutoDiscovery bool - Traits []string - LoggingLevels []string + IntegrationContext string + Language string + Runtime string + IntegrationName string + Dependencies []string + Properties []string + ConfigMaps []string + Secrets []string + Wait bool + Logs bool + Sync bool + Dev bool + Traits []string + LoggingLevels []string } func (o *runCmdOptions) validateArgs(cmd *cobra.Command, args []string) error { @@ -273,10 +271,9 @@ func (o *runCmdOptions) updateIntegrationCode(filename string) (*v1alpha1.Integr Content: code, Language: v1alpha1.Language(o.Language), }, - Dependencies: make([]string, 0, len(o.Dependencies)), - DependenciesAutoDiscovery: &o.DependenciesAutoDiscovery, - Context: o.IntegrationContext, - Configuration: make([]v1alpha1.ConfigurationSpec, 0), + Dependencies: make([]string, 0, len(o.Dependencies)), + Context: o.IntegrationContext, + Configuration: make([]v1alpha1.ConfigurationSpec, 0), }, } @@ -290,24 +287,10 @@ func (o *runCmdOptions) updateIntegrationCode(filename string) (*v1alpha1.Integr } } - if o.Language == "groovy" || strings.HasSuffix(filename, ".groovy") { - util.StringSliceUniqueAdd(&integration.Spec.Dependencies, "runtime:groovy") - } - if o.Language == "kotlin" || strings.HasSuffix(filename, ".kts") { - util.StringSliceUniqueAdd(&integration.Spec.Dependencies, "runtime:kotlin") - } - - // jvm runtime required by default - util.StringSliceUniqueAdd(&integration.Spec.Dependencies, "runtime:jvm") - if o.Runtime != "" { util.StringSliceUniqueAdd(&integration.Spec.Dependencies, "runtime:"+o.Runtime) } - switch o.Runtime { - - } - for _, item := range o.Properties { integration.Spec.Configuration = append(integration.Spec.Configuration, v1alpha1.ConfigurationSpec{ Type: "property", diff --git a/pkg/stub/action/integration/deploy.go b/pkg/stub/action/integration/deploy.go index 2c814bc..d666a7b 100644 --- a/pkg/stub/action/integration/deploy.go +++ b/pkg/stub/action/integration/deploy.go @@ -42,7 +42,7 @@ func (action *deployAction) CanHandle(integration *v1alpha1.Integration) bool { } func (action *deployAction) Handle(integration *v1alpha1.Integration) error { - resources, err := trait.ComputeDeployment(integration) + resources, err := trait.BeforeDeployment(integration) if err != nil { return err } diff --git a/pkg/stub/action/integration/initialize.go b/pkg/stub/action/integration/initialize.go index 3abf51f..949df34 100644 --- a/pkg/stub/action/integration/initialize.go +++ b/pkg/stub/action/integration/initialize.go @@ -18,16 +18,13 @@ limitations under the License. package integration import ( + "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" "github.com/apache/camel-k/pkg/metadata" "github.com/apache/camel-k/pkg/platform" - "github.com/sirupsen/logrus" - "sort" - - "github.com/apache/camel-k/pkg/util" - - "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" + "github.com/apache/camel-k/pkg/trait" "github.com/apache/camel-k/pkg/util/digest" "github.com/operator-framework/operator-sdk/pkg/sdk" + "github.com/sirupsen/logrus" ) // NewInitializeAction creates a new inititialize action @@ -64,42 +61,16 @@ func (action *initializeAction) Handle(integration *v1alpha1.Integration) error } // extract metadata meta := metadata.Extract(target.Spec.Source) - - // set the correct language target.Spec.Source.Language = meta.Language - if !util.StringSliceExists(target.Spec.Dependencies, "camel:core") { - target.Spec.Dependencies = append(target.Spec.Dependencies, "camel:core") + // execute custom initialization + if err := trait.BeforeInit(target); err != nil { + return err } - // discover dependencies - if target.Spec.DependenciesAutoDiscovery == nil { - var autoDiscoveryDependencies = true - target.Spec.DependenciesAutoDiscovery = &autoDiscoveryDependencies - } - if *target.Spec.DependenciesAutoDiscovery { - target.Spec.Dependencies = action.mergeDependencies(target.Spec.Dependencies, meta.Dependencies) - } - // sort the dependencies to get always the same list if they don't change - sort.Strings(target.Spec.Dependencies) // update the status logrus.Info("Integration ", target.Name, " transitioning to state ", v1alpha1.IntegrationPhaseBuilding) target.Status.Phase = v1alpha1.IntegrationPhaseBuilding target.Status.Digest = digest.ComputeForIntegration(integration) return sdk.Update(target) } - -func (action *initializeAction) mergeDependencies(list1 []string, list2 []string) []string { - set := make(map[string]bool, 0) - for _, d := range list1 { - set[d] = true - } - for _, d := range list2 { - set[d] = true - } - ret := make([]string, 0, len(set)) - for d := range set { - ret = append(ret, d) - } - return ret -} diff --git a/pkg/trait/catalog.go b/pkg/trait/catalog.go index d5cf865..956ed7e 100644 --- a/pkg/trait/catalog.go +++ b/pkg/trait/catalog.go @@ -27,26 +27,29 @@ import ( // Catalog collects all information about traits in one place type Catalog struct { - tDeployment ITrait - tService ITrait - tRoute ITrait - tIngress ITrait - tOwner ITrait + tDependencies Trait + tDeployment Trait + tService Trait + tRoute Trait + tIngress Trait + tOwner Trait } // NewCatalog creates a new trait Catalog func NewCatalog() *Catalog { return &Catalog{ - tDeployment: newDeploymentTrait(), - tService: newServiceTrait(), - tRoute: newRouteTrait(), - tIngress: newIngressTrait(), - tOwner: newOwnerTrait(), + tDependencies: newDependenciesTrait(), + tDeployment: newDeploymentTrait(), + tService: newServiceTrait(), + tRoute: newRouteTrait(), + tIngress: newIngressTrait(), + tOwner: newOwnerTrait(), } } -func (c *Catalog) allTraits() []ITrait { - return []ITrait{ +func (c *Catalog) allTraits() []Trait { + return []Trait{ + c.tDependencies, c.tDeployment, c.tService, c.tRoute, @@ -55,17 +58,19 @@ func (c *Catalog) allTraits() []ITrait { } } -func (c *Catalog) traitsFor(environment *environment) []ITrait { +func (c *Catalog) traitsFor(environment *environment) []Trait { switch environment.Platform.Spec.Cluster { case v1alpha1.IntegrationPlatformClusterOpenShift: - return []ITrait{ + return []Trait{ + c.tDependencies, c.tDeployment, c.tService, c.tRoute, c.tOwner, } case v1alpha1.IntegrationPlatformClusterKubernetes: - return []ITrait{ + return []Trait{ + c.tDependencies, c.tDeployment, c.tService, c.tIngress, @@ -76,7 +81,7 @@ func (c *Catalog) traitsFor(environment *environment) []ITrait { return nil } -func (c *Catalog) customize(environment *environment, resources *kubernetes.Collection) error { +func (c *Catalog) executeBeforeDeployment(environment *environment, resources *kubernetes.Collection) error { c.configure(environment) traits := c.traitsFor(environment) for _, trait := range traits { @@ -86,7 +91,27 @@ func (c *Catalog) customize(environment *environment, resources *kubernetes.Coll } } if trait.IsEnabled() { - if err := trait.customize(environment, resources); err != nil { + if err := trait.beforeDeploy(environment, resources); err != nil { + return err + } + environment.ExecutedTraits = append(environment.ExecutedTraits, trait.ID()) + } + } + return nil +} + +func (c *Catalog) executeBeforeInit(environment *environment, integration *v1alpha1.Integration) error { + c.configure(environment) + traits := c.traitsFor(environment) + resources := kubernetes.NewCollection() + for _, trait := range traits { + if trait.IsAuto() { + if err := trait.autoconfigure(environment, resources); err != nil { + return err + } + } + if trait.IsEnabled() { + if err := trait.beforeInit(environment, integration); err != nil { return err } environment.ExecutedTraits = append(environment.ExecutedTraits, trait.ID()) @@ -96,7 +121,7 @@ func (c *Catalog) customize(environment *environment, resources *kubernetes.Coll } // GetTrait returns the trait with the given ID -func (c *Catalog) GetTrait(id string) ITrait { +func (c *Catalog) GetTrait(id string) Trait { for _, t := range c.allTraits() { if t.ID() == ID(id) { return t diff --git a/pkg/trait/dependencies.go b/pkg/trait/dependencies.go new file mode 100644 index 0000000..5bdb82d --- /dev/null +++ b/pkg/trait/dependencies.go @@ -0,0 +1,69 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package trait + +import ( + "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" + "github.com/apache/camel-k/pkg/metadata" + "github.com/apache/camel-k/pkg/util" + "sort" +) + +type dependenciesTrait struct { + BaseTrait `property:",squash"` +} + +func newDependenciesTrait() *dependenciesTrait { + return &dependenciesTrait{ + BaseTrait: newBaseTrait("dependencies"), + } +} + +func (d *dependenciesTrait) beforeInit(environment *environment, integration *v1alpha1.Integration) error { + meta := metadata.Extract(integration.Spec.Source) + + if meta.Language == v1alpha1.LanguageGroovy { + util.StringSliceUniqueAdd(&integration.Spec.Dependencies, "runtime:groovy") + } else if meta.Language == v1alpha1.LanguageKotlin { + util.StringSliceUniqueAdd(&integration.Spec.Dependencies, "runtime:kotlin") + } + + // jvm runtime and camel-core required by default + util.StringSliceUniqueAdd(&integration.Spec.Dependencies, "runtime:jvm") + util.StringSliceUniqueAdd(&integration.Spec.Dependencies, "camel:core") + + integration.Spec.Dependencies = d.mergeDependencies(integration.Spec.Dependencies, meta.Dependencies) + // sort the dependencies to get always the same list if they don't change + sort.Strings(integration.Spec.Dependencies) + return nil +} + +func (d *dependenciesTrait) mergeDependencies(list1 []string, list2 []string) []string { + set := make(map[string]bool, 0) + for _, d := range list1 { + set[d] = true + } + for _, d := range list2 { + set[d] = true + } + ret := make([]string, 0, len(set)) + for d := range set { + ret = append(ret, d) + } + return ret +} diff --git a/pkg/trait/deployment.go b/pkg/trait/deployment.go index 4225b99..41f5e93 100644 --- a/pkg/trait/deployment.go +++ b/pkg/trait/deployment.go @@ -38,7 +38,7 @@ func newDeploymentTrait() *deploymentTrait { } } -func (d *deploymentTrait) customize(environment *environment, resources *kubernetes.Collection) error { +func (d *deploymentTrait) beforeDeploy(environment *environment, resources *kubernetes.Collection) error { resources.Add(d.getConfigMapFor(environment)) resources.Add(d.getDeploymentFor(environment)) return nil diff --git a/pkg/trait/ingress.go b/pkg/trait/ingress.go index bbd7017..c166c43 100644 --- a/pkg/trait/ingress.go +++ b/pkg/trait/ingress.go @@ -48,7 +48,7 @@ func (e *ingressTrait) autoconfigure(environment *environment, resources *kubern return nil } -func (e *ingressTrait) customize(environment *environment, resources *kubernetes.Collection) error { +func (e *ingressTrait) beforeDeploy(environment *environment, resources *kubernetes.Collection) error { if e.Host == "" { return errors.New("cannot apply ingress trait: no host defined") } diff --git a/pkg/trait/owner.go b/pkg/trait/owner.go index 701b219..c0a732f 100644 --- a/pkg/trait/owner.go +++ b/pkg/trait/owner.go @@ -33,7 +33,7 @@ func newOwnerTrait() *ownerTrait { } } -func (*ownerTrait) customize(e *environment, resources *kubernetes.Collection) error { +func (*ownerTrait) beforeDeploy(e *environment, resources *kubernetes.Collection) error { controller := true blockOwnerDeletion := true resources.VisitMetaObject(func(res metav1.Object) { diff --git a/pkg/trait/route.go b/pkg/trait/route.go index 02299b1..fef1786 100644 --- a/pkg/trait/route.go +++ b/pkg/trait/route.go @@ -45,7 +45,7 @@ func (e *routeTrait) autoconfigure(environment *environment, resources *kubernet return nil } -func (e *routeTrait) customize(environment *environment, resources *kubernetes.Collection) error { +func (e *routeTrait) beforeDeploy(environment *environment, resources *kubernetes.Collection) error { service := e.getTargetService(environment, resources) if service == nil { return errors.New("cannot apply route trait: no target service") diff --git a/pkg/trait/service.go b/pkg/trait/service.go index 619226b..dcb77df 100644 --- a/pkg/trait/service.go +++ b/pkg/trait/service.go @@ -55,7 +55,7 @@ func (s *serviceTrait) autoconfigure(environment *environment, resources *kubern return nil } -func (s *serviceTrait) customize(environment *environment, resources *kubernetes.Collection) (err error) { +func (s *serviceTrait) beforeDeploy(environment *environment, resources *kubernetes.Collection) (err error) { var svc *corev1.Service if svc, err = s.getServiceFor(environment); err != nil { return err diff --git a/pkg/trait/trait.go b/pkg/trait/trait.go index bdb5b0e..9239b3a 100644 --- a/pkg/trait/trait.go +++ b/pkg/trait/trait.go @@ -25,8 +25,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" ) -// ComputeDeployment generates all required resources for deploying the given integration -func ComputeDeployment(integration *v1alpha1.Integration) ([]runtime.Object, error) { +// BeforeDeployment generates all required resources for deploying the given integration +func BeforeDeployment(integration *v1alpha1.Integration) ([]runtime.Object, error) { environment, err := newEnvironment(integration) if err != nil { return nil, err @@ -34,12 +34,26 @@ func ComputeDeployment(integration *v1alpha1.Integration) ([]runtime.Object, err resources := kubernetes.NewCollection() catalog := NewCatalog() // invoke the trait framework to determine the needed resources - if err := catalog.customize(environment, resources); err != nil { - return nil, errors.Wrap(err, "error during trait customization") + if err := catalog.executeBeforeDeployment(environment, resources); err != nil { + return nil, errors.Wrap(err, "error during trait customization before deployment") } return resources.Items(), nil } +// BeforeInit executes custom initializazion of the integration +func BeforeInit(integration *v1alpha1.Integration) error { + environment, err := newEnvironment(integration) + if err != nil { + return err + } + catalog := NewCatalog() + // invoke the trait framework to determine the needed resources + if err := catalog.executeBeforeInit(environment, integration); err != nil { + return errors.Wrap(err, "error during trait customization before init") + } + return nil +} + // newEnvironment creates a environment from the given data func newEnvironment(integration *v1alpha1.Integration) (*environment, error) { pl, err := platform.GetCurrentPlatform(integration.Namespace) @@ -58,4 +72,3 @@ func newEnvironment(integration *v1alpha1.Integration) (*environment, error) { ExecutedTraits: make([]ID, 0), }, nil } - diff --git a/pkg/trait/trait_test.go b/pkg/trait/trait_test.go index 6631c8c..d6f11aa 100644 --- a/pkg/trait/trait_test.go +++ b/pkg/trait/trait_test.go @@ -155,7 +155,7 @@ func TestTraitDecode(t *testing.T) { func processTestEnv(t *testing.T, env *environment) *kubernetes.Collection { resources := kubernetes.NewCollection() catalog := NewCatalog() - err := catalog.customize(env, resources) + err := catalog.executeBeforeDeployment(env, resources) assert.Nil(t, err) return resources } diff --git a/pkg/trait/types.go b/pkg/trait/types.go index 23aa6a2..3cb6cf5 100644 --- a/pkg/trait/types.go +++ b/pkg/trait/types.go @@ -30,8 +30,8 @@ type Identifiable interface { // ID uniquely identifies a trait type ID string -// ITrait TODO rename -type ITrait interface { +// Trait is the interface of all traits +type Trait interface { Identifiable // enabled tells if the trait is enabled IsEnabled() bool @@ -39,8 +39,10 @@ type ITrait interface { IsAuto() bool // autoconfigure is called before any customization to ensure the trait is fully configured autoconfigure(environment *environment, resources *kubernetes.Collection) error - // customize executes the trait customization on the resources and return true if the resources have been changed - customize(environment *environment, resources *kubernetes.Collection) error + // beforeInit executes a customization of the integration before it's built + beforeInit(environment *environment, integration *v1alpha1.Integration) error + // beforeDeploy executes a customization of the gerenated resources before they are created + beforeDeploy(environment *environment, resources *kubernetes.Collection) error } /* Base trait */ @@ -83,7 +85,11 @@ func (trait *BaseTrait) autoconfigure(environment *environment, resources *kuber return nil } -func (trait *BaseTrait) customize(environment *environment, resources *kubernetes.Collection) error { +func (trait *BaseTrait) beforeInit(environment *environment, integration *v1alpha1.Integration) error { + return nil +} + +func (trait *BaseTrait) beforeDeploy(environment *environment, resources *kubernetes.Collection) error { return nil } diff --git a/pkg/trait/util.go b/pkg/trait/util.go index 5b280a9..c6194b8 100644 --- a/pkg/trait/util.go +++ b/pkg/trait/util.go @@ -23,14 +23,13 @@ import ( "github.com/apache/camel-k/pkg/apis/camel/v1alpha1" "github.com/operator-framework/operator-sdk/pkg/sdk" - "github.com/pkg/errors" "k8s.io/api/core/v1" ) // GetIntegrationContext retrieves the context set on the integration func GetIntegrationContext(integration *v1alpha1.Integration) (*v1alpha1.IntegrationContext, error) { if integration.Spec.Context == "" { - return nil, errors.New("no context set on the integration") + return nil, nil } name := integration.Spec.Context