@@ -41,34 +41,35 @@ const (
4141 GkeScope = "https://www.googleapis.com/auth/cloud-platform"
4242)
4343
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 ) {
4545 log .Info ("Reconciling kubeconfig" )
4646 clusterRef := types.NamespacedName {
4747 Name : s .scope .Cluster .Name ,
4848 Namespace : s .scope .Cluster .Namespace ,
4949 }
50+ var kubeConfig * api.Config
5051
5152 configSecret , err := secret .GetFromNamespacedName (ctx , s .scope .Client (), clusterRef , secret .Kubeconfig )
5253 if err != nil {
5354 if ! apierrors .IsNotFound (err ) {
5455 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 )
5657 }
5758 log .Info ("kubeconfig secret not found, creating" )
5859
59- if createErr : = s .createCAPIKubeconfigSecret (
60+ if kubeConfig , err = s .createCAPIKubeconfigSecret (
6061 ctx ,
6162 cluster ,
6263 & clusterRef ,
6364 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 )
6667 }
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 )
6970 }
7071
71- return nil
72+ return clientcmd . NewDefaultClientConfig ( * kubeConfig , nil ), nil
7273}
7374
7475func (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
133134 return nil
134135}
135136
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 ) {
137138 controllerOwnerRef := * metav1 .NewControllerRef (s .scope .GCPManagedControlPlane , infrav1exp .GroupVersion .WithKind ("GCPManagedControlPlane" ))
138139
139140 contextName := s .getKubeConfigContextName (false )
140141
141142 cfg , err := s .createBaseKubeConfig (contextName , cluster )
142143 if err != nil {
143144 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 )
145146 }
146147
147148 token , err := s .generateToken (ctx )
148149 if err != nil {
149150 log .Error (err , "failed generating token" )
150- return err
151+ return nil , err
151152 }
152153 cfg .AuthInfos = map [string ]* api.AuthInfo {
153154 contextName : {
@@ -158,50 +159,50 @@ func (s *Service) createCAPIKubeconfigSecret(ctx context.Context, cluster *conta
158159 out , err := clientcmd .Write (* cfg )
159160 if err != nil {
160161 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 )
162163 }
163164
164165 kubeconfigSecret := kubeconfig .GenerateSecretWithOwner (* clusterRef , out , controllerOwnerRef )
165166 if err := s .scope .Client ().Create (ctx , kubeconfigSecret ); err != nil {
166167 log .Error (err , "failed creating secret" )
167- return fmt .Errorf ("creating secret: %w" , err )
168+ return nil , fmt .Errorf ("creating secret: %w" , err )
168169 }
169170
170- return nil
171+ return cfg , nil
171172}
172173
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 ) {
174175 data , ok := configSecret .Data [secret .KubeconfigDataName ]
175176 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 )
177178 }
178179
179180 config , err := clientcmd .Load (data )
180181 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" )
182183 }
183184
184185 token , err := s .generateToken (ctx )
185186 if err != nil {
186- return err
187+ return nil , err
187188 }
188189
189190 contextName := s .getKubeConfigContextName (false )
190191 config .AuthInfos [contextName ].Token = token
191192
192193 out , err := clientcmd .Write (* config )
193194 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" )
195196 }
196197
197198 configSecret .Data [secret .KubeconfigDataName ] = out
198199
199200 err = s .scope .Client ().Update (ctx , configSecret )
200201 if err != nil {
201- return fmt .Errorf ("updating kubeconfig secret: %w" , err )
202+ return nil , fmt .Errorf ("updating kubeconfig secret: %w" , err )
202203 }
203204
204- return nil
205+ return config , nil
205206}
206207
207208func (s * Service ) getKubeConfigContextName (isUser bool ) string {
0 commit comments