Change the multi resolvers

Signed-off-by: Sergen Yalçın <yalcinsergen97@gmail.com>
This commit is contained in:
Sergen Yalçın 2025-05-09 18:37:10 +03:00
parent 1106a260c0
commit 3c38a1e875
No known key found for this signature in database
GPG Key ID: 9FB946893C6A9628
3 changed files with 9 additions and 18 deletions

View File

@ -50,9 +50,6 @@ const (
ClientAlias = "client" ClientAlias = "client"
ClientImport = "sigs.k8s.io/controller-runtime/pkg/client" ClientImport = "sigs.k8s.io/controller-runtime/pkg/client"
ConvertAlias = "convert"
ConvertImport = "github.com/crossplane/crossplane-tools/pkg/convert"
RuntimeAlias = "xpv1" RuntimeAlias = "xpv1"
RuntimeImport = "github.com/crossplane/crossplane-runtime/apis/common/v1" RuntimeImport = "github.com/crossplane/crossplane-runtime/apis/common/v1"
@ -61,9 +58,6 @@ const (
ReferenceAlias = "reference" ReferenceAlias = "reference"
ReferenceImport = "github.com/crossplane/crossplane-runtime/pkg/reference" ReferenceImport = "github.com/crossplane/crossplane-runtime/pkg/reference"
PtrAlias = "ptr"
PtrImport = "k8s.io/utils/ptr"
) )
func main() { func main() {
@ -234,16 +228,14 @@ func GenerateReferences(filename, header string, p *packages.Package) error {
comm := comments.In(p) comm := comments.In(p)
methods := method.Set{ 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), err := generate.WriteMethods(p, methods, filepath.Join(filepath.Dir(p.GoFiles[0]), filename),
generate.WithHeaders(header), generate.WithHeaders(header),
generate.WithImportAliases(map[string]string{ generate.WithImportAliases(map[string]string{
ClientImport: ClientAlias, ClientImport: ClientAlias,
ConvertImport: ConvertAlias,
ReferenceImport: ReferenceAlias, ReferenceImport: ReferenceAlias,
PtrAlias: PtrImport,
}), }),
generate.WithMatcher(match.AllOf( generate.WithMatcher(match.AllOf(
match.Managed(), match.Managed(),

View File

@ -29,7 +29,7 @@ import (
// NewResolveReferences returns a NewMethod that writes a ResolveReferences for // NewResolveReferences returns a NewMethod that writes a ResolveReferences for
// given managed resource, if needed. // 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) { return func(f *jen.File, o types.Object) {
n, ok := o.Type().(*types.Named) n, ok := o.Type().(*types.Named)
if !ok { if !ok {
@ -55,7 +55,7 @@ func NewResolveReferences(traverser *xptypes.Traverser, receiver, clientPath, re
for i, ref := range refs { for i, ref := range refs {
if ref.IsSlice { if ref.IsSlice {
hasMultiResolution = true hasMultiResolution = true
resolverCalls[i] = encapsulate(0, multiResolutionCall(ref, referencePkgPath, convertPkgPath), ref.GoValueFieldPath...).Line() resolverCalls[i] = encapsulate(0, multiResolutionCall(ref, referencePkgPath), ref.GoValueFieldPath...).Line()
} else { } else {
hasSingleResolution = true hasSingleResolution = true
resolverCalls[i] = encapsulate(0, singleResolutionCall(ref, referencePkgPath), ref.GoValueFieldPath...).Line() 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 { return func(fields ...string) *jen.Statement {
prefixPath := jen.Id(fields[0]) prefixPath := jen.Id(fields[0])
for i := 1; i < len(fields)-1; i++ { for i := 1; i < len(fields)-1; i++ {
@ -181,8 +181,8 @@ func multiResolutionCall(ref Reference, referencePkgPath string, convertPkgPath
} }
if ref.IsPointer { if ref.IsPointer {
setResolvedValues = currentValuePath.Clone().Op("=").Qual(convertPkgPath, toPointersFunction).Call(jen.Id("mrsp").Dot("ResolvedValues")) setResolvedValues = currentValuePath.Clone().Op("=").Qual(referencePkgPath, toPointersFunction).Call(jen.Id("mrsp").Dot("ResolvedValues"))
currentValuePath = jen.Qual(convertPkgPath, fromPointersFunction).Call(currentValuePath) currentValuePath = jen.Qual(referencePkgPath, fromPointersFunction).Call(currentValuePath)
} }
return &jen.Statement{ return &jen.Statement{

View File

@ -109,7 +109,6 @@ type Model struct {
import ( import (
"context" "context"
client "example.org/client" client "example.org/client"
convert "example.org/convert"
reference "example.org/reference" reference "example.org/reference"
v1beta11 "github.com/crossplane/provider-aws/apis/ec2/v1beta1" v1beta11 "github.com/crossplane/provider-aws/apis/ec2/v1beta1"
v1beta1 "github.com/crossplane/provider-aws/apis/identity/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 mg.Spec.ForProvider.SubnetIDRefs = mrsp.ResolvedReferences
mrsp, err = r.ResolveMultiple(ctx, reference.MultiResolutionRequest{ mrsp, err = r.ResolveMultiple(ctx, reference.MultiResolutionRequest{
CurrentValues: convert.FromPtrValues(mg.Spec.ForProvider.RouteTableIDs), CurrentValues: reference.FromPtrValues(mg.Spec.ForProvider.RouteTableIDs),
Extract: reference.ExternalName(), Extract: reference.ExternalName(),
References: mg.Spec.ForProvider.RouteTableIDsRefs, References: mg.Spec.ForProvider.RouteTableIDsRefs,
Selector: mg.Spec.ForProvider.RouteTableIDsSelector, Selector: mg.Spec.ForProvider.RouteTableIDsSelector,
@ -285,7 +284,7 @@ func (mg *Model) ResolveReferences(ctx context.Context, c client.Reader) error {
if err != nil { if err != nil {
return errors.Wrap(err, "mg.Spec.ForProvider.RouteTableIDs") 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 mg.Spec.ForProvider.RouteTableIDsRefs = mrsp.ResolvedReferences
rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ rsp, err = r.Resolve(ctx, reference.ResolutionRequest{
@ -339,7 +338,7 @@ func TestNewResolveReferences(t *testing.T) {
t.Error(err) t.Error(err)
} }
f := jen.NewFilePath("golang.org/fake/v1alpha1") 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 != "" { if diff := cmp.Diff(generated, fmt.Sprintf("%#v", f)); diff != "" {
t.Errorf("NewResolveReferences(): -want, +got\n%s", diff) t.Errorf("NewResolveReferences(): -want, +got\n%s", diff)
} }