diff --git a/pkg/controller/component/service_descriptor_utils.go b/pkg/controller/component/service_descriptor_utils.go index fbc7c4be41f..5f71b94e05c 100644 --- a/pkg/controller/component/service_descriptor_utils.go +++ b/pkg/controller/component/service_descriptor_utils.go @@ -58,20 +58,22 @@ func buildServiceReferencesWithoutResolve(ctx context.Context, cli client.Reader for _, serviceRefDecl := range compDef.Spec.ServiceRefDeclarations { serviceRef, ok := serviceRefs[serviceRefDecl.Name] if !ok { + if IsGenerated(comp) { + continue + } return fmt.Errorf("service-ref for %s is not defined", serviceRefDecl.Name) } var ( - namespace = synthesizedComp.Namespace - clusterName = synthesizedComp.ClusterName - sd *appsv1alpha1.ServiceDescriptor - err error + namespace = synthesizedComp.Namespace + sd *appsv1alpha1.ServiceDescriptor + err error ) switch { case serviceRef.Cluster != "": - sd, err = handleServiceRefFromCluster(ctx, cli, namespace, clusterName, *serviceRef, serviceRefDecl, true) + sd, err = handleServiceRefFromCluster(ctx, cli, namespace, *serviceRef, serviceRefDecl, true) case serviceRef.ClusterRef != nil: - sd, err = handleServiceRefFromCluster(ctx, cli, namespace, clusterName, *serviceRef, serviceRefDecl, false) + sd, err = handleServiceRefFromCluster(ctx, cli, namespace, *serviceRef, serviceRefDecl, false) case serviceRef.ServiceDescriptor != "": sd, err = handleServiceRefFromServiceDescriptor(ctx, cli, namespace, *serviceRef, serviceRefDecl) } @@ -87,12 +89,8 @@ func buildServiceReferencesWithoutResolve(ctx context.Context, cli client.Reader return nil } -func handleServiceRefFromCluster(ctx context.Context, cli client.Reader, namespace, clusterName string, +func handleServiceRefFromCluster(ctx context.Context, cli client.Reader, namespace string, serviceRef appsv1alpha1.ServiceRef, serviceRefDecl appsv1alpha1.ServiceRefDeclaration, legacy bool) (*appsv1alpha1.ServiceDescriptor, error) { - if serviceRef.Cluster == clusterName { - return nil, fmt.Errorf("cluster %s cannot reference itself", clusterName) - } - resolver := referencedVars if legacy { resolver = referencedVars4Legacy diff --git a/pkg/controller/component/service_descriptor_utils_test.go b/pkg/controller/component/service_descriptor_utils_test.go index 82a9baa960e..45dc4aeaa75 100644 --- a/pkg/controller/component/service_descriptor_utils_test.go +++ b/pkg/controller/component/service_descriptor_utils_test.go @@ -375,11 +375,18 @@ var _ = Describe("build service references", func() { BeforeEach(func() { compDef = &appsv1alpha1.ComponentDefinition{ + ObjectMeta: metav1.ObjectMeta{ + Name: "compdef", + }, Spec: appsv1alpha1.ComponentDefinitionSpec{ ServiceRefDeclarations: []appsv1alpha1.ServiceRefDeclaration{serviceRefDeclaration}, }, } comp = &appsv1alpha1.Component{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: namespace, + Name: "comp", + }, Spec: appsv1alpha1.ComponentSpec{ ServiceRefs: []appsv1alpha1.ServiceRef{}, }, @@ -392,6 +399,11 @@ var _ = Describe("build service references", func() { It("has service-ref not defined", func() { err := buildServiceReferencesWithoutResolve(testCtx.Ctx, testCtx.Cli, synthesizedComp, compDef, comp) + Expect(err).Should(Succeed()) + Expect(synthesizedComp.ServiceReferences).Should(HaveLen(0)) + + comp.Spec.CompDef = compDef.GetName() + err = buildServiceReferencesWithoutResolve(testCtx.Ctx, testCtx.Cli, synthesizedComp, compDef, comp) Expect(err).ShouldNot(Succeed()) Expect(err.Error()).Should(ContainSubstring("service-ref for %s is not defined", serviceRefDeclaration.Name)) })