@@ -41,34 +41,35 @@ const (
41
41
GkeScope = "https://www.googleapis.com/auth/cloud-platform"
42
42
)
43
43
44
- func (s * Service ) reconcileKubeconfig (ctx context.Context , cluster * containerpb.Cluster , log * logr.Logger ) error {
44
+ func (s * Service ) reconcileKubeconfig (ctx context.Context , cluster * containerpb.Cluster , log * logr.Logger ) (clientcmd. ClientConfig , error ) {
45
45
log .Info ("Reconciling kubeconfig" )
46
46
clusterRef := types.NamespacedName {
47
47
Name : s .scope .Cluster .Name ,
48
48
Namespace : s .scope .Cluster .Namespace ,
49
49
}
50
+ var kubeConfig * api.Config
50
51
51
52
configSecret , err := secret .GetFromNamespacedName (ctx , s .scope .Client (), clusterRef , secret .Kubeconfig )
52
53
if err != nil {
53
54
if ! apierrors .IsNotFound (err ) {
54
55
log .Error (err , "getting kubeconfig secret" , "name" , clusterRef )
55
- return fmt .Errorf ("getting kubeconfig secret %s: %w" , clusterRef , err )
56
+ return nil , fmt .Errorf ("getting kubeconfig secret %s: %w" , clusterRef , err )
56
57
}
57
58
log .Info ("kubeconfig secret not found, creating" )
58
59
59
- if createErr : = s .createCAPIKubeconfigSecret (
60
+ if kubeConfig , err = s .createCAPIKubeconfigSecret (
60
61
ctx ,
61
62
cluster ,
62
63
& clusterRef ,
63
64
log ,
64
- ); createErr != nil {
65
- return fmt .Errorf ("creating kubeconfig secret: %w" , createErr )
65
+ ); err != nil {
66
+ return nil , fmt .Errorf ("creating kubeconfig secret: %w" , err )
66
67
}
67
- } else if updateErr : = s .updateCAPIKubeconfigSecret (ctx , configSecret ); updateErr != nil {
68
- return fmt .Errorf ("updating kubeconfig secret: %w" , err )
68
+ } else if kubeConfig , err = s .updateCAPIKubeconfigSecret (ctx , configSecret ); err != nil {
69
+ return nil , fmt .Errorf ("updating kubeconfig secret: %w" , err )
69
70
}
70
71
71
- return nil
72
+ return clientcmd . NewDefaultClientConfig ( * kubeConfig , nil ), nil
72
73
}
73
74
74
75
func (s * Service ) reconcileAdditionalKubeconfigs (ctx context.Context , cluster * containerpb.Cluster , log * logr.Logger ) error {
@@ -133,21 +134,21 @@ func (s *Service) createUserKubeconfigSecret(ctx context.Context, cluster *conta
133
134
return nil
134
135
}
135
136
136
- func (s * Service ) createCAPIKubeconfigSecret (ctx context.Context , cluster * containerpb.Cluster , clusterRef * types.NamespacedName , log * logr.Logger ) error {
137
+ func (s * Service ) createCAPIKubeconfigSecret (ctx context.Context , cluster * containerpb.Cluster , clusterRef * types.NamespacedName , log * logr.Logger ) ( * api. Config , error ) {
137
138
controllerOwnerRef := * metav1 .NewControllerRef (s .scope .GCPManagedControlPlane , infrav1exp .GroupVersion .WithKind ("GCPManagedControlPlane" ))
138
139
139
140
contextName := s .getKubeConfigContextName (false )
140
141
141
142
cfg , err := s .createBaseKubeConfig (contextName , cluster )
142
143
if err != nil {
143
144
log .Error (err , "failed creating base config" )
144
- return fmt .Errorf ("creating base kubeconfig: %w" , err )
145
+ return nil , fmt .Errorf ("creating base kubeconfig: %w" , err )
145
146
}
146
147
147
148
token , err := s .generateToken (ctx )
148
149
if err != nil {
149
150
log .Error (err , "failed generating token" )
150
- return err
151
+ return nil , err
151
152
}
152
153
cfg .AuthInfos = map [string ]* api.AuthInfo {
153
154
contextName : {
@@ -158,50 +159,50 @@ func (s *Service) createCAPIKubeconfigSecret(ctx context.Context, cluster *conta
158
159
out , err := clientcmd .Write (* cfg )
159
160
if err != nil {
160
161
log .Error (err , "failed serializing kubeconfig to yaml" )
161
- return fmt .Errorf ("serialize kubeconfig to yaml: %w" , err )
162
+ return nil , fmt .Errorf ("serialize kubeconfig to yaml: %w" , err )
162
163
}
163
164
164
165
kubeconfigSecret := kubeconfig .GenerateSecretWithOwner (* clusterRef , out , controllerOwnerRef )
165
166
if err := s .scope .Client ().Create (ctx , kubeconfigSecret ); err != nil {
166
167
log .Error (err , "failed creating secret" )
167
- return fmt .Errorf ("creating secret: %w" , err )
168
+ return nil , fmt .Errorf ("creating secret: %w" , err )
168
169
}
169
170
170
- return nil
171
+ return cfg , nil
171
172
}
172
173
173
- func (s * Service ) updateCAPIKubeconfigSecret (ctx context.Context , configSecret * corev1.Secret ) error {
174
+ func (s * Service ) updateCAPIKubeconfigSecret (ctx context.Context , configSecret * corev1.Secret ) ( * api. Config , error ) {
174
175
data , ok := configSecret .Data [secret .KubeconfigDataName ]
175
176
if ! ok {
176
- return errors .Errorf ("missing key %q in secret data" , secret .KubeconfigDataName )
177
+ return nil , errors .Errorf ("missing key %q in secret data" , secret .KubeconfigDataName )
177
178
}
178
179
179
180
config , err := clientcmd .Load (data )
180
181
if err != nil {
181
- return errors .Wrap (err , "failed to convert kubeconfig Secret into a clientcmdapi.Config" )
182
+ return nil , errors .Wrap (err , "failed to convert kubeconfig Secret into a clientcmdapi.Config" )
182
183
}
183
184
184
185
token , err := s .generateToken (ctx )
185
186
if err != nil {
186
- return err
187
+ return nil , err
187
188
}
188
189
189
190
contextName := s .getKubeConfigContextName (false )
190
191
config .AuthInfos [contextName ].Token = token
191
192
192
193
out , err := clientcmd .Write (* config )
193
194
if err != nil {
194
- return errors .Wrap (err , "failed to serialize config to yaml" )
195
+ return nil , errors .Wrap (err , "failed to serialize config to yaml" )
195
196
}
196
197
197
198
configSecret .Data [secret .KubeconfigDataName ] = out
198
199
199
200
err = s .scope .Client ().Update (ctx , configSecret )
200
201
if err != nil {
201
- return fmt .Errorf ("updating kubeconfig secret: %w" , err )
202
+ return nil , fmt .Errorf ("updating kubeconfig secret: %w" , err )
202
203
}
203
204
204
- return nil
205
+ return config , nil
205
206
}
206
207
207
208
func (s * Service ) getKubeConfigContextName (isUser bool ) string {
0 commit comments