From e9a9112fd202102c1a0e2c574d8c1ed83ecd3064 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergen=20Yal=C3=A7=C4=B1n?= Date: Fri, 2 May 2025 15:53:47 +0300 Subject: [PATCH 1/5] Add a nil check for reference resolvers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Sergen Yalçın --- internal/method/resolver.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/internal/method/resolver.go b/internal/method/resolver.go index 904fe74..c7a1680 100644 --- a/internal/method/resolver.go +++ b/internal/method/resolver.go @@ -58,7 +58,7 @@ func NewResolveReferences(traverser *xptypes.Traverser, receiver, clientPath, re resolverCalls[i] = encapsulate(0, multiResolutionCall(ref, referencePkgPath, convertPkgPath), ref.GoValueFieldPath...).Line() } else { hasSingleResolution = true - resolverCalls[i] = encapsulate(0, singleResolutionCall(ref, referencePkgPath, ptrPkgPath), ref.GoValueFieldPath...).Line() + resolverCalls[i] = encapsulate(0, singleResolutionCall(ref, referencePkgPath, ptrPkgPath, convertPkgPath), ref.GoValueFieldPath...).Line() } } var initStatements jen.Statement @@ -113,8 +113,9 @@ func encapsulate(index int, callFn resolutionCallFn, fields ...string) *jen.Stat } } -func singleResolutionCall(ref Reference, referencePkgPath string, ptrPkgPath string) resolutionCallFn { +func singleResolutionCall(ref Reference, referencePkgPath string, ptrPkgPath string, convertPkgPath string) resolutionCallFn { return func(fields ...string) *jen.Statement { + pkgPath := ptrPkgPath prefixPath := jen.Id(fields[0]) for i := 1; i < len(fields)-1; i++ { prefixPath = prefixPath.Dot(fields[i]) @@ -129,10 +130,13 @@ func singleResolutionCall(ref Reference, referencePkgPath string, ptrPkgPath str if ref.IsFloatPointer { toPointerFunction = "ToFloatPtrValue" fromPointerFunction = "FromFloatPtrValue" + pkgPath = convertPkgPath } if ref.IsPointer { - setResolvedValue = currentValuePath.Clone().Op("=").Qual(ptrPkgPath, toPointerFunction).Call(jen.Id("rsp").Dot("ResolvedValue")) - currentValuePath = jen.Qual(ptrPkgPath, fromPointerFunction).Call(currentValuePath, jen.Op(`""`)) + setResolvedValue = jen.If(jen.Id("v").Op(":=").Id("rsp").Dot("ResolvedValue")).Op(";").Id("v").Op("!=").Lit("").Block( + jen.Add(prefixPath.Clone().Dot(fields[len(fields)-1]).Clone().Op("=").Qual(pkgPath, toPointerFunction).Call(jen.Id("v")))).Else().Block( + jen.Add(prefixPath.Clone().Dot(fields[len(fields)-1]).Clone().Op("=").Nil())) + currentValuePath = jen.Qual(pkgPath, fromPointerFunction).Call(currentValuePath, jen.Op(`""`)) } return &jen.Statement{ jen.List(jen.Id("rsp"), jen.Err()).Op("=").Id("r").Dot("Resolve").Call( From 4383b0a8c7a0d6ef8ad74799180a370c75e39efb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergen=20Yal=C3=A7=C4=B1n?= Date: Mon, 5 May 2025 12:05:45 +0300 Subject: [PATCH 2/5] Fix the *float64 reference generation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Sergen Yalçın --- internal/method/resolver.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/internal/method/resolver.go b/internal/method/resolver.go index c7a1680..5b08092 100644 --- a/internal/method/resolver.go +++ b/internal/method/resolver.go @@ -115,7 +115,6 @@ func encapsulate(index int, callFn resolutionCallFn, fields ...string) *jen.Stat func singleResolutionCall(ref Reference, referencePkgPath string, ptrPkgPath string, convertPkgPath string) resolutionCallFn { return func(fields ...string) *jen.Statement { - pkgPath := ptrPkgPath prefixPath := jen.Id(fields[0]) for i := 1; i < len(fields)-1; i++ { prefixPath = prefixPath.Dot(fields[i]) @@ -125,18 +124,21 @@ func singleResolutionCall(ref Reference, referencePkgPath string, ptrPkgPath str selectorFieldPath := prefixPath.Clone().Dot(ref.GoSelectorFieldName) setResolvedValue := currentValuePath.Clone().Op("=").Id("rsp").Dot("ResolvedValue") + pkgPath := ptrPkgPath toPointerFunction := "To" fromPointerFunction := "Deref" - if ref.IsFloatPointer { - toPointerFunction = "ToFloatPtrValue" - fromPointerFunction = "FromFloatPtrValue" - pkgPath = convertPkgPath - } if ref.IsPointer { + if ref.IsFloatPointer { + toPointerFunction = "ToFloatPtrValue" + fromPointerFunction = "FromFloatPtrValue" + pkgPath = convertPkgPath + currentValuePath = jen.Qual(pkgPath, fromPointerFunction).Call(currentValuePath) + } else { + currentValuePath = jen.Qual(pkgPath, fromPointerFunction).Call(currentValuePath, jen.Op(`""`)) + } setResolvedValue = jen.If(jen.Id("v").Op(":=").Id("rsp").Dot("ResolvedValue")).Op(";").Id("v").Op("!=").Lit("").Block( jen.Add(prefixPath.Clone().Dot(fields[len(fields)-1]).Clone().Op("=").Qual(pkgPath, toPointerFunction).Call(jen.Id("v")))).Else().Block( jen.Add(prefixPath.Clone().Dot(fields[len(fields)-1]).Clone().Op("=").Nil())) - currentValuePath = jen.Qual(pkgPath, fromPointerFunction).Call(currentValuePath, jen.Op(`""`)) } return &jen.Statement{ jen.List(jen.Id("rsp"), jen.Err()).Op("=").Id("r").Dot("Resolve").Call( From 5da36d8390de246aab196e0e33c34c8aee7726dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergen=20Yal=C3=A7=C4=B1n?= Date: Mon, 5 May 2025 12:30:39 +0300 Subject: [PATCH 3/5] Add new case to unit-tests for *float64 type reference generation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Sergen Yalçın --- internal/method/resolver_test.go | 60 ++++++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 6 deletions(-) diff --git a/internal/method/resolver_test.go b/internal/method/resolver_test.go index b0da4bf..b0381ee 100644 --- a/internal/method/resolver_test.go +++ b/internal/method/resolver_test.go @@ -73,6 +73,10 @@ type ModelParameters struct { // +crossplane:generate:reference:type=golang.org/fake/v1alpha1.Configuration // +crossplane:generate:reference:extractor=golang.org/fake/v1alpha1.Configuration() CustomConfiguration *Configuration + + // +crossplane:generate:reference:type=github.com/crossplane/provider-aws/apis/identity/v1beta1.IAM + // +crossplane:generate:reference:extractor=Count() + Count *float64 } type NetworkSpec struct { @@ -150,7 +154,11 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { if err != nil { return errors.Wrap(err, "mg.Spec.ForProvider.SecurityGroupID") } - mg.Spec.ForProvider.SecurityGroupID = ptr.To(rsp.ResolvedValue) + if v := rsp.ResolvedValue; v != "" { + mg.Spec.ForProvider.SecurityGroupID = ptr.To(v) + } else { + mg.Spec.ForProvider.SecurityGroupID = nil + } mg.Spec.ForProvider.SecurityGroupIDRef = rsp.ResolvedReference rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ @@ -166,7 +174,11 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { if err != nil { return errors.Wrap(err, "mg.Spec.ForProvider.IAMRoleARN") } - mg.Spec.ForProvider.IAMRoleARN = ptr.To(rsp.ResolvedValue) + if v := rsp.ResolvedValue; v != "" { + mg.Spec.ForProvider.IAMRoleARN = ptr.To(v) + } else { + mg.Spec.ForProvider.IAMRoleARN = nil + } mg.Spec.ForProvider.IAMRoleARNRef = rsp.ResolvedReference rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ @@ -182,7 +194,11 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { if err != nil { return errors.Wrap(err, "mg.Spec.ForProvider.NestedTargetWithPath") } - mg.Spec.ForProvider.NestedTargetWithPath = ptr.To(rsp.ResolvedValue) + if v := rsp.ResolvedValue; v != "" { + mg.Spec.ForProvider.NestedTargetWithPath = ptr.To(v) + } else { + mg.Spec.ForProvider.NestedTargetWithPath = nil + } mg.Spec.ForProvider.NestedTargetWithPathRef = rsp.ResolvedReference rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ @@ -198,7 +214,11 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { if err != nil { return errors.Wrap(err, "mg.Spec.ForProvider.NestedTargetNoPath") } - mg.Spec.ForProvider.NestedTargetNoPath = ptr.To(rsp.ResolvedValue) + if v := rsp.ResolvedValue; v != "" { + mg.Spec.ForProvider.NestedTargetNoPath = ptr.To(v) + } else { + mg.Spec.ForProvider.NestedTargetNoPath = nil + } mg.Spec.ForProvider.NestedTargetNoPathRef = rsp.ResolvedReference rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ @@ -214,7 +234,11 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { if err != nil { return errors.Wrap(err, "mg.Spec.ForProvider.NoArgNoPath") } - mg.Spec.ForProvider.NoArgNoPath = ptr.To(rsp.ResolvedValue) + if v := rsp.ResolvedValue; v != "" { + mg.Spec.ForProvider.NoArgNoPath = ptr.To(v) + } else { + mg.Spec.ForProvider.NoArgNoPath = nil + } mg.Spec.ForProvider.NoArgNoPathRef = rsp.ResolvedReference if mg.Spec.ForProvider.Network != nil { @@ -298,9 +322,33 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { if err != nil { return errors.Wrap(err, "mg.Spec.ForProvider.CustomConfiguration") } - mg.Spec.ForProvider.CustomConfiguration = ptr.To(rsp.ResolvedValue) + if v := rsp.ResolvedValue; v != "" { + mg.Spec.ForProvider.CustomConfiguration = ptr.To(v) + } else { + mg.Spec.ForProvider.CustomConfiguration = nil + } mg.Spec.ForProvider.CustomConfigurationRef = rsp.ResolvedReference + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: convert.FromFloatPtrValue(mg.Spec.ForProvider.Count), + Extract: Count(), + Reference: mg.Spec.ForProvider.CountRef, + Selector: mg.Spec.ForProvider.CountSelector, + To: reference.To{ + List: &v1beta1.IAMList{}, + Managed: &v1beta1.IAM{}, + }, + }) + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.Count") + } + if v := rsp.ResolvedValue; v != "" { + mg.Spec.ForProvider.Count = convert.ToFloatPtrValue(v) + } else { + mg.Spec.ForProvider.Count = nil + } + mg.Spec.ForProvider.CountRef = rsp.ResolvedReference + return nil } ` From 1106a260c03abf0e0d4868da443c8cfb43f8a620 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergen=20Yal=C3=A7=C4=B1n?= Date: Fri, 9 May 2025 18:19:21 +0300 Subject: [PATCH 4/5] Reuse the crossplane-runtime helpers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Sergen Yalçın --- internal/method/resolver.go | 26 ++++++--------- internal/method/resolver_test.go | 57 ++++++++------------------------ 2 files changed, 24 insertions(+), 59 deletions(-) diff --git a/internal/method/resolver.go b/internal/method/resolver.go index 5b08092..6bb5474 100644 --- a/internal/method/resolver.go +++ b/internal/method/resolver.go @@ -58,7 +58,7 @@ func NewResolveReferences(traverser *xptypes.Traverser, receiver, clientPath, re resolverCalls[i] = encapsulate(0, multiResolutionCall(ref, referencePkgPath, convertPkgPath), ref.GoValueFieldPath...).Line() } else { hasSingleResolution = true - resolverCalls[i] = encapsulate(0, singleResolutionCall(ref, referencePkgPath, ptrPkgPath, convertPkgPath), ref.GoValueFieldPath...).Line() + resolverCalls[i] = encapsulate(0, singleResolutionCall(ref, referencePkgPath), ref.GoValueFieldPath...).Line() } } var initStatements jen.Statement @@ -113,7 +113,7 @@ func encapsulate(index int, callFn resolutionCallFn, fields ...string) *jen.Stat } } -func singleResolutionCall(ref Reference, referencePkgPath string, ptrPkgPath string, convertPkgPath string) resolutionCallFn { +func singleResolutionCall(ref Reference, referencePkgPath string) resolutionCallFn { return func(fields ...string) *jen.Statement { prefixPath := jen.Id(fields[0]) for i := 1; i < len(fields)-1; i++ { @@ -124,21 +124,15 @@ func singleResolutionCall(ref Reference, referencePkgPath string, ptrPkgPath str selectorFieldPath := prefixPath.Clone().Dot(ref.GoSelectorFieldName) setResolvedValue := currentValuePath.Clone().Op("=").Id("rsp").Dot("ResolvedValue") - pkgPath := ptrPkgPath - toPointerFunction := "To" - fromPointerFunction := "Deref" + toPointerFunction := "ToPtrValue" + fromPointerFunction := "FromPtrValue" + if ref.IsFloatPointer { + toPointerFunction = "ToFloatPtrValue" + fromPointerFunction = "FromFloatPtrValue" + } if ref.IsPointer { - if ref.IsFloatPointer { - toPointerFunction = "ToFloatPtrValue" - fromPointerFunction = "FromFloatPtrValue" - pkgPath = convertPkgPath - currentValuePath = jen.Qual(pkgPath, fromPointerFunction).Call(currentValuePath) - } else { - currentValuePath = jen.Qual(pkgPath, fromPointerFunction).Call(currentValuePath, jen.Op(`""`)) - } - setResolvedValue = jen.If(jen.Id("v").Op(":=").Id("rsp").Dot("ResolvedValue")).Op(";").Id("v").Op("!=").Lit("").Block( - jen.Add(prefixPath.Clone().Dot(fields[len(fields)-1]).Clone().Op("=").Qual(pkgPath, toPointerFunction).Call(jen.Id("v")))).Else().Block( - jen.Add(prefixPath.Clone().Dot(fields[len(fields)-1]).Clone().Op("=").Nil())) + setResolvedValue = currentValuePath.Clone().Op("=").Qual(referencePkgPath, toPointerFunction).Call(jen.Id("rsp").Dot("ResolvedValue")) + currentValuePath = jen.Qual(referencePkgPath, fromPointerFunction).Call(currentValuePath) } return &jen.Statement{ jen.List(jen.Id("rsp"), jen.Err()).Op("=").Id("r").Dot("Resolve").Call( diff --git a/internal/method/resolver_test.go b/internal/method/resolver_test.go index b0381ee..1cab089 100644 --- a/internal/method/resolver_test.go +++ b/internal/method/resolver_test.go @@ -114,7 +114,6 @@ import ( v1beta11 "github.com/crossplane/provider-aws/apis/ec2/v1beta1" v1beta1 "github.com/crossplane/provider-aws/apis/identity/v1beta1" errors "github.com/pkg/errors" - ptr "k8s.io/utils/ptr" ) // ResolveReferences of this Model. @@ -142,7 +141,7 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { mg.Spec.ForProvider.APIIDRef = rsp.ResolvedReference rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ - CurrentValue: ptr.Deref(mg.Spec.ForProvider.SecurityGroupID, ""), + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.SecurityGroupID), Extract: reference.ExternalName(), Reference: mg.Spec.ForProvider.SecurityGroupIDRef, Selector: mg.Spec.ForProvider.SecurityGroupIDSelector, @@ -154,15 +153,11 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { if err != nil { return errors.Wrap(err, "mg.Spec.ForProvider.SecurityGroupID") } - if v := rsp.ResolvedValue; v != "" { - mg.Spec.ForProvider.SecurityGroupID = ptr.To(v) - } else { - mg.Spec.ForProvider.SecurityGroupID = nil - } + mg.Spec.ForProvider.SecurityGroupID = reference.ToPtrValue(rsp.ResolvedValue) mg.Spec.ForProvider.SecurityGroupIDRef = rsp.ResolvedReference rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ - CurrentValue: ptr.Deref(mg.Spec.ForProvider.IAMRoleARN, ""), + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.IAMRoleARN), Extract: v1beta1.IAMRoleARN(), Reference: mg.Spec.ForProvider.IAMRoleARNRef, Selector: mg.Spec.ForProvider.IAMRoleARNSelector, @@ -174,15 +169,11 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { if err != nil { return errors.Wrap(err, "mg.Spec.ForProvider.IAMRoleARN") } - if v := rsp.ResolvedValue; v != "" { - mg.Spec.ForProvider.IAMRoleARN = ptr.To(v) - } else { - mg.Spec.ForProvider.IAMRoleARN = nil - } + mg.Spec.ForProvider.IAMRoleARN = reference.ToPtrValue(rsp.ResolvedValue) mg.Spec.ForProvider.IAMRoleARNRef = rsp.ResolvedReference rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ - CurrentValue: ptr.Deref(mg.Spec.ForProvider.NestedTargetWithPath, ""), + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.NestedTargetWithPath), Extract: v1beta1.IAMRoleARN("a.b.c"), Reference: mg.Spec.ForProvider.NestedTargetWithPathRef, Selector: mg.Spec.ForProvider.NestedTargetWithPathSelector, @@ -194,15 +185,11 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { if err != nil { return errors.Wrap(err, "mg.Spec.ForProvider.NestedTargetWithPath") } - if v := rsp.ResolvedValue; v != "" { - mg.Spec.ForProvider.NestedTargetWithPath = ptr.To(v) - } else { - mg.Spec.ForProvider.NestedTargetWithPath = nil - } + mg.Spec.ForProvider.NestedTargetWithPath = reference.ToPtrValue(rsp.ResolvedValue) mg.Spec.ForProvider.NestedTargetWithPathRef = rsp.ResolvedReference rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ - CurrentValue: ptr.Deref(mg.Spec.ForProvider.NestedTargetNoPath, ""), + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.NestedTargetNoPath), Extract: IAMRoleARN("a.b.c"), Reference: mg.Spec.ForProvider.NestedTargetNoPathRef, Selector: mg.Spec.ForProvider.NestedTargetNoPathSelector, @@ -214,15 +201,11 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { if err != nil { return errors.Wrap(err, "mg.Spec.ForProvider.NestedTargetNoPath") } - if v := rsp.ResolvedValue; v != "" { - mg.Spec.ForProvider.NestedTargetNoPath = ptr.To(v) - } else { - mg.Spec.ForProvider.NestedTargetNoPath = nil - } + mg.Spec.ForProvider.NestedTargetNoPath = reference.ToPtrValue(rsp.ResolvedValue) mg.Spec.ForProvider.NestedTargetNoPathRef = rsp.ResolvedReference rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ - CurrentValue: ptr.Deref(mg.Spec.ForProvider.NoArgNoPath, ""), + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.NoArgNoPath), Extract: IAMRoleARN(), Reference: mg.Spec.ForProvider.NoArgNoPathRef, Selector: mg.Spec.ForProvider.NoArgNoPathSelector, @@ -234,11 +217,7 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { if err != nil { return errors.Wrap(err, "mg.Spec.ForProvider.NoArgNoPath") } - if v := rsp.ResolvedValue; v != "" { - mg.Spec.ForProvider.NoArgNoPath = ptr.To(v) - } else { - mg.Spec.ForProvider.NoArgNoPath = nil - } + mg.Spec.ForProvider.NoArgNoPath = reference.ToPtrValue(rsp.ResolvedValue) mg.Spec.ForProvider.NoArgNoPathRef = rsp.ResolvedReference if mg.Spec.ForProvider.Network != nil { @@ -310,7 +289,7 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { mg.Spec.ForProvider.RouteTableIDsRefs = mrsp.ResolvedReferences rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ - CurrentValue: ptr.Deref(mg.Spec.ForProvider.CustomConfiguration, ""), + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.CustomConfiguration), Extract: Configuration(), Reference: mg.Spec.ForProvider.CustomConfigurationRef, Selector: mg.Spec.ForProvider.CustomConfigurationSelector, @@ -322,15 +301,11 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { if err != nil { return errors.Wrap(err, "mg.Spec.ForProvider.CustomConfiguration") } - if v := rsp.ResolvedValue; v != "" { - mg.Spec.ForProvider.CustomConfiguration = ptr.To(v) - } else { - mg.Spec.ForProvider.CustomConfiguration = nil - } + mg.Spec.ForProvider.CustomConfiguration = reference.ToPtrValue(rsp.ResolvedValue) mg.Spec.ForProvider.CustomConfigurationRef = rsp.ResolvedReference rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ - CurrentValue: convert.FromFloatPtrValue(mg.Spec.ForProvider.Count), + CurrentValue: reference.FromFloatPtrValue(mg.Spec.ForProvider.Count), Extract: Count(), Reference: mg.Spec.ForProvider.CountRef, Selector: mg.Spec.ForProvider.CountSelector, @@ -342,11 +317,7 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { if err != nil { return errors.Wrap(err, "mg.Spec.ForProvider.Count") } - if v := rsp.ResolvedValue; v != "" { - mg.Spec.ForProvider.Count = convert.ToFloatPtrValue(v) - } else { - mg.Spec.ForProvider.Count = nil - } + mg.Spec.ForProvider.Count = reference.ToFloatPtrValue(rsp.ResolvedValue) mg.Spec.ForProvider.CountRef = rsp.ResolvedReference return nil From 3c38a1e875cb98868e3929d875a2d185e37d2316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergen=20Yal=C3=A7=C4=B1n?= Date: Fri, 9 May 2025 18:37:10 +0300 Subject: [PATCH 5/5] Change the multi resolvers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Sergen Yalçın --- cmd/angryjet/main.go | 10 +--------- internal/method/resolver.go | 10 +++++----- internal/method/resolver_test.go | 7 +++---- 3 files changed, 9 insertions(+), 18 deletions(-) diff --git a/cmd/angryjet/main.go b/cmd/angryjet/main.go index 6e0d28b..77cec3c 100644 --- a/cmd/angryjet/main.go +++ b/cmd/angryjet/main.go @@ -50,9 +50,6 @@ const ( ClientAlias = "client" ClientImport = "sigs.k8s.io/controller-runtime/pkg/client" - ConvertAlias = "convert" - ConvertImport = "github.com/crossplane/crossplane-tools/pkg/convert" - RuntimeAlias = "xpv1" RuntimeImport = "github.com/crossplane/crossplane-runtime/apis/common/v1" @@ -61,9 +58,6 @@ const ( ReferenceAlias = "reference" ReferenceImport = "github.com/crossplane/crossplane-runtime/pkg/reference" - - PtrAlias = "ptr" - PtrImport = "k8s.io/utils/ptr" ) func main() { @@ -234,16 +228,14 @@ func GenerateReferences(filename, header string, p *packages.Package) error { comm := comments.In(p) methods := method.Set{ - "ResolveReferences": method.NewResolveReferences(types.NewTraverser(comm), receiver, ClientImport, ReferenceImport, ConvertImport, PtrImport), + "ResolveReferences": method.NewResolveReferences(types.NewTraverser(comm), receiver, ClientImport, ReferenceImport), } err := generate.WriteMethods(p, methods, filepath.Join(filepath.Dir(p.GoFiles[0]), filename), generate.WithHeaders(header), generate.WithImportAliases(map[string]string{ ClientImport: ClientAlias, - ConvertImport: ConvertAlias, ReferenceImport: ReferenceAlias, - PtrAlias: PtrImport, }), generate.WithMatcher(match.AllOf( match.Managed(), diff --git a/internal/method/resolver.go b/internal/method/resolver.go index 6bb5474..71c40eb 100644 --- a/internal/method/resolver.go +++ b/internal/method/resolver.go @@ -29,7 +29,7 @@ import ( // NewResolveReferences returns a NewMethod that writes a ResolveReferences for // given managed resource, if needed. -func NewResolveReferences(traverser *xptypes.Traverser, receiver, clientPath, referencePkgPath string, convertPkgPath string, ptrPkgPath string) New { +func NewResolveReferences(traverser *xptypes.Traverser, receiver, clientPath, referencePkgPath string) New { return func(f *jen.File, o types.Object) { n, ok := o.Type().(*types.Named) if !ok { @@ -55,7 +55,7 @@ func NewResolveReferences(traverser *xptypes.Traverser, receiver, clientPath, re for i, ref := range refs { if ref.IsSlice { hasMultiResolution = true - resolverCalls[i] = encapsulate(0, multiResolutionCall(ref, referencePkgPath, convertPkgPath), ref.GoValueFieldPath...).Line() + resolverCalls[i] = encapsulate(0, multiResolutionCall(ref, referencePkgPath), ref.GoValueFieldPath...).Line() } else { hasSingleResolution = true resolverCalls[i] = encapsulate(0, singleResolutionCall(ref, referencePkgPath), ref.GoValueFieldPath...).Line() @@ -162,7 +162,7 @@ func singleResolutionCall(ref Reference, referencePkgPath string) resolutionCall } } -func multiResolutionCall(ref Reference, referencePkgPath string, convertPkgPath string) resolutionCallFn { +func multiResolutionCall(ref Reference, referencePkgPath string) resolutionCallFn { return func(fields ...string) *jen.Statement { prefixPath := jen.Id(fields[0]) for i := 1; i < len(fields)-1; i++ { @@ -181,8 +181,8 @@ func multiResolutionCall(ref Reference, referencePkgPath string, convertPkgPath } if ref.IsPointer { - setResolvedValues = currentValuePath.Clone().Op("=").Qual(convertPkgPath, toPointersFunction).Call(jen.Id("mrsp").Dot("ResolvedValues")) - currentValuePath = jen.Qual(convertPkgPath, fromPointersFunction).Call(currentValuePath) + setResolvedValues = currentValuePath.Clone().Op("=").Qual(referencePkgPath, toPointersFunction).Call(jen.Id("mrsp").Dot("ResolvedValues")) + currentValuePath = jen.Qual(referencePkgPath, fromPointersFunction).Call(currentValuePath) } return &jen.Statement{ diff --git a/internal/method/resolver_test.go b/internal/method/resolver_test.go index 1cab089..aa0769e 100644 --- a/internal/method/resolver_test.go +++ b/internal/method/resolver_test.go @@ -109,7 +109,6 @@ type Model struct { import ( "context" client "example.org/client" - convert "example.org/convert" reference "example.org/reference" v1beta11 "github.com/crossplane/provider-aws/apis/ec2/v1beta1" v1beta1 "github.com/crossplane/provider-aws/apis/identity/v1beta1" @@ -273,7 +272,7 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { mg.Spec.ForProvider.SubnetIDRefs = mrsp.ResolvedReferences mrsp, err = r.ResolveMultiple(ctx, reference.MultiResolutionRequest{ - CurrentValues: convert.FromPtrValues(mg.Spec.ForProvider.RouteTableIDs), + CurrentValues: reference.FromPtrValues(mg.Spec.ForProvider.RouteTableIDs), Extract: reference.ExternalName(), References: mg.Spec.ForProvider.RouteTableIDsRefs, Selector: mg.Spec.ForProvider.RouteTableIDsSelector, @@ -285,7 +284,7 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error { if err != nil { return errors.Wrap(err, "mg.Spec.ForProvider.RouteTableIDs") } - mg.Spec.ForProvider.RouteTableIDs = convert.ToPtrValues(mrsp.ResolvedValues) + mg.Spec.ForProvider.RouteTableIDs = reference.ToPtrValues(mrsp.ResolvedValues) mg.Spec.ForProvider.RouteTableIDsRefs = mrsp.ResolvedReferences rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ @@ -339,7 +338,7 @@ func TestNewResolveReferences(t *testing.T) { t.Error(err) } f := jen.NewFilePath("golang.org/fake/v1alpha1") - NewResolveReferences(xptypes.NewTraverser(comments.In(pkgs[0])), "mg", "example.org/client", "example.org/reference", "example.org/convert", "k8s.io/utils/ptr")(f, pkgs[0].Types.Scope().Lookup("Model")) + NewResolveReferences(xptypes.NewTraverser(comments.In(pkgs[0])), "mg", "example.org/client", "example.org/reference")(f, pkgs[0].Types.Scope().Lookup("Model")) if diff := cmp.Diff(generated, fmt.Sprintf("%#v", f)); diff != "" { t.Errorf("NewResolveReferences(): -want, +got\n%s", diff) }