@@ -66,7 +66,7 @@ func Setup(mgr ctrl.Manager, l logging.Logger, rl workqueue.RateLimiter) error {
66
66
67
67
r := managed .NewReconciler (mgr ,
68
68
resource .ManagedKind (v1alpha1 .AccessControlListGroupVersionKind ),
69
- managed .WithExternalConnecter ( & connector {
69
+ managed .WithExternalConnectDisconnecter ( & connectDisconnector {
70
70
kube : mgr .GetClient (),
71
71
usage : resource .NewProviderConfigUsageTracker (mgr .GetClient (), & apisv1alpha1.ProviderConfigUsage {}),
72
72
newServiceFn : kafka .NewAdminClient }),
@@ -81,21 +81,22 @@ func Setup(mgr ctrl.Manager, l logging.Logger, rl workqueue.RateLimiter) error {
81
81
Complete (r )
82
82
}
83
83
84
- // A connector is expected to produce an ExternalClient when its Connect method
85
- // is called.
86
- type connector struct {
84
+ // A connectDisconnector is expected to produce an ExternalClient when its Connect method
85
+ // is called and close it when its Disconnect method is called .
86
+ type connectDisconnector struct {
87
87
kube client.Client
88
88
usage resource.Tracker
89
89
log logging.Logger
90
90
newServiceFn func (ctx context.Context , creds []byte , kube client.Client ) (* kadm.Client , error )
91
+ cachedClient * kadm.Client
91
92
}
92
93
93
94
// Connect typically produces an ExternalClient by:
94
95
// 1. Tracking that the managed resource is using a ProviderConfig.
95
96
// 2. Getting the managed resource's ProviderConfig.
96
97
// 3. Getting the credentials specified by the ProviderConfig.
97
98
// 4. Using the credentials to form a client.
98
- func (c * connector ) Connect (ctx context.Context , mg resource.Managed ) (managed.ExternalClient , error ) {
99
+ func (c * connectDisconnector ) Connect (ctx context.Context , mg resource.Managed ) (managed.ExternalClient , error ) {
99
100
cr , ok := mg .(* v1alpha1.AccessControlList )
100
101
if ! ok {
101
102
return nil , errors .New (errNotAccessControlList )
@@ -124,6 +125,11 @@ func (c *connector) Connect(ctx context.Context, mg resource.Managed) (managed.E
124
125
return & external {kafkaClient : svc , log : c .log }, nil
125
126
}
126
127
128
+ func (c * connectDisconnector ) Disconnect (ctx context.Context ) error {
129
+ c .cachedClient .Close ()
130
+ return nil
131
+ }
132
+
127
133
// An ExternalClient observes, then either creates, updates, or deletes an
128
134
// external resource to ensure it reflects the managed resource's desired state.
129
135
type external struct {
0 commit comments