Skip to content
This repository was archived by the owner on Jun 13, 2025. It is now read-only.

Commit 680fd09

Browse files
committed
Take ownership of Scaleway secret
1 parent 9430fc7 commit 680fd09

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

internal/controller/secret.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,20 @@ package controller
22

33
import (
44
"context"
5+
"fmt"
56

67
infrastructurev1beta1 "github.com/Tomy2e/cluster-api-provider-scaleway/api/v1beta1"
78
"github.com/scaleway/scaleway-sdk-go/scw"
9+
"golang.org/x/exp/slices"
810
corev1 "k8s.io/api/core/v1"
11+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
912
"k8s.io/apimachinery/pkg/types"
1013
"sigs.k8s.io/controller-runtime/pkg/client"
14+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
1115
)
1216

1317
func clientFromSecret(ctx context.Context, client client.Client, scalewayCluster *infrastructurev1beta1.ScalewayCluster) (*scw.Client, error) {
1418
// TODO: read secret: API URL, Access key, secret Key, ProjectID, default zone
15-
// TODO: take ownership of secret?
1619

1720
secret := &corev1.Secret{}
1821
if err := client.Get(ctx, types.NamespacedName{
@@ -21,6 +24,22 @@ func clientFromSecret(ctx context.Context, client client.Client, scalewayCluster
2124
}, secret); err != nil {
2225
return nil, err
2326
}
27+
28+
// Take ownership of secret.
29+
if !metav1.IsControlledBy(secret, scalewayCluster) {
30+
if !slices.ContainsFunc(secret.GetOwnerReferences(), func(o metav1.OwnerReference) bool {
31+
return o.UID == scalewayCluster.UID
32+
}) {
33+
if err := controllerutil.SetOwnerReference(scalewayCluster, secret, client.Scheme()); err != nil {
34+
return nil, fmt.Errorf("failed to set owner reference for secret %s: %w", secret.Name, err)
35+
}
36+
37+
if err := client.Update(ctx, secret); err != nil {
38+
return nil, fmt.Errorf("failed to update secret %s: %w", secret.Name, err)
39+
}
40+
}
41+
}
42+
2443
opts := []scw.ClientOption{
2544
scw.WithAuth(string(secret.Data["accessKey"]), string(secret.Data["secretKey"])),
2645
scw.WithDefaultProjectID(string(secret.Data["projectID"])),

0 commit comments

Comments
 (0)