Skip to content

Commit

Permalink
fix: allow service-ref not defined in legacy API (#7035)
Browse files Browse the repository at this point in the history
  • Loading branch information
leon-inf authored Apr 12, 2024
1 parent 44579dc commit 80fe9c0
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 11 deletions.
20 changes: 9 additions & 11 deletions pkg/controller/component/service_descriptor_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand All @@ -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
Expand Down
12 changes: 12 additions & 0 deletions pkg/controller/component/service_descriptor_utils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{},
},
Expand All @@ -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))
})
Expand Down

0 comments on commit 80fe9c0

Please sign in to comment.