@@ -2,17 +2,20 @@ package controller
2
2
3
3
import (
4
4
"context"
5
+ "fmt"
5
6
6
7
infrastructurev1beta1 "github.com/Tomy2e/cluster-api-provider-scaleway/api/v1beta1"
7
8
"github.com/scaleway/scaleway-sdk-go/scw"
9
+ "golang.org/x/exp/slices"
8
10
corev1 "k8s.io/api/core/v1"
11
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9
12
"k8s.io/apimachinery/pkg/types"
10
13
"sigs.k8s.io/controller-runtime/pkg/client"
14
+ "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
11
15
)
12
16
13
17
func clientFromSecret (ctx context.Context , client client.Client , scalewayCluster * infrastructurev1beta1.ScalewayCluster ) (* scw.Client , error ) {
14
18
// TODO: read secret: API URL, Access key, secret Key, ProjectID, default zone
15
- // TODO: take ownership of secret?
16
19
17
20
secret := & corev1.Secret {}
18
21
if err := client .Get (ctx , types.NamespacedName {
@@ -21,6 +24,22 @@ func clientFromSecret(ctx context.Context, client client.Client, scalewayCluster
21
24
}, secret ); err != nil {
22
25
return nil , err
23
26
}
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
+
24
43
opts := []scw.ClientOption {
25
44
scw .WithAuth (string (secret .Data ["accessKey" ]), string (secret .Data ["secretKey" ])),
26
45
scw .WithDefaultProjectID (string (secret .Data ["projectID" ])),
0 commit comments