Skip to content

Commit 220a859

Browse files
committed
Add disconnector for acl ExternalClient
Signed-off-by: Jake Utley <[email protected]>
1 parent 29eeb1a commit 220a859

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

internal/controller/acl/acl.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func Setup(mgr ctrl.Manager, l logging.Logger, rl workqueue.RateLimiter) error {
6666

6767
r := managed.NewReconciler(mgr,
6868
resource.ManagedKind(v1alpha1.AccessControlListGroupVersionKind),
69-
managed.WithExternalConnecter(&connector{
69+
managed.WithExternalConnectDisconnecter(&connectDisconnector{
7070
kube: mgr.GetClient(),
7171
usage: resource.NewProviderConfigUsageTracker(mgr.GetClient(), &apisv1alpha1.ProviderConfigUsage{}),
7272
newServiceFn: kafka.NewAdminClient}),
@@ -81,21 +81,22 @@ func Setup(mgr ctrl.Manager, l logging.Logger, rl workqueue.RateLimiter) error {
8181
Complete(r)
8282
}
8383

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 {
8787
kube client.Client
8888
usage resource.Tracker
8989
log logging.Logger
9090
newServiceFn func(ctx context.Context, creds []byte, kube client.Client) (*kadm.Client, error)
91+
cachedClient *kadm.Client
9192
}
9293

9394
// Connect typically produces an ExternalClient by:
9495
// 1. Tracking that the managed resource is using a ProviderConfig.
9596
// 2. Getting the managed resource's ProviderConfig.
9697
// 3. Getting the credentials specified by the ProviderConfig.
9798
// 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) {
99100
cr, ok := mg.(*v1alpha1.AccessControlList)
100101
if !ok {
101102
return nil, errors.New(errNotAccessControlList)
@@ -124,6 +125,11 @@ func (c *connector) Connect(ctx context.Context, mg resource.Managed) (managed.E
124125
return &external{kafkaClient: svc, log: c.log}, nil
125126
}
126127

128+
func (c *connectDisconnector) Disconnect(ctx context.Context) error {
129+
c.cachedClient.Close()
130+
return nil
131+
}
132+
127133
// An ExternalClient observes, then either creates, updates, or deletes an
128134
// external resource to ensure it reflects the managed resource's desired state.
129135
type external struct {

internal/controller/topic/topic.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func Setup(mgr ctrl.Manager, l logging.Logger, rl workqueue.RateLimiter) error {
6161

6262
r := managed.NewReconciler(mgr,
6363
resource.ManagedKind(v1alpha1.TopicGroupVersionKind),
64-
managed.WithExternalConnectDisconnecter(&connector{
64+
managed.WithExternalConnectDisconnecter(&connectDisconnector{
6565
kube: mgr.GetClient(),
6666
usage: resource.NewProviderConfigUsageTracker(mgr.GetClient(), &apisv1alpha1.ProviderConfigUsage{}),
6767
log: l,
@@ -76,9 +76,9 @@ func Setup(mgr ctrl.Manager, l logging.Logger, rl workqueue.RateLimiter) error {
7676
Complete(r)
7777
}
7878

79-
// A connector is expected to produce an ExternalClient when its Connect method
80-
// is called.
81-
type connector struct {
79+
// A connectDisconnector is expected to produce an ExternalClient when its Connect method
80+
// is called and close it when its Disconnect method is called.
81+
type connectDisconnector struct {
8282
kube client.Client
8383
usage resource.Tracker
8484
log logging.Logger
@@ -91,7 +91,7 @@ type connector struct {
9191
// 2. Getting the managed resource's ProviderConfig.
9292
// 3. Getting the credentials specified by the ProviderConfig.
9393
// 4. Using the credentials to form a client.
94-
func (c *connector) Connect(ctx context.Context, mg resource.Managed) (managed.ExternalClient, error) {
94+
func (c *connectDisconnector) Connect(ctx context.Context, mg resource.Managed) (managed.ExternalClient, error) {
9595
cr, ok := mg.(*v1alpha1.Topic)
9696
if !ok {
9797
return nil, errors.New(errNotTopic)
@@ -121,7 +121,7 @@ func (c *connector) Connect(ctx context.Context, mg resource.Managed) (managed.E
121121
return &external{kafkaClient: svc, log: c.log}, nil
122122
}
123123

124-
func (c *connector) Disconnect(ctx context.Context) error {
124+
func (c *connectDisconnector) Disconnect(ctx context.Context) error {
125125
c.cachedClient.Close()
126126
return nil
127127
}

0 commit comments

Comments
 (0)