Skip to content

Commit 9c6afd6

Browse files
authored
feat(k8s): skip reading kubeconfig if unauthorized (#2018)
1 parent 7d239c6 commit 9c6afd6

File tree

2 files changed

+46
-27
lines changed

2 files changed

+46
-27
lines changed

scaleway/helpers_k8s.go

+33
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,39 @@ func flattenKubeletArgs(args map[string]string) map[string]interface{} {
257257
return kubeletArgs
258258
}
259259

260+
func flattenKubeconfig(ctx context.Context, k8sAPI *k8s.API, region scw.Region, clusterID string) (map[string]interface{}, error) {
261+
kubeconfig, err := k8sAPI.GetClusterKubeConfig(&k8s.GetClusterKubeConfigRequest{
262+
Region: region,
263+
ClusterID: clusterID,
264+
}, scw.WithContext(ctx))
265+
if err != nil {
266+
return nil, err
267+
}
268+
269+
kubeconfigServer, err := kubeconfig.GetServer()
270+
if err != nil {
271+
return nil, err
272+
}
273+
274+
kubeconfigCa, err := kubeconfig.GetCertificateAuthorityData()
275+
if err != nil {
276+
return nil, err
277+
}
278+
279+
kubeconfigToken, err := kubeconfig.GetToken()
280+
if err != nil {
281+
return nil, err
282+
}
283+
284+
kubeconf := map[string]interface{}{}
285+
kubeconf["config_file"] = string(kubeconfig.GetRaw())
286+
kubeconf["host"] = kubeconfigServer
287+
kubeconf["cluster_ca_certificate"] = kubeconfigCa
288+
kubeconf["token"] = kubeconfigToken
289+
290+
return kubeconf, nil
291+
}
292+
260293
func migrateToPrivateNetworkCluster(ctx context.Context, d *schema.ResourceData, i interface{}) error {
261294
k8sAPI, region, clusterID, err := k8sAPIWithRegionAndID(i, d.Id())
262295
if err != nil {

scaleway/resource_k8s_cluster.go

+13-27
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"strings"
77
"time"
88

9+
"github.com/hashicorp/go-cty/cty"
910
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1011
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff"
1112
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -526,36 +527,21 @@ func resourceScalewayK8SClusterRead(ctx context.Context, d *schema.ResourceData,
526527
////
527528
// Read kubeconfig
528529
////
529-
kubeconfig, err := k8sAPI.GetClusterKubeConfig(&k8s.GetClusterKubeConfigRequest{
530-
Region: region,
531-
ClusterID: clusterID,
532-
}, scw.WithContext(ctx))
533-
if err != nil {
534-
return diag.FromErr(err)
535-
}
536-
537-
kubeconfigServer, err := kubeconfig.GetServer()
538-
if err != nil {
539-
return diag.FromErr(err)
540-
}
541-
542-
kubeconfigCa, err := kubeconfig.GetCertificateAuthorityData()
543-
if err != nil {
544-
return diag.FromErr(err)
545-
}
546-
547-
kubeconfigToken, err := kubeconfig.GetToken()
530+
kubeconfig, err := flattenKubeconfig(ctx, k8sAPI, region, clusterID)
548531
if err != nil {
532+
if is403Error(err) {
533+
return diag.Diagnostics{
534+
diag.Diagnostic{
535+
Severity: diag.Warning,
536+
Summary: "Cannot read kubeconfig: unauthorized",
537+
Detail: "Got 403 while reading kubeconfig, please check your permissions",
538+
AttributePath: cty.GetAttrPath("kubeconfig"),
539+
},
540+
}
541+
}
549542
return diag.FromErr(err)
550543
}
551-
552-
kubeconf := map[string]interface{}{}
553-
kubeconf["config_file"] = string(kubeconfig.GetRaw())
554-
kubeconf["host"] = kubeconfigServer
555-
kubeconf["cluster_ca_certificate"] = kubeconfigCa
556-
kubeconf["token"] = kubeconfigToken
557-
558-
_ = d.Set("kubeconfig", []map[string]interface{}{kubeconf})
544+
_ = d.Set("kubeconfig", []map[string]interface{}{kubeconfig})
559545

560546
return nil
561547
}

0 commit comments

Comments
 (0)