This is an automated email from the ASF dual-hosted git repository. astefanutti pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit c516794b5bdb4f20d168f2c21c277d69452787eb Author: John Poth <poth.j...@gmail.com> AuthorDate: Wed Sep 1 11:47:20 2021 +0200 Fix #2553 Remove support to bind to a ServiceBinding CRD --- pkg/trait/service_binding.go | 103 ++++++++++++++----------------------------- 1 file changed, 32 insertions(+), 71 deletions(-) diff --git a/pkg/trait/service_binding.go b/pkg/trait/service_binding.go index ca11df7..3a5db8a 100644 --- a/pkg/trait/service_binding.go +++ b/pkg/trait/service_binding.go @@ -38,14 +38,14 @@ import ( "github.com/apache/camel-k/pkg/util/reference" ) -// The Service Binding trait allows users to connect to Provisioned Services and ServiceBindings in Kubernetes: +// The Service Binding trait allows users to connect to Services in Kubernetes: // https://github.com/k8s-service-bindings/spec#service-binding // As the specification is still evolving this is subject to change // +camel-k:trait=service-binding type serviceBindingTrait struct { BaseTrait `property:",squash"` - // List of Provisioned Services and ServiceBindings in the form [[apigroup/]version:]kind:[namespace/]name - ServiceBindings []string `property:"service-bindings" json:"serviceBindings,omitempty"` + // List of Services in the form [[apigroup/]version:]kind:[namespace/]name + Services []string `property:"services" json:"services,omitempty"` } func newServiceBindingTrait() Trait { @@ -59,7 +59,7 @@ func (t *serviceBindingTrait) Configure(e *Environment) (bool, error) { return false, nil } - if len(t.ServiceBindings) == 0 { + if len(t.Services) == 0 { return false, nil } @@ -67,31 +67,17 @@ func (t *serviceBindingTrait) Configure(e *Environment) (bool, error) { e.IntegrationInRunningPhases(), nil } -func (i *impl) Process(binding interface{}) (bool, error) { - ctx, err := i.ctxProvider.Get(binding) - if err != nil { - return false, err - } - var status pipeline.FlowStatus - for _, h := range i.handlers { - h.Handle(ctx) - status = ctx.FlowStatus() - if status.Stop { - break - } - } - - return status.Retry, status.Err -} - func (t *serviceBindingTrait) Apply(e *Environment) error { - services, err := t.parseProvisionedServices(e) + services, err := t.parseServices(e) if err != nil { return err } - serviceBindings, err := t.parseServiceBindings(e) - if err != nil { - return err + + serviceBindingCrd := []sb.ServiceBinding{} + + for _, name := range services { + serviceBinding := createServiceBinding(e, services, e.Integration.Name) + append(serviceBindingCrd, serviceBinding) } var camelKFlow = []pipeline.Handler{ @@ -106,22 +92,7 @@ func (t *serviceBindingTrait) Apply(e *Environment) error { p := builder.Builder().WithHandlers(camelKFlow...).WithContextProvider(context.Provider(e.Client, context.ResourceLookup(e.Client.RESTMapper()))).Build() - serviceBindingCrd := []sb.ServiceBinding{} - - for _, name := range serviceBindings { - if name == e.Integration.Name { - serviceBinding := createServiceBinding(e, services, e.Integration.Name) - append(serviceBindingCrd, serviceBinding) - } else { - serviceBinding, err := t.getServiceBinding(e, name) - // Do not throw an error if the ServiceBinding is not found and if we are managing it: we will create it - if err != nil { - return err - } - append(serviceBindingCrd, serviceBinding) - } - } - + p.Process(serviceBindingCrd) // construct Secret name, secretExist := i.bindingSecretName() data := i.bindingItemMap() @@ -136,9 +107,6 @@ func (t *serviceBindingTrait) Apply(e *Environment) error { StringData: data, } - if len(services) > 0 { - serviceBindings = append(serviceBindings, e.Integration.Name) - } if e.IntegrationInPhase(v1.IntegrationPhaseInitialization) { serviceBindingsCollectionReady := true for _, name := range serviceBindings { @@ -210,6 +178,23 @@ func (t *serviceBindingTrait) Apply(e *Environment) error { return nil } +func (i *impl) Process(binding interface{}) (bool, error) { + ctx, err := i.ctxProvider.Get(binding) + if err != nil { + return false, err + } + var status pipeline.FlowStatus + for _, h := range i.handlers { + h.Handle(ctx) + status = ctx.FlowStatus() + if status.Stop { + break + } + } + + return status.Retry, status.Err +} + func setCollectionReady(e *Environment, serviceBinding string, status corev1.ConditionStatus) { e.Integration.Status.SetCondition( v1.IntegrationConditionServiceBindingsCollectionReady, @@ -237,10 +222,10 @@ func (t *serviceBindingTrait) getServiceBinding(e *Environment, name string) (sb return serviceBinding, t.Client.Get(e.Ctx, key, &serviceBinding) } -func (t *serviceBindingTrait) parseProvisionedServices(e *Environment) ([]sb.Service, error) { +func (t *serviceBindingTrait) parseServices(e *Environment) ([]sb.Service, error) { services := make([]sb.Service, 0) converter := reference.NewConverter("") - for _, s := range t.ServiceBindings { + for _, s := range t.Services { ref, err := converter.FromString(s) if err != nil { return services, err @@ -265,30 +250,6 @@ func (t *serviceBindingTrait) parseProvisionedServices(e *Environment) ([]sb.Ser return services, nil } -func (t *serviceBindingTrait) parseServiceBindings(e *Environment) ([]string, error) { - serviceBindings := make([]string, 0) - converter := reference.NewConverter("") - for _, s := range t.ServiceBindings { - ref, err := converter.FromString(s) - if err != nil { - return serviceBindings, err - } - if ref.Namespace == "" { - ref.Namespace = e.Integration.Namespace - } - if ref.Kind == "ServiceBinding" { - if ref.GroupVersionKind().GroupVersion().String() != sb.GroupVersion.String() { - return nil, fmt.Errorf("ServiceBinding: %q api version should be %q", s, sb.GroupVersion.String()) - } - if ref.Namespace != e.Integration.Namespace { - return nil, fmt.Errorf("ServiceBinding: %s should be in the same namespace %s as the integration", s, e.Integration.Namespace) - } - serviceBindings = append(serviceBindings, ref.Name) - } - } - return serviceBindings, nil -} - func createServiceBinding(e *Environment, services []sb.Service, name string) sb.ServiceBinding { spec := sb.ServiceBindingSpec{ NamingStrategy: "none", @@ -310,4 +271,4 @@ func createServiceBinding(e *Environment, services []sb.Service, name string) sb Spec: spec, } return serviceBinding -} +} \ No newline at end of file