@@ -39,7 +39,6 @@ import (
3939)
4040
4141const (
42- errNotMyType = "managed resource is not a MyType custom resource"
4342 errTrackPCUsage = "cannot track ProviderConfig usage"
4443 errGetPC = "cannot get ProviderConfig"
4544 errGetCPC = "cannot get ClusterProviderConfig"
@@ -70,7 +69,7 @@ func Setup(mgr ctrl.Manager, o controller.Options) error {
7069 name := managed .ControllerName (v1alpha1 .MyTypeGroupKind )
7170
7271 opts := []managed.ReconcilerOption {
73- managed .WithExternalConnector (& connector {
72+ managed.WithTypedExternalConnector [ * v1alpha1. MyType ] (& connector {
7473 kube : mgr .GetClient (),
7574 usage : resource .NewProviderConfigUsageTracker (mgr .GetClient (), & apisv1alpha1.ProviderConfigUsage {}),
7675 newServiceFn : newNoOpService }),
@@ -123,26 +122,19 @@ type connector struct {
123122// 2. Getting the managed resource's ProviderConfig.
124123// 3. Getting the credentials specified by the ProviderConfig.
125124// 4. Using the credentials to form a client.
126- func (c * connector ) Connect (ctx context.Context , mg resource.Managed ) (managed.ExternalClient , error ) {
127- cr , ok := mg .(* v1alpha1.MyType )
128- if ! ok {
129- return nil , errors .New (errNotMyType )
130- }
131-
125+ func (c * connector ) Connect (ctx context.Context , cr * v1alpha1.MyType ) (managed.TypedExternalClient [* v1alpha1.MyType ], error ) {
132126 if err := c .usage .Track (ctx , cr ); err != nil {
133127 return nil , errors .Wrap (err , errTrackPCUsage )
134128 }
135129
136130 var cd apisv1alpha1.ProviderCredentials
137131
138- // Switch to ModernManaged resource to get ProviderConfigRef
139- m := mg .(resource.ModernManaged )
140- ref := m .GetProviderConfigReference ()
132+ ref := cr .GetProviderConfigReference ()
141133
142134 switch ref .Kind {
143135 case "ProviderConfig" :
144136 pc := & apisv1alpha1.ProviderConfig {}
145- if err := c .kube .Get (ctx , types.NamespacedName {Name : ref .Name , Namespace : m .GetNamespace ()}, pc ); err != nil {
137+ if err := c .kube .Get (ctx , types.NamespacedName {Name : ref .Name , Namespace : cr .GetNamespace ()}, pc ); err != nil {
146138 return nil , errors .Wrap (err , errGetPC )
147139 }
148140 cd = pc .Spec .Credentials
@@ -177,21 +169,16 @@ type external struct {
177169 service interface {}
178170}
179171
180- func (c * external ) Observe (ctx context.Context , mg resource. Managed ) (managed.ExternalObservation , error ) {
172+ func (c * external ) Observe (ctx context.Context , cr * v1alpha1. MyType ) (managed.ExternalObservation , error ) {
181173 // If the managed resource is marked for deletion then deleted it.
182174 // Because there is no external resource to observe, we return false for
183175 // ResourceExists.
184- if meta .WasDeleted (mg ) {
176+ if meta .WasDeleted (cr ) {
185177 return managed.ExternalObservation {
186178 ResourceExists : false ,
187179 }, nil
188180 }
189181
190- cr , ok := mg .(* v1alpha1.MyType )
191- if ! ok {
192- return managed.ExternalObservation {}, errors .New (errNotMyType )
193- }
194-
195182 // These fmt statements should be removed in the real implementation.
196183 fmt .Printf ("Observing: %+v" , cr )
197184
@@ -230,12 +217,8 @@ func (c *external) Observe(ctx context.Context, mg resource.Managed) (managed.Ex
230217 }, nil
231218}
232219
233- func (c * external ) Create (ctx context.Context , mg resource.Managed ) (managed.ExternalCreation , error ) {
234- cr , ok := mg .(* v1alpha1.MyType )
220+ func (c * external ) Create (ctx context.Context , cr * v1alpha1.MyType ) (managed.ExternalCreation , error ) {
235221 cr .Status .SetConditions (xpv1 .Creating ())
236- if ! ok {
237- return managed.ExternalCreation {}, errors .New (errNotMyType )
238- }
239222
240223 fmt .Printf ("Creating: %+v" , cr )
241224
@@ -250,12 +233,7 @@ func (c *external) Create(ctx context.Context, mg resource.Managed) (managed.Ext
250233 }, nil
251234}
252235
253- func (c * external ) Update (ctx context.Context , mg resource.Managed ) (managed.ExternalUpdate , error ) {
254- cr , ok := mg .(* v1alpha1.MyType )
255- if ! ok {
256- return managed.ExternalUpdate {}, errors .New (errNotMyType )
257- }
258-
236+ func (c * external ) Update (ctx context.Context , cr * v1alpha1.MyType ) (managed.ExternalUpdate , error ) {
259237 fmt .Printf ("Updating: %+v" , cr )
260238
261239 // Copy ConfigurableField to AtProvider and complete the update.
@@ -268,12 +246,8 @@ func (c *external) Update(ctx context.Context, mg resource.Managed) (managed.Ext
268246 }, nil
269247}
270248
271- func (c * external ) Delete (ctx context.Context , mg resource.Managed ) (managed.ExternalDelete , error ) {
272- cr , ok := mg .(* v1alpha1.MyType )
249+ func (c * external ) Delete (ctx context.Context , cr * v1alpha1.MyType ) (managed.ExternalDelete , error ) {
273250 cr .Status .SetConditions (xpv1 .Deleting ())
274- if ! ok {
275- return managed.ExternalDelete {}, errors .New (errNotMyType )
276- }
277251
278252 fmt .Printf ("Deleting: %+v" , cr )
279253
0 commit comments