From 3521f31c3f7600829062f9e37539ff7dd5469613 Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Tue, 26 Mar 2024 20:30:36 +0800 Subject: [PATCH 01/15] feat(tke): generate auth attach --- .../resource_tc_kubernetes_auth_attachment.go | 350 +++++++++++------- ...tc_kubernetes_auth_attachment_extension.go | 78 ++++ .../services/tke/service_tencentcloud_tke.go | 52 +++ 3 files changed, 347 insertions(+), 133 deletions(-) create mode 100644 tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go index 18953f0af8..03daba1be2 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go @@ -1,278 +1,362 @@ +// Code generated by iacg; DO NOT EDIT. package tke import ( "context" - - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - + "fmt" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" - + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "log" ) -func ResourceTencentCloudTKEAuthAttachment() *schema.Resource { +func ResourceTencentCloudKubernetesAuthAttachment() *schema.Resource { return &schema.Resource{ + Create: resourceTencentCloudKubernetesAuthAttachmentCreate, + Read: resourceTencentCloudKubernetesAuthAttachmentRead, + Update: resourceTencentCloudKubernetesAuthAttachmentUpdate, + Delete: resourceTencentCloudKubernetesAuthAttachmentDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, Schema: map[string]*schema.Schema{ "cluster_id": { Type: schema.TypeString, Required: true, Description: "ID of clusters.", }, + "use_tke_default": { Type: schema.TypeBool, Optional: true, ConflictsWith: []string{"issuer", "jwks_uri"}, Description: "If set to `true`, the issuer and jwks_uri will be generated automatically by tke, please do not set issuer and jwks_uri.", }, + "issuer": { Type: schema.TypeString, Optional: true, ConflictsWith: []string{"use_tke_default"}, Description: "Specify service-account-issuer. If use_tke_default is set to `true`, please do not set this field.", }, + "jwks_uri": { Type: schema.TypeString, Optional: true, ConflictsWith: []string{"use_tke_default"}, Description: "Specify service-account-jwks-uri. If use_tke_default is set to `true`, please do not set this field.", }, + "auto_create_discovery_anonymous_auth": { Type: schema.TypeBool, Optional: true, Default: false, Description: "If set to `true`, the rbac rule will be created automatically which allow anonymous user to access '/.well-known/openid-configuration' and '/openid/v1/jwks'.", }, + "auto_create_oidc_config": { Type: schema.TypeBool, Optional: true, Computed: true, Description: "Creating an identity provider.", }, + "auto_create_client_id": { - Type: schema.TypeSet, - Optional: true, - Computed: true, + Type: schema.TypeSet, + Optional: true, + Computed: true, + Description: "Creating ClientId of the identity provider.", Elem: &schema.Schema{ Type: schema.TypeString, }, - Description: "Creating ClientId of the identity provider.", }, + "auto_install_pod_identity_webhook_addon": { Type: schema.TypeBool, Optional: true, Computed: true, Description: "Creating the PodIdentityWebhook component. if `auto_create_oidc_config` is true, this field must set true.", }, + "tke_default_issuer": { Type: schema.TypeString, Computed: true, Description: "The default issuer of tke. If use_tke_default is set to `true`, this parameter will be set to the default value.", }, + "tke_default_jwks_uri": { Type: schema.TypeString, Computed: true, Description: "The default jwks_uri of tke. If use_tke_default is set to `true`, this parameter will be set to the default value.", }, }, - Create: resourceTencentCloudTKEAuthAttachmentCreate, - Update: resourceTencentCloudTKEAuthAttachmentUpdate, - Read: resourceTencentCloudTKEAuthAttachmentRead, - Delete: resourceTencentCloudTKEAuthAttachmentDelete, } } -func resourceTencentCloudTKEAuthAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("resource.resource_tc_kubernetes_auth_attachment.create")() +func resourceTencentCloudKubernetesAuthAttachmentCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_auth_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - id := d.Get("cluster_id").(string) - service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - request := tke.NewModifyClusterAuthenticationOptionsRequest() - request.ClusterId = &id - request.ServiceAccounts = &tke.ServiceAccountAuthenticationOptions{} + var ( + clusterId string + ) + var ( + request = tke.NewModifyClusterAuthenticationOptionsRequest() + response = tke.NewModifyClusterAuthenticationOptionsResponse() + ) - if v, ok := d.GetOk("auto_create_discovery_anonymous_auth"); ok { - request.ServiceAccounts.AutoCreateDiscoveryAnonymousAuth = helper.Bool(v.(bool)) + if v, ok := d.GetOk("cluster_id"); ok { + clusterId = v.(string) } - if v, ok := d.GetOk("use_tke_default"); ok && v.(bool) { - request.ServiceAccounts.UseTKEDefault = helper.Bool(true) - } else { - if v, ok := d.GetOk("issuer"); ok { - request.ServiceAccounts.Issuer = helper.String(v.(string)) - } - if v, ok := d.GetOk("jwks_uri"); ok { - request.ServiceAccounts.JWKSURI = helper.String(v.(string)) - } + if v, ok := d.GetOk("cluster_id"); ok { + request.ClusterId = helper.String(v.(string)) } - request.OIDCConfig = &tke.OIDCConfigAuthenticationOptions{} + + serviceAccountAuthenticationOptions := tke.ServiceAccountAuthenticationOptions{} + if v, ok := d.GetOkExists("use_tke_default"); ok { + serviceAccountAuthenticationOptions.UseTKEDefault = helper.Bool(v.(bool)) + } + if v, ok := d.GetOk("issuer"); ok { + serviceAccountAuthenticationOptions.Issuer = helper.String(v.(string)) + } + if v, ok := d.GetOk("jwksuri"); ok { + serviceAccountAuthenticationOptions.JWKSURI = helper.String(v.(string)) + } + if v, ok := d.GetOkExists("auto_create_discovery_anonymous_auth"); ok { + serviceAccountAuthenticationOptions.AutoCreateDiscoveryAnonymousAuth = helper.Bool(v.(bool)) + } + request.ServiceAccounts = &serviceAccountAuthenticationOptions + + oIDCConfigAuthenticationOptions := tke.OIDCConfigAuthenticationOptions{} if v, ok := d.GetOkExists("auto_create_oidc_config"); ok { - request.OIDCConfig.AutoCreateOIDCConfig = helper.Bool(v.(bool)) + oIDCConfigAuthenticationOptions.AutoCreateOIDCConfig = helper.Bool(v.(bool)) } - if v, ok := d.GetOkExists("auto_create_client_id"); ok { - clientsSet := v.(*schema.Set).List() - for i := range clientsSet { - client := clientsSet[i].(string) - request.OIDCConfig.AutoCreateClientId = append(request.OIDCConfig.AutoCreateClientId, &client) + if v, ok := d.GetOk("auto_create_client_id"); ok { + autoCreateClientIdSet := v.(*schema.Set).List() + for i := range autoCreateClientIdSet { + autoCreateClientId := autoCreateClientIdSet[i].(string) + oIDCConfigAuthenticationOptions.AutoCreateClientId = append(oIDCConfigAuthenticationOptions.AutoCreateClientId, helper.String(autoCreateClientId)) } } if v, ok := d.GetOkExists("auto_install_pod_identity_webhook_addon"); ok { - request.OIDCConfig.AutoInstallPodIdentityWebhookAddon = helper.Bool(v.(bool)) + oIDCConfigAuthenticationOptions.AutoInstallPodIdentityWebhookAddon = helper.Bool(v.(bool)) + } + request.OIDCConfig = &oIDCConfigAuthenticationOptions + + if err := resourceTencentCloudKubernetesAuthAttachmentCreatePreRequest0(d, meta, request); err != nil { + return err } err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - err := service.ModifyClusterAuthenticationOptions(ctx, request) - if err != nil { - return tccommon.RetryError(err, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().ModifyClusterAuthenticationOptions(request) + if e != nil { + if err := resourceTencentCloudKubernetesAuthAttachmentCreateRequestOnError0(d, meta, request, e); err != nil { + return err + } + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) } + response = result return nil }) - if err != nil { + log.Printf("[CRITAL]%s create kubernetes auth attachment failed, reason:%+v", logId, err) return err } - d.SetId(id) - return resourceTencentCloudTKEAuthAttachmentRead(d, meta) + _ = response + d.SetId(clusterId) + + return resourceTencentCloudKubernetesAuthAttachmentRead(d, meta) } -func resourceTencentCloudTKEAuthAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("resource.resource_tc_kubernetes_auth_attachment.read")() + +func resourceTencentCloudKubernetesAuthAttachmentRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_auth_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - id := d.Id() + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - info, oidc, err := service.WaitForAuthenticationOptionsUpdateSuccess(ctx, id) + clusterId := d.Id() + + _ = d.Set("cluster_id", clusterId) + + respData, err := service.DescribeKubernetesAuthAttachmentById(ctx) if err != nil { - d.SetId("") return err } - d.SetId(id) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := service.DescribeKubernetesAuthAttachmentById(ctx) + if e != nil { + return tccommon.RetryError(e) + } + if err := resourceTencentCloudKubernetesAuthAttachmentReadRequestOnSuccess0(d, meta, result); err != nil { + return err + } + respData = result + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s read kubernetes auth attachment failed, reason:%+v", logId, err) + return err + } - if v, ok := d.GetOk("use_tke_default"); ok && v.(bool) { - _ = d.Set("tke_default_issuer", info.Issuer) - _ = d.Set("tke_default_jwks_uri", info.JWKSURI) - } else { - _ = d.Set("jwks_uri", info.JWKSURI) - _ = d.Set("issuer", info.Issuer) + if respData == nil { + d.SetId("") + log.Printf("[WARN]%s resource `kubernetes_auth_attachment` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil } + if respData.ServiceAccounts != nil { + if respData.ServiceAccounts.UseTKEDefault != nil { + _ = d.Set("use_tke_default", respData.ServiceAccounts.UseTKEDefault) + } + + if respData.ServiceAccounts.Issuer != nil { + _ = d.Set("issuer", respData.ServiceAccounts.Issuer) + } + + if respData.ServiceAccounts.JWKSURI != nil { + _ = d.Set("jwksuri", respData.ServiceAccounts.JWKSURI) + } + + if respData.ServiceAccounts.AutoCreateDiscoveryAnonymousAuth != nil { + _ = d.Set("auto_create_discovery_anonymous_auth", respData.ServiceAccounts.AutoCreateDiscoveryAnonymousAuth) + } - if oidc.AutoCreateOIDCConfig != nil { - _ = d.Set("auto_create_oidc_config", oidc.AutoCreateOIDCConfig) } - if oidc.AutoCreateClientId != nil { - _ = d.Set("auto_create_client_id", oidc.AutoCreateClientId) + if respData.OIDCConfig != nil { + if respData.OIDCConfig.AutoCreateOIDCConfig != nil { + _ = d.Set("auto_create_oidc_config", respData.OIDCConfig.AutoCreateOIDCConfig) + } + + if respData.OIDCConfig.AutoCreateClientId != nil { + _ = d.Set("auto_create_client_id", respData.OIDCConfig.AutoCreateClientId) + } + + if respData.OIDCConfig.AutoInstallPodIdentityWebhookAddon != nil { + _ = d.Set("auto_install_pod_identity_webhook_addon", respData.OIDCConfig.AutoInstallPodIdentityWebhookAddon) + } + } - if oidc.AutoInstallPodIdentityWebhookAddon != nil { - _ = d.Set("auto_install_pod_identity_webhook_addon", oidc.AutoInstallPodIdentityWebhookAddon) + if err := resourceTencentCloudKubernetesAuthAttachmentReadPostRequest0(ctx, d, meta, respData); err != nil { + return err } + + _ = clusterId return nil } -func resourceTencentCloudTKEAuthAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("resource.resource_tc_kubernetes_auth_attachment.update")() - logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) +func resourceTencentCloudKubernetesAuthAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_auth_attachment.update")() + defer tccommon.InconsistentCheck(d, meta)() - id := d.Id() + logId := tccommon.GetLogId(tccommon.ContextNil) - service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - request := tke.NewModifyClusterAuthenticationOptionsRequest() - request.ClusterId = &id - request.ServiceAccounts = &tke.ServiceAccountAuthenticationOptions{} - - useTkeDefault := false - if v, ok := d.GetOk("use_tke_default"); ok { - request.ServiceAccounts.UseTKEDefault = helper.Bool(v.(bool)) - useTkeDefault = v.(bool) - } + ctx := context.WithValue(context.Background(), tccommon.LogIdKey, logId) - if !useTkeDefault { - if d.HasChange("jwks_uri") { - request.ServiceAccounts.JWKSURI = helper.String(d.Get("jwks_uri").(string)) + immutableArgs := []string{"cluster_id"} + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) } - if d.HasChange("issuer") { - issuer := d.Get("issuer").(string) - request.ServiceAccounts.Issuer = helper.String(issuer) + } + clusterId := d.Id() + + needChange := false + mutableArgs := []string{"use_tke_default", "issuer", "jwksuri", "auto_create_discovery_anonymous_auth", "auto_create_oidc_config", "auto_create_client_id", "auto_install_pod_identity_webhook_addon"} + for _, v := range mutableArgs { + if d.HasChange(v) { + needChange = true + break } } - if d.HasChange("auto_create_discovery_anonymous_auth") { - if v, ok := d.GetOk("auto_create_discovery_anonymous_auth"); ok { - request.ServiceAccounts.AutoCreateDiscoveryAnonymousAuth = helper.Bool(v.(bool)) + if needChange { + request := tke.NewModifyClusterAuthenticationOptionsRequest() + + request.ClusterId = &clusterId + + serviceAccountAuthenticationOptions := tke.ServiceAccountAuthenticationOptions{} + if v, ok := d.GetOkExists("use_tke_default"); ok { + serviceAccountAuthenticationOptions.UseTKEDefault = helper.Bool(v.(bool)) } - } + if v, ok := d.GetOk("issuer"); ok { + serviceAccountAuthenticationOptions.Issuer = helper.String(v.(string)) + } + if v, ok := d.GetOk("jwksuri"); ok { + serviceAccountAuthenticationOptions.JWKSURI = helper.String(v.(string)) + } + if v, ok := d.GetOkExists("auto_create_discovery_anonymous_auth"); ok { + serviceAccountAuthenticationOptions.AutoCreateDiscoveryAnonymousAuth = helper.Bool(v.(bool)) + } + request.ServiceAccounts = &serviceAccountAuthenticationOptions - request.OIDCConfig = &tke.OIDCConfigAuthenticationOptions{} - if d.HasChange("auto_create_oidc_config") { + oIDCConfigAuthenticationOptions := tke.OIDCConfigAuthenticationOptions{} if v, ok := d.GetOkExists("auto_create_oidc_config"); ok { - request.OIDCConfig.AutoCreateOIDCConfig = helper.Bool(v.(bool)) + oIDCConfigAuthenticationOptions.AutoCreateOIDCConfig = helper.Bool(v.(bool)) } - } - - if d.HasChange("auto_create_client_id") { - if v, ok := d.GetOkExists("auto_create_client_id"); ok { - clientsSet := v.(*schema.Set).List() - for i := range clientsSet { - client := clientsSet[i].(string) - request.OIDCConfig.AutoCreateClientId = append(request.OIDCConfig.AutoCreateClientId, &client) + if v, ok := d.GetOk("auto_create_client_id"); ok { + autoCreateClientIdSet := v.(*schema.Set).List() + for i := range autoCreateClientIdSet { + autoCreateClientId := autoCreateClientIdSet[i].(string) + oIDCConfigAuthenticationOptions.AutoCreateClientId = append(oIDCConfigAuthenticationOptions.AutoCreateClientId, helper.String(autoCreateClientId)) } } - } - - if d.HasChange("auto_install_pod_identity_webhook_addon") { if v, ok := d.GetOkExists("auto_install_pod_identity_webhook_addon"); ok { - request.OIDCConfig.AutoInstallPodIdentityWebhookAddon = helper.Bool(v.(bool)) + oIDCConfigAuthenticationOptions.AutoInstallPodIdentityWebhookAddon = helper.Bool(v.(bool)) } - } + request.OIDCConfig = &oIDCConfigAuthenticationOptions - err := resource.Retry(3*tccommon.WriteRetryTimeout, func() *resource.RetryError { - err := service.ModifyClusterAuthenticationOptions(ctx, request) - if err != nil { - return tccommon.RetryError(err, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) + if err := resourceTencentCloudKubernetesAuthAttachmentUpdatePreRequest0(ctx, d, meta, request); err != nil { + return err } - return nil - }) - if err != nil { - return err + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().ModifyClusterAuthenticationOptions(request) + if e != nil { + if err := resourceTencentCloudKubernetesAuthAttachmentUpdateRequestOnError0(d, meta, request, e); err != nil { + return err + } + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s update kubernetes auth attachment failed, reason:%+v", logId, err) + return err + } } - return resourceTencentCloudTKEAuthAttachmentRead(d, meta) + return resourceTencentCloudKubernetesAuthAttachmentRead(d, meta) } -func resourceTencentCloudTKEAuthAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("resource.resource_tc_kubernetes_auth_attachment.delete")() +func resourceTencentCloudKubernetesAuthAttachmentDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_auth_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - id := d.Id() - service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - request := tke.NewModifyClusterAuthenticationOptionsRequest() - request.ClusterId = &id - request.ServiceAccounts = &tke.ServiceAccountAuthenticationOptions{ - JWKSURI: helper.String(""), - Issuer: helper.String(DefaultAuthenticationOptionsIssuer), - } - - if err := service.ModifyClusterAuthenticationOptions(ctx, request); err != nil { - return err - } - _, _, err := service.WaitForAuthenticationOptionsUpdateSuccess(ctx, id) + clusterId := d.Id() - if err != nil { - return err + if e := service.DeleteKubernetesAuthAttachmentById(ctx, clusterId); e != nil { + return e } return nil diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go new file mode 100644 index 0000000000..b564830cf9 --- /dev/null +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go @@ -0,0 +1,78 @@ +package tke + +import ( + "context" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func resourceTencentCloudKubernetesAuthAttachmentCreateRequestOnError0(d *schema.ResourceData, meta interface{}, req *tke.ModifyClusterAuthenticationOptionsRequest, e error) *resource.RetryError { + return tccommon.RetryError(e, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) +} + +func resourceTencentCloudKubernetesAuthAttachmentCreatePreRequest0(d *schema.ResourceData, meta interface{}, req *tke.ModifyClusterAuthenticationOptionsRequest) error { + tmpReqServiceAccount := tke.ServiceAccountAuthenticationOptions{} + if v, ok := d.GetOk("use_tke_default"); ok && v.(bool) { + req.ServiceAccounts.Issuer = tmpReqServiceAccount.Issuer + req.ServiceAccounts.JWKSURI = tmpReqServiceAccount.JWKSURI + } + + return nil +} +func resourceTencentCloudKubernetesAuthAttachmentReadRequestOnSuccess0(d *schema.ResourceData, meta interface{}, resp *tke.DescribeClusterAuthenticationOptionsResponseParams) *resource.RetryError { + tmpRespServiceAccount := tke.ServiceAccountAuthenticationOptions{} + + if resp != nil && resp.ServiceAccounts != nil { + if v, ok := d.GetOk("use_tke_default"); ok && v.(bool) { + resp.ServiceAccounts.Issuer = tmpRespServiceAccount.Issuer + resp.ServiceAccounts.JWKSURI = tmpRespServiceAccount.JWKSURI + } + resp.ServiceAccounts.UseTKEDefault = tmpRespServiceAccount.UseTKEDefault + resp.ServiceAccounts.AutoCreateDiscoveryAnonymousAuth = tmpRespServiceAccount.AutoCreateDiscoveryAnonymousAuth + } + + return nil +} +func resourceTencentCloudKubernetesAuthAttachmentReadPostRequest0(ctx context.Context, d *schema.ResourceData, meta interface{}, resp *tke.DescribeClusterAuthenticationOptionsResponseParams) error { + if resp != nil && resp.ServiceAccounts != nil { + if v, ok := d.GetOk("use_tke_default"); ok && v.(bool) { + if resp.ServiceAccounts.Issuer != nil { + _ = d.Set("tke_default_issuer", resp.ServiceAccounts.Issuer) + } + if resp.ServiceAccounts.JWKSURI != nil { + _ = d.Set("tke_default_jwks_uri", resp.ServiceAccounts.JWKSURI) + } + } + } + return nil +} +func resourceTencentCloudKubernetesAuthAttachmentUpdatePreRequest0(ctx context.Context, d *schema.ResourceData, meta interface{}, req *tke.ModifyClusterAuthenticationOptionsRequest) error { + useTkeDefault := false + tmpReqServiceAccount := tke.ServiceAccountAuthenticationOptions{} + req.ServiceAccounts.JWKSURI = tmpReqServiceAccount.JWKSURI + req.ServiceAccounts.Issuer = tmpReqServiceAccount.Issuer + req.ServiceAccounts.UseTKEDefault = tmpReqServiceAccount.UseTKEDefault + + if v, ok := d.GetOk("use_tke_default"); ok { + req.ServiceAccounts.UseTKEDefault = helper.Bool(v.(bool)) + useTkeDefault = v.(bool) + } + + if !useTkeDefault { + if d.HasChange("jwks_uri") { + req.ServiceAccounts.JWKSURI = helper.String(d.Get("jwks_uri").(string)) + } + if d.HasChange("issuer") { + issuer := d.Get("issuer").(string) + req.ServiceAccounts.Issuer = helper.String(issuer) + } + } + return nil +} + +func resourceTencentCloudKubernetesAuthAttachmentUpdateRequestOnError0(d *schema.ResourceData, meta interface{}, req *tke.ModifyClusterAuthenticationOptionsRequest, e error) *resource.RetryError { + return tccommon.RetryError(e, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) +} diff --git a/tencentcloud/services/tke/service_tencentcloud_tke.go b/tencentcloud/services/tke/service_tencentcloud_tke.go index fc4618e132..e90cd68f73 100644 --- a/tencentcloud/services/tke/service_tencentcloud_tke.go +++ b/tencentcloud/services/tke/service_tencentcloud_tke.go @@ -2788,3 +2788,55 @@ func (me *TkeService) DescribeKubernetesClusterNodePoolsByFilter(ctx context.Con clusterNodePools = response.Response.NodePoolSet return } + +func (me *TkeService) DescribeKubernetesAuthAttachmentById(ctx context.Context) (ret *tke.DescribeClusterAuthenticationOptionsResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tke.NewDescribeClusterAuthenticationOptionsRequest() + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTkeClient().DescribeClusterAuthenticationOptions(request) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + ret = response.Response + return +} + +func (me *TkeService) DeleteKubernetesAuthAttachmentById(ctx context.Context, clusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tke.NewModifyClusterAuthenticationOptionsRequest() + request.ClusterId = &clusterId + request.ServiceAccounts = &tke.ServiceAccountAuthenticationOptions{ + Issuer: helper.String("https://kubernetes.default.svc.cluster.local"), + JWKSURI: helper.String(""), + } + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTkeClient().ModifyClusterAuthenticationOptions(request) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} From aa3ac1e3ee29dd33b65369c2f50032031d1318cd Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Fri, 29 Mar 2024 12:56:58 +0800 Subject: [PATCH 02/15] feat(tke): generate auth attach --- tencentcloud/provider.go | 2 +- .../services/tke/resource_tc_kubernetes_auth_attachment.go | 5 ++--- .../tke/resource_tc_kubernetes_auth_attachment_test.go | 3 +-- tencentcloud/services/tke/service_tencentcloud_tke.go | 3 ++- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 0fe00be2c6..60a1fade1c 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1115,7 +1115,7 @@ func Provider() *schema.Provider { "tencentcloud_eks_cluster": tke.ResourceTencentCloudEksCluster(), "tencentcloud_eks_container_instance": tke.ResourceTencentCloudEksContainerInstance(), "tencentcloud_kubernetes_addon_attachment": tke.ResourceTencentCloudTkeAddonAttachment(), - "tencentcloud_kubernetes_auth_attachment": tke.ResourceTencentCloudTKEAuthAttachment(), + "tencentcloud_kubernetes_auth_attachment": tke.ResourceTencentCloudKubernetesAuthAttachment(), "tencentcloud_kubernetes_as_scaling_group": tke.ResourceTencentCloudKubernetesAsScalingGroup(), "tencentcloud_kubernetes_scale_worker": tke.ResourceTencentCloudTkeScaleWorker(), "tencentcloud_kubernetes_cluster_attachment": tke.ResourceTencentCloudTkeClusterAttachment(), diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go index 03daba1be2..8b27bbf586 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go @@ -190,13 +190,13 @@ func resourceTencentCloudKubernetesAuthAttachmentRead(d *schema.ResourceData, me _ = d.Set("cluster_id", clusterId) - respData, err := service.DescribeKubernetesAuthAttachmentById(ctx) + respData, err := service.DescribeKubernetesAuthAttachmentById(ctx, clusterId) if err != nil { return err } err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { - result, e := service.DescribeKubernetesAuthAttachmentById(ctx) + result, e := service.DescribeKubernetesAuthAttachmentById(ctx, clusterId) if e != nil { return tccommon.RetryError(e) } @@ -254,7 +254,6 @@ func resourceTencentCloudKubernetesAuthAttachmentRead(d *schema.ResourceData, me return err } - _ = clusterId return nil } diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go index 3ebfc11007..b01e8ab377 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go @@ -38,7 +38,7 @@ data "tencentcloud_vpc_subnets" "vpc" { resource "tencentcloud_kubernetes_cluster" "managed_cluster" { vpc_id = data.tencentcloud_vpc_subnets.vpc.instance_list.0.vpc_id - cluster_cidr = var.tke_cidr_a.1 + cluster_cidr = "10.31.3.0/24" cluster_max_pod_num = 32 cluster_name = "for-auth-attachment" cluster_desc = "test cluster desc" @@ -51,7 +51,6 @@ resource "tencentcloud_kubernetes_cluster" "managed_cluster" { resource "tencentcloud_kubernetes_auth_attachment" "test_auth_attach" { cluster_id = tencentcloud_kubernetes_cluster.managed_cluster.id - issuer = "" auto_create_discovery_anonymous_auth = true use_tke_default = true } diff --git a/tencentcloud/services/tke/service_tencentcloud_tke.go b/tencentcloud/services/tke/service_tencentcloud_tke.go index e90cd68f73..e6dc3af632 100644 --- a/tencentcloud/services/tke/service_tencentcloud_tke.go +++ b/tencentcloud/services/tke/service_tencentcloud_tke.go @@ -2789,10 +2789,11 @@ func (me *TkeService) DescribeKubernetesClusterNodePoolsByFilter(ctx context.Con return } -func (me *TkeService) DescribeKubernetesAuthAttachmentById(ctx context.Context) (ret *tke.DescribeClusterAuthenticationOptionsResponseParams, errRet error) { +func (me *TkeService) DescribeKubernetesAuthAttachmentById(ctx context.Context, clusterId string) (ret *tke.DescribeClusterAuthenticationOptionsResponseParams, errRet error) { logId := tccommon.GetLogId(ctx) request := tke.NewDescribeClusterAuthenticationOptionsRequest() + request.ClusterId = &clusterId defer func() { if errRet != nil { From 00c0a9052924cd25bb46cbc3f9506ca7b4bd3c3f Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Wed, 3 Apr 2024 17:28:12 +0800 Subject: [PATCH 03/15] feat(tke): generate auth attach --- .../tke/service_tencentcloud_tke_addons.go | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/tencentcloud/services/tke/service_tencentcloud_tke_addons.go b/tencentcloud/services/tke/service_tencentcloud_tke_addons.go index 57e1d53056..0ffb7057f3 100644 --- a/tencentcloud/services/tke/service_tencentcloud_tke_addons.go +++ b/tencentcloud/services/tke/service_tencentcloud_tke_addons.go @@ -303,3 +303,50 @@ func (me *TkeService) GetAddonNameFromJson(reqJson string) (name string, err err } return } + +func (me *TkeService) DescribeKubernetesAddonAttachmentById(ctx context.Context) (ret *tke.ForwardApplicationRequestV3ResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tke.NewForwardApplicationRequestV3Request() + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTkeClient().ForwardApplicationRequestV3(request) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + ret = response.Response + return +} + +func (me *TkeService) DeleteKubernetesAddonAttachmentById(ctx context.Context) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tke.NewForwardApplicationRequestV3Request() + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTkeClient().ForwardApplicationRequestV3(request) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} From 529a20e463e583c4e571ec9d50328c6efe682bc7 Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Wed, 3 Apr 2024 17:29:04 +0800 Subject: [PATCH 04/15] feat(tke): generate auth attach --- ...c_kubernetes_addon_attachment_extension.go | 152 ++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go new file mode 100644 index 0000000000..ccdc6ed1c7 --- /dev/null +++ b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go @@ -0,0 +1,152 @@ +package tke + +import ( + "context" + "fmt" + tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +func resourceTencentCloudKubernetesAddonAttachmentCreatePreRequest0(d *schema.ResourceData, meta interface{}, req *tke.ForwardApplicationRequestV3Request) error { + + var ( + addonName = d.Get("name").(string) + version = d.Get("version").(string) + values = d.Get("values").([]interface{}) + rawValues *string + rawValuesType *string + reqBody = d.Get("request_body").(string) + service = TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ctx = context.Background() + ) + clusterName := *req.ClusterName + if version == "" { + request := tke.NewGetTkeAppChartListRequest() + chartList, err := service.GetTkeAppChartList(ctx, request) + if err != nil { + return fmt.Errorf("error while fetching latest chart versions, %s", err.Error()) + } + for i := range chartList { + chart := chartList[i] + if *chart.Name == addonName { + version = *chart.LatestVersion + break + } + } + } + + if reqBody == "" { + if v, ok := d.GetOk("raw_values"); ok { + rawValues = helper.String(v.(string)) + } + if v, ok := d.GetOk("raw_values_type"); ok { + rawValuesType = helper.String(v.(string)) + } + + var reqErr error + v := helper.InterfacesStringsPoint(values) + reqBody, reqErr = service.GetAddonReqBody(addonName, version, v, rawValues, rawValuesType) + if reqErr != nil { + return reqErr + } + } + req.RequestBody = &reqBody + req.Path = helper.String(service.GetAddonsPath(clusterName, "")) + req.Method = helper.String("POST") + return nil +} + +func resourceTencentCloudKubernetesAddonAttachmentCreatePostRequest0(ctx context.Context, d *schema.ResourceData, meta interface{}, req *tke.ForwardApplicationRequestV3Request, resp *tke.ForwardApplicationRequestV3Response) error { + var ( + clusterId string + name string + ) + + if v, ok := d.GetOk("cluster_id"); ok { + clusterId = v.(string) + } + if v, ok := d.GetOk("name"); ok { + name = v.(string) + } + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + addonName := name + resData := &AddonResponseData{} + reason := "unknown error" + phase, has, _ := service.PollingAddonsPhase(ctx, clusterId, addonName, resData) + + if resData.Status != nil && resData.Status["reason"] != nil { + reason = resData.Status["reason"].(string) + } + + if !has { + return fmt.Errorf("addon %s not exists", addonName) + } + + if phase == "ChartFetchFailed" || phase == "Failed" || phase == "RollbackFailed" || phase == "SyncFailed" { + msg := fmt.Sprintf("Unexpected chart phase `%s`, reason: %s", phase, reason) + if err := resourceTencentCloudKubernetesAddonAttachmentDelete(d, meta); err != nil { + return err + } + d.SetId("") + return fmt.Errorf(msg) + } + return nil +} + +func resourceTencentCloudKubernetesAddonAttachmentUpdatePreRequest0(ctx context.Context, d *schema.ResourceData, meta interface{}, req *tke.ForwardApplicationRequestV3Request) error { + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + + var ( + version = d.Get("version").(string) + values = d.Get("values").([]interface{}) + reqBody = d.Get("request_body").(string) + rawValues *string + rawValuesType *string + err error + ) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + clusterName := idSplit[0] + addonName := idSplit[1] + + if d.HasChange("version") || d.HasChange("values") || d.HasChange("raw_values") || d.HasChange("raw_values_type") { + if v, ok := d.GetOk("raw_values"); ok { + rawValues = helper.String(v.(string)) + } + if v, ok := d.GetOk("raw_values_type"); ok { + rawValuesType = helper.String(v.(string)) + } + reqBody, err = service.GetAddonReqBody(addonName, version, helper.InterfacesStringsPoint(values), rawValues, rawValuesType) + } + if err != nil { + return err + } + req.Method = helper.String("PATCH") + req.ContentType = helper.String("application/strategic-merge-patch+json") + req.ClusterName = helper.String(clusterName) + req.Path = helper.String(service.GetAddonsPath(clusterName, addonName)) + req.RequestBody = &reqBody + return nil +} +func getFilteredValues(d *schema.ResourceData, values []*string) []string { + rawValues := helper.InterfacesStrings(d.Get("values").([]interface{})) + + for _, value := range values { + kv := strings.Split(*value, "=") + key := kv[0] + + if tccommon.IsContains(TKE_ADDON_DEFAULT_VALUES_KEY, key) || tccommon.IsContains(rawValues, *value) { + continue + } + rawValues = append(rawValues, *value) + } + return rawValues +} From 9f08cf36b6612c360df51cb750a8b47404a9900e Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Wed, 3 Apr 2024 18:10:43 +0800 Subject: [PATCH 05/15] feat(tke): generate auth attach --- tencentcloud/common/context.go | 39 ++ ...resource_tc_kubernetes_addon_attachment.go | 377 +++++++++--------- ...c_kubernetes_addon_attachment_extension.go | 116 +++++- .../tke/service_tencentcloud_tke_addons.go | 6 +- 4 files changed, 340 insertions(+), 198 deletions(-) create mode 100644 tencentcloud/common/context.go diff --git a/tencentcloud/common/context.go b/tencentcloud/common/context.go new file mode 100644 index 0000000000..e5458aa9b2 --- /dev/null +++ b/tencentcloud/common/context.go @@ -0,0 +1,39 @@ +package common + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +type ctxResourceDataKey struct{} +type ctxProviderMetaKey struct{} + +// NewResourceLifeCycleHandleFuncContext 创建一个资源生命周期处理方法上下文 +func NewResourceLifeCycleHandleFuncContext( + parent context.Context, + logID string, + d *schema.ResourceData, + meta interface{}, +) context.Context { + ctx := context.WithValue(parent, LogIdKey, logID) + ctx = context.WithValue(ctx, ctxResourceDataKey{}, d) + ctx = context.WithValue(ctx, ctxProviderMetaKey{}, meta) + return ctx +} + +// ResourceDataFromContext 从上下文获取资源数据 +func ResourceDataFromContext(ctx context.Context) *schema.ResourceData { + if d, ok := ctx.Value(ctxResourceDataKey{}).(*schema.ResourceData); ok { + return d + } + return nil +} + +// ProviderMetaFromContext 从上下文获取 provider meta +func ProviderMetaFromContext(ctx context.Context) interface{} { + if meta, ok := ctx.Value(ctxProviderMetaKey{}).(ProviderMeta); ok { + return meta + } + return nil +} diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment.go b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment.go index bf37deda67..1ce3819cd6 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment.go @@ -1,22 +1,27 @@ +// Code generated by iacg; DO NOT EDIT. package tke import ( "context" - "encoding/base64" "fmt" - "strings" - - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" - - tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" - + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - + tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "log" + "strings" ) -func ResourceTencentCloudTkeAddonAttachment() *schema.Resource { +func ResourceTencentCloudKubernetesAddonAttachment() *schema.Resource { return &schema.Resource{ + Create: resourceTencentCloudKubernetesAddonAttachmentCreate, + Read: resourceTencentCloudKubernetesAddonAttachmentRead, + Update: resourceTencentCloudKubernetesAddonAttachmentUpdate, + Delete: resourceTencentCloudKubernetesAddonAttachmentDelete, + Importer: &schema.ResourceImporter{ + State: schema.ImportStatePassthrough, + }, Schema: map[string]*schema.Schema{ "cluster_id": { Type: schema.TypeString, @@ -24,306 +29,294 @@ func ResourceTencentCloudTkeAddonAttachment() *schema.Resource { ForceNew: true, Description: "ID of cluster.", }, + "name": { Type: schema.TypeString, Required: true, ForceNew: true, Description: "Name of addon.", }, + "version": { Type: schema.TypeString, Optional: true, Computed: true, - Description: "Addon version, default latest version. Conflict with `request_body`.", ConflictsWith: []string{"request_body"}, + Description: "Addon version, default latest version. Conflict with `request_body`.", }, + "values": { Type: schema.TypeList, Optional: true, Computed: true, - Description: "Values the addon passthroughs. Conflict with `request_body`.", ConflictsWith: []string{"request_body"}, - Elem: &schema.Schema{Type: schema.TypeString}, + Description: "Values the addon passthroughs. Conflict with `request_body`.", + Elem: &schema.Schema{ + Type: schema.TypeString, + }, }, + "raw_values": { Type: schema.TypeString, Optional: true, Computed: true, - Description: "Raw Values. Conflict with `request_body`. Required with `raw_values_type`.", ConflictsWith: []string{"request_body"}, RequiredWith: []string{"raw_values_type"}, + Description: "Raw Values. Conflict with `request_body`. Required with `raw_values_type`.", }, + "raw_values_type": { Type: schema.TypeString, Optional: true, Computed: true, - Description: "The type of raw Values. Required with `raw_values`.", RequiredWith: []string{"raw_values"}, + Description: "The type of raw Values. Required with `raw_values`.", }, + "request_body": { Type: schema.TypeString, Optional: true, - Description: "Serialized json string as request body of addon spec. If set, will ignore `version` and `values`.", ConflictsWith: []string{"version", "values"}, + Description: "Serialized json string as request body of addon spec. If set, will ignore `version` and `values`.", }, + "response_body": { Type: schema.TypeString, Computed: true, Description: "Addon response body.", }, + "status": { Type: schema.TypeMap, Computed: true, Description: "Addon current status.", }, }, - Create: resourceTencentCloudTkeAddonAttachmentCreate, - Update: resourceTencentCloudTkeAddonAttachmentUpdate, - Read: resourceTencentCloudTkeAddonAttachmentRead, - Delete: resourceTencentCloudTkeAddonAttachmentDelete, - Importer: &schema.ResourceImporter{ - State: schema.ImportStatePassthrough, - }, } } -func resourceTencentCloudTkeAddonAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("resource.resource_tc_kubernetes_addon_attachment.create")() +func resourceTencentCloudKubernetesAddonAttachmentCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_addon_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) - client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - service := TkeService{client: client} - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) var ( - clusterId = d.Get("cluster_id").(string) - addonName = d.Get("name").(string) - version = d.Get("version").(string) - values = d.Get("values").([]interface{}) - rawValues *string - rawValuesType *string - reqBody = d.Get("request_body").(string) + clusterId string + name string + ) + var ( + request = tke.NewForwardApplicationRequestV3Request() + response = tke.NewForwardApplicationRequestV3Response() ) - if version == "" { - request := tke.NewGetTkeAppChartListRequest() - chartList, err := service.GetTkeAppChartList(ctx, request) - if err != nil { - return fmt.Errorf("error while fetching latest chart versions, %s", err.Error()) - } - for i := range chartList { - chart := chartList[i] - if *chart.Name == addonName { - version = *chart.LatestVersion - break - } - } + if v, ok := d.GetOk("cluster_id"); ok { + clusterId = v.(string) + } + if v, ok := d.GetOk("name"); ok { + name = v.(string) } - if reqBody == "" { - if v, ok := d.GetOk("raw_values"); ok { - rawValues = helper.String(v.(string)) - } - if v, ok := d.GetOk("raw_values_type"); ok { - rawValuesType = helper.String(v.(string)) - } + if v, ok := d.GetOk("cluster_id"); ok { + request.ClusterName = helper.String(v.(string)) + } - var reqErr error - v := helper.InterfacesStringsPoint(values) - reqBody, reqErr = service.GetAddonReqBody(addonName, version, v, rawValues, rawValuesType) - if reqErr != nil { - return reqErr - } + if v, ok := d.GetOk("path"); ok { + request.Path = helper.String(v.(string)) } - err := service.CreateExtensionAddon(ctx, clusterId, reqBody) + if v, ok := d.GetOk("request_body"); ok { + request.RequestBody = helper.String(v.(string)) + } - if err != nil { + if err := resourceTencentCloudKubernetesAddonAttachmentCreatePostFillRequest0(ctx, request); err != nil { return err } - d.SetId(clusterId + tccommon.FILED_SP + addonName) - - resData := &AddonResponseData{} - reason := "unknown error" - phase, has, _ := service.PollingAddonsPhase(ctx, clusterId, addonName, resData) - - if resData.Status != nil && resData.Status["reason"] != nil { - reason = resData.Status["reason"].(string) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().ForwardApplicationRequestV3WithContext(ctx, request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + response = result + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s create kubernetes addon attachment failed, reason:%+v", logId, err) + return err } - if !has { - return fmt.Errorf("addon %s not exists", addonName) - } + _ = response - if phase == "ChartFetchFailed" || phase == "Failed" || phase == "RollbackFailed" || phase == "SyncFailed" { - msg := fmt.Sprintf("Unexpected chart phase `%s`, reason: %s", phase, reason) - if err := resourceTencentCloudTkeAddonAttachmentDelete(d, meta); err != nil { - return err - } - d.SetId("") - return fmt.Errorf(msg) + if err := resourceTencentCloudKubernetesAddonAttachmentCreatePostHandleResponse0(ctx, response); err != nil { + return err } - return resourceTencentCloudTkeAddonAttachmentRead(d, meta) + d.SetId(strings.Join([]string{clusterId, name}, tccommon.FILED_SP)) + + return resourceTencentCloudKubernetesAddonAttachmentRead(d, meta) } -func resourceTencentCloudTkeAddonAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("resource.resource_tc_kubernetes_addon_attachment.read")() +func resourceTencentCloudKubernetesAddonAttachmentRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_addon_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - id := d.Id() - has := false - split := strings.Split(id, tccommon.FILED_SP) - if len(split) < 2 { - return fmt.Errorf("id expected format: cluster_id#addon_name but no addon_name provided") + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) } - clusterId := split[0] - addonName := split[1] + clusterId := idSplit[0] + name := idSplit[1] - var ( - err error - response string - addonResponseData = &AddonResponseData{} - ) + _ = d.Set("cluster_id", clusterId) - _, has, err = service.PollingAddonsPhase(ctx, clusterId, addonName, addonResponseData) + _ = d.Set("name", name) - if err != nil || !has { - d.SetId("") + respData, err := service.DescribeKubernetesAddonAttachmentById(ctx) + if err != nil { return err } - response, _, err = service.DescribeExtensionAddon(ctx, clusterId, addonName) - - if err != nil { + if respData == nil { d.SetId("") + log.Printf("[WARN]%s resource `kubernetes_addon_attachment` [%s] not found, please check if it has been deleted.\n", logId, d.Id()) + return nil + } + if respData.ResponseBody != nil { + _ = d.Set("response_body", respData.ResponseBody) + } + + if err := resourceTencentCloudKubernetesAddonAttachmentReadPostHandleResponse0(ctx, respData); err != nil { return err } - _ = d.Set("response_body", response) + _ = clusterId + _ = name + return nil +} - spec := addonResponseData.Spec - statuses := addonResponseData.Status +func resourceTencentCloudKubernetesAddonAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_addon_attachment.update")() + defer tccommon.InconsistentCheck(d, meta)() - if spec != nil { - _ = d.Set("cluster_id", clusterId) - _ = d.Set("name", spec.Chart.ChartName) - _ = d.Set("version", spec.Chart.ChartVersion) - if spec.Values != nil && len(spec.Values.Values) > 0 { + logId := tccommon.GetLogId(tccommon.ContextNil) - // Filter auto-filled values from addon creation - filteredValues := getFilteredValues(d, spec.Values.Values) - _ = d.Set("values", filteredValues) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + immutableArgs := []string{"cluster_id", "name"} + for _, v := range immutableArgs { + if d.HasChange(v) { + return fmt.Errorf("argument `%s` cannot be changed", v) + } + } + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + clusterId := idSplit[0] + name := idSplit[1] + + needChange := false + mutableArgs := []string{"request_body"} + for _, v := range mutableArgs { + if d.HasChange(v) { + needChange = true + break } + } - if spec.Values != nil && spec.Values.RawValues != nil { - rawValues := spec.Values.RawValues - rawValuesType := spec.Values.RawValuesType + if needChange { + request := tke.NewForwardApplicationRequestV3Request() - base64DecodeValues, _ := base64.StdEncoding.DecodeString(*rawValues) - jsonValues := string(base64DecodeValues) + if v, ok := d.GetOk("request_body"); ok { + request.RequestBody = helper.String(v.(string)) + } - _ = d.Set("raw_values", jsonValues) - _ = d.Set("raw_values_type", rawValuesType) + if err := resourceTencentCloudKubernetesAddonAttachmentUpdatePostFillRequest0(ctx, request); err != nil { + return err } - } - if statuses != nil || len(statuses) == 0 { - strMap := helper.CovertInterfaceMapToStrPtr(statuses) - err := d.Set("status", strMap) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().ForwardApplicationRequestV3WithContext(ctx, request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + return nil + }) if err != nil { + log.Printf("[CRITAL]%s update kubernetes addon attachment failed, reason:%+v", logId, err) return err } } - d.SetId(id) - - return nil + _ = clusterId + _ = name + return resourceTencentCloudKubernetesAddonAttachmentRead(d, meta) } -func resourceTencentCloudTkeAddonAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("resource.resource_tc_kubernetes_addon_attachment.update")() +func resourceTencentCloudKubernetesAddonAttachmentDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_kubernetes_addon_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) + if len(idSplit) != 2 { + return fmt.Errorf("id is broken,%s", d.Id()) + } + clusterId := idSplit[0] + name := idSplit[1] var ( - id = d.Id() - split = strings.Split(id, tccommon.FILED_SP) - clusterId = split[0] - addonName = split[1] - version = d.Get("version").(string) - values = d.Get("values").([]interface{}) - reqBody = d.Get("request_body").(string) - err error - rawValues *string - rawValuesType *string + request = tke.NewForwardApplicationRequestV3Request() + response = tke.NewForwardApplicationRequestV3Response() ) - if d.HasChange("request_body") && reqBody == "" || d.HasChange("version") || d.HasChange("values") || d.HasChange("raw_values") || d.HasChange("raw_values_type") { - if v, ok := d.GetOk("raw_values"); ok { - rawValues = helper.String(v.(string)) - } - if v, ok := d.GetOk("raw_values_type"); ok { - rawValuesType = helper.String(v.(string)) - } - reqBody, err = service.GetAddonReqBody(addonName, version, helper.InterfacesStringsPoint(values), rawValues, rawValuesType) + if v, ok := d.GetOk("cluster_id"); ok { + clusterId = v.(string) + } + if v, ok := d.GetOk("name"); ok { + name = v.(string) } - if err != nil { + if err := resourceTencentCloudKubernetesAddonAttachmentDeletePostFillRequest0(ctx, request); err != nil { return err } - err = service.UpdateExtensionAddon(ctx, clusterId, addonName, reqBody) - + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().ForwardApplicationRequestV3WithContext(ctx, request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + response = result + return nil + }) if err != nil { + log.Printf("[CRITAL]%s create kubernetes addon attachment failed, reason:%+v", logId, err) return err } - return resourceTencentCloudTkeAddonAttachmentRead(d, meta) -} - -func resourceTencentCloudTkeAddonAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer tccommon.LogElapsed("resource.resource_tc_kubernetes_addon_attachment.delete")() - logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - - var ( - id = d.Id() - split = strings.Split(id, tccommon.FILED_SP) - clusterId = split[0] - addonName = split[1] - has bool - ) - - if err := service.DeleteExtensionAddon(ctx, clusterId, addonName); err != nil { + _ = response + if err := resourceTencentCloudKubernetesAddonAttachmentDeletePostHandleResponse0(ctx, response); err != nil { return err } - // check if addon terminating or still exists - _, has, _ = service.PollingAddonsPhase(ctx, clusterId, addonName, nil) - - if has { - return fmt.Errorf("addon %s still exists", addonName) - } - + _ = clusterId + _ = name return nil } - -func getFilteredValues(d *schema.ResourceData, values []*string) []string { - rawValues := helper.InterfacesStrings(d.Get("values").([]interface{})) - - for _, value := range values { - kv := strings.Split(*value, "=") - key := kv[0] - - if tccommon.IsContains(TKE_ADDON_DEFAULT_VALUES_KEY, key) || tccommon.IsContains(rawValues, *value) { - continue - } - rawValues = append(rawValues, *value) - } - return rawValues -} diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go index ccdc6ed1c7..372ea3cb1c 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go @@ -2,6 +2,7 @@ package tke import ( "context" + "encoding/base64" "fmt" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" @@ -11,7 +12,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudKubernetesAddonAttachmentCreatePreRequest0(d *schema.ResourceData, meta interface{}, req *tke.ForwardApplicationRequestV3Request) error { +var addonResponseData = &AddonResponseData{} + +func resourceTencentCloudKubernetesAddonAttachmentCreatePostFillRequest0(ctx context.Context, req *tke.ForwardApplicationRequestV3Request) error { + d := tccommon.ResourceDataFromContext(ctx) + meta := tccommon.ProviderMetaFromContext(ctx) var ( addonName = d.Get("name").(string) @@ -21,7 +26,6 @@ func resourceTencentCloudKubernetesAddonAttachmentCreatePreRequest0(d *schema.Re rawValuesType *string reqBody = d.Get("request_body").(string) service = TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - ctx = context.Background() ) clusterName := *req.ClusterName if version == "" { @@ -60,7 +64,9 @@ func resourceTencentCloudKubernetesAddonAttachmentCreatePreRequest0(d *schema.Re return nil } -func resourceTencentCloudKubernetesAddonAttachmentCreatePostRequest0(ctx context.Context, d *schema.ResourceData, meta interface{}, req *tke.ForwardApplicationRequestV3Request, resp *tke.ForwardApplicationRequestV3Response) error { +func resourceTencentCloudKubernetesAddonAttachmentCreatePostHandleResponse0(ctx context.Context, resp *tke.ForwardApplicationRequestV3Response) error { + d := tccommon.ResourceDataFromContext(ctx) + meta := tccommon.ProviderMetaFromContext(ctx) var ( clusterId string name string @@ -97,8 +103,75 @@ func resourceTencentCloudKubernetesAddonAttachmentCreatePostRequest0(ctx context } return nil } +func resourceTencentCloudKubernetesAddonAttachmentReadPreRequest0(ctx context.Context, req *tke.ForwardApplicationRequestV3Request) error { + d := tccommon.ResourceDataFromContext(ctx) + meta := tccommon.ProviderMetaFromContext(ctx) + var ( + err error + ) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + has := false + clusterName := d.Get("cluster_id").(string) + addonName := d.Get("name").(string) + + _, has, err = service.PollingAddonsPhase(ctx, clusterName, addonName, addonResponseData) + + if err != nil || !has { + d.SetId("") + return err + } + + request := tke.NewForwardApplicationRequestV3Request() + request.Method = helper.String("GET") + request.ClusterName = &clusterName + request.Path = helper.String(service.GetAddonsPath(clusterName, addonName)) + + return nil +} + +func resourceTencentCloudKubernetesAddonAttachmentReadPostHandleResponse0(ctx context.Context, resp *tke.ForwardApplicationRequestV3ResponseParams) error { + d := tccommon.ResourceDataFromContext(ctx) + + spec := addonResponseData.Spec + statuses := addonResponseData.Status + clusterId := d.Get("cluster_id").(string) + + if spec != nil { + _ = d.Set("cluster_id", clusterId) + _ = d.Set("name", spec.Chart.ChartName) + _ = d.Set("version", spec.Chart.ChartVersion) + if spec.Values != nil && len(spec.Values.Values) > 0 { + + // Filter auto-filled values from addon creation + filteredValues := getFilteredValues(d, spec.Values.Values) + _ = d.Set("values", filteredValues) + } + + if spec.Values != nil && spec.Values.RawValues != nil { + rawValues := spec.Values.RawValues + rawValuesType := spec.Values.RawValuesType + + base64DecodeValues, _ := base64.StdEncoding.DecodeString(*rawValues) + jsonValues := string(base64DecodeValues) + + _ = d.Set("raw_values", jsonValues) + _ = d.Set("raw_values_type", rawValuesType) + } + } -func resourceTencentCloudKubernetesAddonAttachmentUpdatePreRequest0(ctx context.Context, d *schema.ResourceData, meta interface{}, req *tke.ForwardApplicationRequestV3Request) error { + if statuses != nil || len(statuses) == 0 { + strMap := helper.CovertInterfaceMapToStrPtr(statuses) + err := d.Set("status", strMap) + if err != nil { + return err + } + } + return nil +} +func resourceTencentCloudKubernetesAddonAttachmentUpdatePostFillRequest0(ctx context.Context, req *tke.ForwardApplicationRequestV3Request) error { + d := tccommon.ResourceDataFromContext(ctx) + meta := tccommon.ProviderMetaFromContext(ctx) idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) @@ -136,6 +209,41 @@ func resourceTencentCloudKubernetesAddonAttachmentUpdatePreRequest0(ctx context. req.RequestBody = &reqBody return nil } +func resourceTencentCloudKubernetesAddonAttachmentDeletePostFillRequest0(ctx context.Context, req *tke.ForwardApplicationRequestV3Request) error { + + d := tccommon.ResourceDataFromContext(ctx) + meta := tccommon.ProviderMetaFromContext(ctx) + clusterName := d.Get("cluster_id").(string) + addonName := d.Get("name").(string) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + request := tke.NewForwardApplicationRequestV3Request() + request.Method = helper.String("DELETE") + request.ClusterName = &clusterName + request.Path = helper.String(service.GetAddonsPath(clusterName, addonName)) + return nil +} +func resourceTencentCloudKubernetesAddonAttachmentDeletePostHandleResponse0(ctx context.Context, resp *tke.ForwardApplicationRequestV3Response) error { + d := tccommon.ResourceDataFromContext(ctx) + meta := tccommon.ProviderMetaFromContext(ctx) + var ( + id = d.Id() + split = strings.Split(id, tccommon.FILED_SP) + clusterId = split[0] + addonName = split[1] + has bool + ) + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + // check if addon terminating or still exists + _, has, _ = service.PollingAddonsPhase(ctx, clusterId, addonName, nil) + + if has { + return fmt.Errorf("addon %s still exists", addonName) + } + return nil +} + func getFilteredValues(d *schema.ResourceData, values []*string) []string { rawValues := helper.InterfacesStrings(d.Get("values").([]interface{})) diff --git a/tencentcloud/services/tke/service_tencentcloud_tke_addons.go b/tencentcloud/services/tke/service_tencentcloud_tke_addons.go index 0ffb7057f3..3c5b3a4046 100644 --- a/tencentcloud/services/tke/service_tencentcloud_tke_addons.go +++ b/tencentcloud/services/tke/service_tencentcloud_tke_addons.go @@ -303,7 +303,6 @@ func (me *TkeService) GetAddonNameFromJson(reqJson string) (name string, err err } return } - func (me *TkeService) DescribeKubernetesAddonAttachmentById(ctx context.Context) (ret *tke.ForwardApplicationRequestV3ResponseParams, errRet error) { logId := tccommon.GetLogId(ctx) @@ -317,6 +316,10 @@ func (me *TkeService) DescribeKubernetesAddonAttachmentById(ctx context.Context) ratelimit.Check(request.GetAction()) + if err := resourceTencentCloudKubernetesAddonAttachmentReadPreRequest0(ctx, request); err != nil { + return nil, err + } + response, err := me.client.UseTkeClient().ForwardApplicationRequestV3(request) if err != nil { errRet = err @@ -327,7 +330,6 @@ func (me *TkeService) DescribeKubernetesAddonAttachmentById(ctx context.Context) ret = response.Response return } - func (me *TkeService) DeleteKubernetesAddonAttachmentById(ctx context.Context) (errRet error) { logId := tccommon.GetLogId(ctx) From 5805f9c348af41ba7a314c8fd5419bbc0c50b79d Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Sun, 7 Apr 2024 18:57:43 +0800 Subject: [PATCH 06/15] feat(tke): generate auth attach --- tencentcloud/provider.go | 2 +- .../services/tke/resource_tc_kubernetes_auth_attachment_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 60a1fade1c..c10805530d 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1114,7 +1114,7 @@ func Provider() *schema.Provider { "tencentcloud_kubernetes_cluster_endpoint": tke.ResourceTencentCloudTkeClusterEndpoint(), "tencentcloud_eks_cluster": tke.ResourceTencentCloudEksCluster(), "tencentcloud_eks_container_instance": tke.ResourceTencentCloudEksContainerInstance(), - "tencentcloud_kubernetes_addon_attachment": tke.ResourceTencentCloudTkeAddonAttachment(), + "tencentcloud_kubernetes_addon_attachment": tke.ResourceTencentCloudKubernetesAddonAttachment(), "tencentcloud_kubernetes_auth_attachment": tke.ResourceTencentCloudKubernetesAuthAttachment(), "tencentcloud_kubernetes_as_scaling_group": tke.ResourceTencentCloudKubernetesAsScalingGroup(), "tencentcloud_kubernetes_scale_worker": tke.ResourceTencentCloudTkeScaleWorker(), diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go index b01e8ab377..7012ca5409 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go @@ -38,7 +38,7 @@ data "tencentcloud_vpc_subnets" "vpc" { resource "tencentcloud_kubernetes_cluster" "managed_cluster" { vpc_id = data.tencentcloud_vpc_subnets.vpc.instance_list.0.vpc_id - cluster_cidr = "10.31.3.0/24" + cluster_cidr = "10.31.4.0/24" cluster_max_pod_num = 32 cluster_name = "for-auth-attachment" cluster_desc = "test cluster desc" From c1ace5789939e3a3ad5bd66a0484607ba11c3ace Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Mon, 8 Apr 2024 14:16:30 +0800 Subject: [PATCH 07/15] feat(tke): generate auth attach --- .../resource_tc_kubernetes_auth_attachment.go | 76 +++++++++++++------ ...tc_kubernetes_auth_attachment_extension.go | 48 ++++++++++-- ...urce_tc_kubernetes_auth_attachment_test.go | 2 +- .../services/tke/service_tencentcloud_tke.go | 4 +- 4 files changed, 99 insertions(+), 31 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go index 8b27bbf586..854d03235c 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go @@ -101,6 +101,8 @@ func resourceTencentCloudKubernetesAuthAttachmentCreate(d *schema.ResourceData, logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) + var ( clusterId string ) @@ -148,14 +150,14 @@ func resourceTencentCloudKubernetesAuthAttachmentCreate(d *schema.ResourceData, } request.OIDCConfig = &oIDCConfigAuthenticationOptions - if err := resourceTencentCloudKubernetesAuthAttachmentCreatePreRequest0(d, meta, request); err != nil { - return err - } - err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().ModifyClusterAuthenticationOptions(request) + if err := resourceTencentCloudKubernetesAuthAttachmentCreatePreRequest0(ctx, request); err != nil { + return err + } + + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().ModifyClusterAuthenticationOptionsWithContext(ctx, request) if e != nil { - if err := resourceTencentCloudKubernetesAuthAttachmentCreateRequestOnError0(d, meta, request, e); err != nil { + if err := resourceTencentCloudKubernetesAuthAttachmentCreateRequestOnError0(ctx, request, e); err != nil { return err } return tccommon.RetryError(e) @@ -171,6 +173,7 @@ func resourceTencentCloudKubernetesAuthAttachmentCreate(d *schema.ResourceData, } _ = response + d.SetId(clusterId) return resourceTencentCloudKubernetesAuthAttachmentRead(d, meta) @@ -182,7 +185,7 @@ func resourceTencentCloudKubernetesAuthAttachmentRead(d *schema.ResourceData, me logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} @@ -200,7 +203,7 @@ func resourceTencentCloudKubernetesAuthAttachmentRead(d *schema.ResourceData, me if e != nil { return tccommon.RetryError(e) } - if err := resourceTencentCloudKubernetesAuthAttachmentReadRequestOnSuccess0(d, meta, result); err != nil { + if err := resourceTencentCloudKubernetesAuthAttachmentReadRequestOnSuccess0(ctx, result); err != nil { return err } respData = result @@ -250,10 +253,6 @@ func resourceTencentCloudKubernetesAuthAttachmentRead(d *schema.ResourceData, me } - if err := resourceTencentCloudKubernetesAuthAttachmentReadPostRequest0(ctx, d, meta, respData); err != nil { - return err - } - return nil } @@ -263,7 +262,7 @@ func resourceTencentCloudKubernetesAuthAttachmentUpdate(d *schema.ResourceData, logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.Background(), tccommon.LogIdKey, logId) + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) immutableArgs := []string{"cluster_id"} for _, v := range immutableArgs { @@ -318,14 +317,14 @@ func resourceTencentCloudKubernetesAuthAttachmentUpdate(d *schema.ResourceData, } request.OIDCConfig = &oIDCConfigAuthenticationOptions - if err := resourceTencentCloudKubernetesAuthAttachmentUpdatePreRequest0(ctx, d, meta, request); err != nil { - return err - } - err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { - result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().ModifyClusterAuthenticationOptions(request) + if err := resourceTencentCloudKubernetesAuthAttachmentUpdatePreRequest0(ctx, request); err != nil { + return err + } + + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().ModifyClusterAuthenticationOptionsWithContext(ctx, request) if e != nil { - if err := resourceTencentCloudKubernetesAuthAttachmentUpdateRequestOnError0(d, meta, request, e); err != nil { + if err := resourceTencentCloudKubernetesAuthAttachmentUpdateRequestOnError0(ctx, request, e); err != nil { return err } return tccommon.RetryError(e) @@ -348,14 +347,43 @@ func resourceTencentCloudKubernetesAuthAttachmentDelete(d *schema.ResourceData, defer tccommon.InconsistentCheck(d, meta)() logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - - service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta) clusterId := d.Id() - if e := service.DeleteKubernetesAuthAttachmentById(ctx, clusterId); e != nil { - return e + var ( + request = tke.NewModifyClusterAuthenticationOptionsRequest() + response = tke.NewModifyClusterAuthenticationOptionsResponse() + ) + + if v, ok := d.GetOk("cluster_id"); ok { + clusterId = v.(string) + } + + request.ClusterId = &clusterId + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + if err := resourceTencentCloudKubernetesAuthAttachmentDeletePreRequest0(ctx, request); err != nil { + return err + } + + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().ModifyClusterAuthenticationOptionsWithContext(ctx, request) + if e != nil { + return tccommon.RetryError(e) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) + } + response = result + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s create kubernetes auth attachment failed, reason:%+v", logId, err) + return err + } + + _ = response + if err := resourceTencentCloudKubernetesAuthAttachmentDeletePostHandleResponse0(ctx, response); err != nil { + return err } return nil diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go index b564830cf9..c5db198554 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go @@ -9,11 +9,12 @@ import ( "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudKubernetesAuthAttachmentCreateRequestOnError0(d *schema.ResourceData, meta interface{}, req *tke.ModifyClusterAuthenticationOptionsRequest, e error) *resource.RetryError { +func resourceTencentCloudKubernetesAuthAttachmentCreateRequestOnError0(ctx context.Context, req *tke.ModifyClusterAuthenticationOptionsRequest, e error) *resource.RetryError { return tccommon.RetryError(e, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) } -func resourceTencentCloudKubernetesAuthAttachmentCreatePreRequest0(d *schema.ResourceData, meta interface{}, req *tke.ModifyClusterAuthenticationOptionsRequest) error { +func resourceTencentCloudKubernetesAuthAttachmentCreatePreRequest0(ctx context.Context, req *tke.ModifyClusterAuthenticationOptionsRequest) *resource.RetryError { + d := tccommon.ResourceDataFromContext(ctx) tmpReqServiceAccount := tke.ServiceAccountAuthenticationOptions{} if v, ok := d.GetOk("use_tke_default"); ok && v.(bool) { req.ServiceAccounts.Issuer = tmpReqServiceAccount.Issuer @@ -22,8 +23,9 @@ func resourceTencentCloudKubernetesAuthAttachmentCreatePreRequest0(d *schema.Res return nil } -func resourceTencentCloudKubernetesAuthAttachmentReadRequestOnSuccess0(d *schema.ResourceData, meta interface{}, resp *tke.DescribeClusterAuthenticationOptionsResponseParams) *resource.RetryError { +func resourceTencentCloudKubernetesAuthAttachmentReadRequestOnSuccess0(ctx context.Context, resp *tke.DescribeClusterAuthenticationOptionsResponseParams) *resource.RetryError { tmpRespServiceAccount := tke.ServiceAccountAuthenticationOptions{} + d := tccommon.ResourceDataFromContext(ctx) if resp != nil && resp.ServiceAccounts != nil { if v, ok := d.GetOk("use_tke_default"); ok && v.(bool) { @@ -49,7 +51,9 @@ func resourceTencentCloudKubernetesAuthAttachmentReadPostRequest0(ctx context.Co } return nil } -func resourceTencentCloudKubernetesAuthAttachmentUpdatePreRequest0(ctx context.Context, d *schema.ResourceData, meta interface{}, req *tke.ModifyClusterAuthenticationOptionsRequest) error { +func resourceTencentCloudKubernetesAuthAttachmentUpdatePreRequest0(ctx context.Context, req *tke.ModifyClusterAuthenticationOptionsRequest) *resource.RetryError { + d := tccommon.ResourceDataFromContext(ctx) + useTkeDefault := false tmpReqServiceAccount := tke.ServiceAccountAuthenticationOptions{} req.ServiceAccounts.JWKSURI = tmpReqServiceAccount.JWKSURI @@ -73,6 +77,40 @@ func resourceTencentCloudKubernetesAuthAttachmentUpdatePreRequest0(ctx context.C return nil } -func resourceTencentCloudKubernetesAuthAttachmentUpdateRequestOnError0(d *schema.ResourceData, meta interface{}, req *tke.ModifyClusterAuthenticationOptionsRequest, e error) *resource.RetryError { +func resourceTencentCloudKubernetesAuthAttachmentUpdateRequestOnError0(ctx context.Context, req *tke.ModifyClusterAuthenticationOptionsRequest, e error) *resource.RetryError { return tccommon.RetryError(e, tke.RESOURCEUNAVAILABLE_CLUSTERSTATE) } +func resourceTencentCloudKubernetesAuthAttachmentReadPostFillRequest0(ctx context.Context, req *tke.DescribeClusterAuthenticationOptionsRequest) error { + d := tccommon.ResourceDataFromContext(ctx) + + meta := tccommon.ProviderMetaFromContext(ctx) + + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + _, _, err := service.WaitForAuthenticationOptionsUpdateSuccess(ctx, d.Id()) + + if err != nil { + d.SetId("") + return err + } + return nil +} +func resourceTencentCloudKubernetesAuthAttachmentDeletePreRequest0(ctx context.Context, req *tke.ModifyClusterAuthenticationOptionsRequest) *resource.RetryError { + req.ServiceAccounts = &tke.ServiceAccountAuthenticationOptions{ + JWKSURI: helper.String(""), + Issuer: helper.String(DefaultAuthenticationOptionsIssuer), + } + return nil +} +func resourceTencentCloudKubernetesAuthAttachmentDeletePostHandleResponse0(ctx context.Context, resp *tke.ModifyClusterAuthenticationOptionsResponse) error { + d := tccommon.ResourceDataFromContext(ctx) + + meta := tccommon.ProviderMetaFromContext(ctx) + + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + _, _, err := service.WaitForAuthenticationOptionsUpdateSuccess(ctx, d.Id()) + + if err != nil { + return err + } + return nil +} diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go index 7012ca5409..4240a65717 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go @@ -38,7 +38,7 @@ data "tencentcloud_vpc_subnets" "vpc" { resource "tencentcloud_kubernetes_cluster" "managed_cluster" { vpc_id = data.tencentcloud_vpc_subnets.vpc.instance_list.0.vpc_id - cluster_cidr = "10.31.4.0/24" + cluster_cidr = "10.31.5.0/24" cluster_max_pod_num = 32 cluster_name = "for-auth-attachment" cluster_desc = "test cluster desc" diff --git a/tencentcloud/services/tke/service_tencentcloud_tke.go b/tencentcloud/services/tke/service_tencentcloud_tke.go index e6dc3af632..ebbf505db8 100644 --- a/tencentcloud/services/tke/service_tencentcloud_tke.go +++ b/tencentcloud/services/tke/service_tencentcloud_tke.go @@ -2794,7 +2794,9 @@ func (me *TkeService) DescribeKubernetesAuthAttachmentById(ctx context.Context, request := tke.NewDescribeClusterAuthenticationOptionsRequest() request.ClusterId = &clusterId - + if err := resourceTencentCloudKubernetesAuthAttachmentReadPostFillRequest0(ctx, request); err != nil { + return nil, err + } defer func() { if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error()) From 011c3e2b33f23ba7c86d07c82b5a25eb94458b15 Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Mon, 8 Apr 2024 17:45:57 +0800 Subject: [PATCH 08/15] feat(tke): generate auth attach --- ...resource_tc_kubernetes_addon_attachment.go | 14 ++-- ...c_kubernetes_addon_attachment_extension.go | 49 +++++++------- ...rce_tc_kubernetes_addon_attachment_test.go | 64 +++++++++++++++++++ 3 files changed, 95 insertions(+), 32 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment.go b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment.go index 1ce3819cd6..6130196fd6 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment.go @@ -227,7 +227,7 @@ func resourceTencentCloudKubernetesAddonAttachmentUpdate(d *schema.ResourceData, name := idSplit[1] needChange := false - mutableArgs := []string{"request_body"} + mutableArgs := []string{} for _, v := range mutableArgs { if d.HasChange(v) { needChange = true @@ -238,14 +238,6 @@ func resourceTencentCloudKubernetesAddonAttachmentUpdate(d *schema.ResourceData, if needChange { request := tke.NewForwardApplicationRequestV3Request() - if v, ok := d.GetOk("request_body"); ok { - request.RequestBody = helper.String(v.(string)) - } - - if err := resourceTencentCloudKubernetesAddonAttachmentUpdatePostFillRequest0(ctx, request); err != nil { - return err - } - err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTkeClient().ForwardApplicationRequestV3WithContext(ctx, request) if e != nil { @@ -261,6 +253,10 @@ func resourceTencentCloudKubernetesAddonAttachmentUpdate(d *schema.ResourceData, } } + if err := resourceTencentCloudKubernetesAddonAttachmentUpdateOnExit(ctx); err != nil { + return err + } + _ = clusterId _ = name return resourceTencentCloudKubernetesAddonAttachmentRead(d, meta) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go index 372ea3cb1c..bb06bdd53b 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go @@ -122,10 +122,9 @@ func resourceTencentCloudKubernetesAddonAttachmentReadPreRequest0(ctx context.Co return err } - request := tke.NewForwardApplicationRequestV3Request() - request.Method = helper.String("GET") - request.ClusterName = &clusterName - request.Path = helper.String(service.GetAddonsPath(clusterName, addonName)) + req.Method = helper.String("GET") + req.ClusterName = &clusterName + req.Path = helper.String(service.GetAddonsPath(clusterName, addonName)) return nil } @@ -170,27 +169,29 @@ func resourceTencentCloudKubernetesAddonAttachmentReadPostHandleResponse0(ctx co return nil } func resourceTencentCloudKubernetesAddonAttachmentUpdatePostFillRequest0(ctx context.Context, req *tke.ForwardApplicationRequestV3Request) error { + + return nil +} + +func resourceTencentCloudKubernetesAddonAttachmentUpdateOnExit(ctx context.Context) error { d := tccommon.ResourceDataFromContext(ctx) meta := tccommon.ProviderMetaFromContext(ctx) - idSplit := strings.Split(d.Id(), tccommon.FILED_SP) - if len(idSplit) != 2 { - return fmt.Errorf("id is broken,%s", d.Id()) - } + service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( + id = d.Id() + split = strings.Split(id, tccommon.FILED_SP) + clusterId = split[0] + addonName = split[1] version = d.Get("version").(string) values = d.Get("values").([]interface{}) reqBody = d.Get("request_body").(string) + err error rawValues *string rawValuesType *string - err error ) - service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - - clusterName := idSplit[0] - addonName := idSplit[1] - if d.HasChange("version") || d.HasChange("values") || d.HasChange("raw_values") || d.HasChange("raw_values_type") { + if d.HasChange("request_body") && reqBody == "" || d.HasChange("version") || d.HasChange("values") || d.HasChange("raw_values") || d.HasChange("raw_values_type") { if v, ok := d.GetOk("raw_values"); ok { rawValues = helper.String(v.(string)) } @@ -199,16 +200,19 @@ func resourceTencentCloudKubernetesAddonAttachmentUpdatePostFillRequest0(ctx con } reqBody, err = service.GetAddonReqBody(addonName, version, helper.InterfacesStringsPoint(values), rawValues, rawValuesType) } + + if err != nil { + return err + } + + err = service.UpdateExtensionAddon(ctx, clusterId, addonName, reqBody) + if err != nil { return err } - req.Method = helper.String("PATCH") - req.ContentType = helper.String("application/strategic-merge-patch+json") - req.ClusterName = helper.String(clusterName) - req.Path = helper.String(service.GetAddonsPath(clusterName, addonName)) - req.RequestBody = &reqBody return nil } + func resourceTencentCloudKubernetesAddonAttachmentDeletePostFillRequest0(ctx context.Context, req *tke.ForwardApplicationRequestV3Request) error { d := tccommon.ResourceDataFromContext(ctx) @@ -217,10 +221,9 @@ func resourceTencentCloudKubernetesAddonAttachmentDeletePostFillRequest0(ctx con addonName := d.Get("name").(string) service := TkeService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - request := tke.NewForwardApplicationRequestV3Request() - request.Method = helper.String("DELETE") - request.ClusterName = &clusterName - request.Path = helper.String(service.GetAddonsPath(clusterName, addonName)) + req.Method = helper.String("DELETE") + req.ClusterName = &clusterName + req.Path = helper.String(service.GetAddonsPath(clusterName, addonName)) return nil } func resourceTencentCloudKubernetesAddonAttachmentDeletePostHandleResponse0(ctx context.Context, resp *tke.ForwardApplicationRequestV3Response) error { diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_test.go index 29f075ad99..0deeb31228 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_test.go @@ -74,6 +74,33 @@ func TestAccTencentCloudKubernetesAddonAttachmentResource(t *testing.T) { }) } +func TestAccTencentCloudKubernetesAddonAttachmentResource_update(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccTkeAddonAttachmentCos_basic(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_addon_attachment.cos", "response_body"), + resource.TestCheckResourceAttr("tencentcloud_kubernetes_addon_attachment.cos", "name", "cos"), + resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_addon_attachment.cos", "version"), + resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_addon_attachment.cos", "request_body"), + resource.TestCheckResourceAttr("tencentcloud_kubernetes_addon_attachment.cos", "version", "1.0.2"), + ), + }, + { + Config: testAccTkeAddonAttachmentCos_update(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_addon_attachment.cos", "response_body"), + resource.TestCheckResourceAttr("tencentcloud_kubernetes_addon_attachment.cos", "name", "cos"), + resource.TestCheckResourceAttr("tencentcloud_kubernetes_addon_attachment.cos", "version", "1.0.3"), + ), + }, + }, + }) +} func testAccTkeAddonAttachment() string { return fmt.Sprintf(` %s @@ -84,3 +111,40 @@ resource "tencentcloud_kubernetes_addon_attachment" "cos" { } `, tcacctest.TkeDataSource, DefaultAddonName) } + +func testAccTkeAddonAttachmentCos_basic() string { + return fmt.Sprintf(` +%s + +resource "tencentcloud_kubernetes_addon_attachment" "cos" { + cluster_id = local.cluster_id + name = "%s" + request_body = jsonencode({ + kind = "App" + spec = { + chart = { + chartName = "cos" + chartVersion = "1.0.2" + } + values = { + values = [] + rawValues = "e30=" + rawValuesType = "json" + } + } + }) +} +`, tcacctest.TkeDataSource, DefaultAddonName) +} + +func testAccTkeAddonAttachmentCos_update() string { + return fmt.Sprintf(` +%s + +resource "tencentcloud_kubernetes_addon_attachment" "cos" { + cluster_id = local.cluster_id + name = "%s" + version = "1.0.3" +} +`, tcacctest.TkeDataSource, DefaultAddonName) +} From f4778fb85fd41f73c8744e8741fb8750bef34587 Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Mon, 8 Apr 2024 18:05:08 +0800 Subject: [PATCH 09/15] feat(tke): generate auth attach --- .../resource_tc_kubernetes_addon_attachment_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_test.go index 0deeb31228..f5637bb83f 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_test.go @@ -74,14 +74,14 @@ func TestAccTencentCloudKubernetesAddonAttachmentResource(t *testing.T) { }) } -func TestAccTencentCloudKubernetesAddonAttachmentResource_update(t *testing.T) { +func TestAccTencentCloudKubernetesAddonAttachmentResourceUpdate(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { tcacctest.AccPreCheck(t) }, Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - Config: testAccTkeAddonAttachmentCos_basic(), + Config: testAccTkeAddonAttachmentBasic(), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_addon_attachment.cos", "response_body"), resource.TestCheckResourceAttr("tencentcloud_kubernetes_addon_attachment.cos", "name", "cos"), @@ -91,7 +91,7 @@ func TestAccTencentCloudKubernetesAddonAttachmentResource_update(t *testing.T) { ), }, { - Config: testAccTkeAddonAttachmentCos_update(), + Config: testAccTkeAddonAttachmentUpdate(), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_addon_attachment.cos", "response_body"), resource.TestCheckResourceAttr("tencentcloud_kubernetes_addon_attachment.cos", "name", "cos"), @@ -112,7 +112,7 @@ resource "tencentcloud_kubernetes_addon_attachment" "cos" { `, tcacctest.TkeDataSource, DefaultAddonName) } -func testAccTkeAddonAttachmentCos_basic() string { +func testAccTkeAddonAttachmentBasic() string { return fmt.Sprintf(` %s @@ -137,7 +137,7 @@ resource "tencentcloud_kubernetes_addon_attachment" "cos" { `, tcacctest.TkeDataSource, DefaultAddonName) } -func testAccTkeAddonAttachmentCos_update() string { +func testAccTkeAddonAttachmentUpdate() string { return fmt.Sprintf(` %s From 19eec997abf4173d295a9dd198e1dd3ef8797710 Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Tue, 9 Apr 2024 16:41:07 +0800 Subject: [PATCH 10/15] feat: generate --- ...tc_kubernetes_auth_attachment_extension.go | 14 ---- ...urce_tc_kubernetes_auth_attachment_test.go | 68 +++++++++++-------- .../resource_tc_kubernetes_scale_worker.go | 2 +- 3 files changed, 42 insertions(+), 42 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go index c5db198554..d6907a8039 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go @@ -3,7 +3,6 @@ package tke import ( "context" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" tke "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke/v20180525" tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" @@ -38,19 +37,6 @@ func resourceTencentCloudKubernetesAuthAttachmentReadRequestOnSuccess0(ctx conte return nil } -func resourceTencentCloudKubernetesAuthAttachmentReadPostRequest0(ctx context.Context, d *schema.ResourceData, meta interface{}, resp *tke.DescribeClusterAuthenticationOptionsResponseParams) error { - if resp != nil && resp.ServiceAccounts != nil { - if v, ok := d.GetOk("use_tke_default"); ok && v.(bool) { - if resp.ServiceAccounts.Issuer != nil { - _ = d.Set("tke_default_issuer", resp.ServiceAccounts.Issuer) - } - if resp.ServiceAccounts.JWKSURI != nil { - _ = d.Set("tke_default_jwks_uri", resp.ServiceAccounts.JWKSURI) - } - } - } - return nil -} func resourceTencentCloudKubernetesAuthAttachmentUpdatePreRequest0(ctx context.Context, req *tke.ModifyClusterAuthenticationOptionsRequest) *resource.RetryError { d := tccommon.ResourceDataFromContext(ctx) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go index 4240a65717..f3139e1871 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go @@ -15,44 +15,58 @@ func TestAccTencentCloudKubernetesAuthAttachResource(t *testing.T) { Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - Config: testAccTkeAuthAttach(), + Config: testAccTkeAuthAttachDefault, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "cluster_id"), resource.TestCheckResourceAttr("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "auto_create_discovery_anonymous_auth", "true"), + resource.TestCheckResourceAttr("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "use_tke_default", "true"), + ), + }, + { + Config: testAccTkeAuthAttachNonDefault, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "cluster_id"), + resource.TestCheckResourceAttr("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "auto_create_discovery_anonymous_auth", "true"), + resource.TestCheckResourceAttr("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "jwks_uri", "https://ap-guangzhou-oidc.tke.tencentcs.com/id/7cbe7ca92eba3abc76a17de1/openid/v1/jwks"), + resource.TestCheckResourceAttr("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "issuer", "https://ap-guangzhou-oidc.tke.tencentcs.com/id/7cbe7ca92eba3abc76a17de1"), + ), + }, + { + Config: testAccTkeAuthAttachOidcUpdateOidc, + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "cluster_id"), + resource.TestCheckResourceAttr("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "auto_create_discovery_anonymous_auth", "true"), + resource.TestCheckResourceAttr("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "use_tke_default", "true"), + resource.TestCheckResourceAttr("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "auto_create_oidc_config", "true"), + resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "auto_create_client_id"), + resource.TestCheckResourceAttr("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "auto_install_pod_identity_webhook_addon", "true"), ), }, }, }) } -func testAccTkeAuthAttach() string { - return tcacctest.TkeCIDRs + ` -variable "availability_zone" { - default = "ap-guangzhou-3" -} - -data "tencentcloud_vpc_subnets" "vpc" { - is_default = true - availability_zone = var.availability_zone -} - -resource "tencentcloud_kubernetes_cluster" "managed_cluster" { - vpc_id = data.tencentcloud_vpc_subnets.vpc.instance_list.0.vpc_id - cluster_cidr = "10.31.5.0/24" - cluster_max_pod_num = 32 - cluster_name = "for-auth-attachment" - cluster_desc = "test cluster desc" - cluster_version = "1.20.6" - cluster_max_service_num = 32 - cluster_os = "tlinux2.2(tkernel3)x86_64" +const testAccTkeAuthAttachDefault = ` +resource "tencentcloud_kubernetes_auth_attachment" "test_auth_attach" { + cluster_id = "cls-r8gqwjw6" + auto_create_discovery_anonymous_auth = true + use_tke_default = true +}` - cluster_deploy_type = "MANAGED_CLUSTER" -} +const testAccTkeAuthAttachNonDefault = ` +resource "tencentcloud_kubernetes_auth_attachment" "test_auth_attach" { + cluster_id = "cls-r8gqwjw6" + auto_create_discovery_anonymous_auth = true + jwks_uri = "https://ap-guangzhou-oidc.tke.tencentcs.com/id/7cbe7ca92eba3abc76a17de1/openid/v1/jwks" + issuer = "https://ap-guangzhou-oidc.tke.tencentcs.com/id/7cbe7ca92eba3abc76a17de1" +}` +const testAccTkeAuthAttachOidcUpdateOidc = ` resource "tencentcloud_kubernetes_auth_attachment" "test_auth_attach" { - cluster_id = tencentcloud_kubernetes_cluster.managed_cluster.id + cluster_id = "cls-r8gqwjw6" auto_create_discovery_anonymous_auth = true use_tke_default = true -} -` -} + auto_create_oidc_config = true + auto_create_client_id = ["xxx"] + auto_install_pod_identity_webhook_addon=true +}` diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_scale_worker.go b/tencentcloud/services/tke/resource_tc_kubernetes_scale_worker.go index 91a4200c9c..9727fb248a 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_scale_worker.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_scale_worker.go @@ -254,7 +254,7 @@ func resourceTencentCloudTkeScaleWorkerCreate(d *schema.ResourceData, meta inter d.SetId(id) //wait for LANIP - time.Sleep(tccommon.ReadRetryTimeout) + time.Sleep(3 * time.Minute) return resourceTencentCloudTkeScaleWorkerRead(d, meta) } From 6438a662f3d802849a5d68e3dbd04604815dd183 Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Tue, 9 Apr 2024 17:51:43 +0800 Subject: [PATCH 11/15] feat(tke): generate auth attach --- .../services/tke/resource_tc_kubernetes_auth_attachment.go | 4 ++-- .../tke/resource_tc_kubernetes_auth_attachment_extension.go | 3 +++ .../tke/resource_tc_kubernetes_auth_attachment_test.go | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go index 854d03235c..dfa5f7045b 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment.go @@ -229,7 +229,7 @@ func resourceTencentCloudKubernetesAuthAttachmentRead(d *schema.ResourceData, me } if respData.ServiceAccounts.JWKSURI != nil { - _ = d.Set("jwksuri", respData.ServiceAccounts.JWKSURI) + _ = d.Set("jwks_uri", respData.ServiceAccounts.JWKSURI) } if respData.ServiceAccounts.AutoCreateDiscoveryAnonymousAuth != nil { @@ -293,7 +293,7 @@ func resourceTencentCloudKubernetesAuthAttachmentUpdate(d *schema.ResourceData, if v, ok := d.GetOk("issuer"); ok { serviceAccountAuthenticationOptions.Issuer = helper.String(v.(string)) } - if v, ok := d.GetOk("jwksuri"); ok { + if v, ok := d.GetOk("jwks_uri"); ok { serviceAccountAuthenticationOptions.JWKSURI = helper.String(v.(string)) } if v, ok := d.GetOkExists("auto_create_discovery_anonymous_auth"); ok { diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go index d6907a8039..89f6ec9385 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_extension.go @@ -30,7 +30,10 @@ func resourceTencentCloudKubernetesAuthAttachmentReadRequestOnSuccess0(ctx conte if v, ok := d.GetOk("use_tke_default"); ok && v.(bool) { resp.ServiceAccounts.Issuer = tmpRespServiceAccount.Issuer resp.ServiceAccounts.JWKSURI = tmpRespServiceAccount.JWKSURI + _ = d.Set("tke_default_issuer", resp.ServiceAccounts.Issuer) + _ = d.Set("tke_default_jwks_uri", resp.ServiceAccounts.JWKSURI) } + resp.ServiceAccounts.UseTKEDefault = tmpRespServiceAccount.UseTKEDefault resp.ServiceAccounts.AutoCreateDiscoveryAnonymousAuth = tmpRespServiceAccount.AutoCreateDiscoveryAnonymousAuth } diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go index f3139e1871..f7129c32d8 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go @@ -38,7 +38,7 @@ func TestAccTencentCloudKubernetesAuthAttachResource(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "auto_create_discovery_anonymous_auth", "true"), resource.TestCheckResourceAttr("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "use_tke_default", "true"), resource.TestCheckResourceAttr("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "auto_create_oidc_config", "true"), - resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "auto_create_client_id"), + resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "auto_create_client_id.#"), resource.TestCheckResourceAttr("tencentcloud_kubernetes_auth_attachment.test_auth_attach", "auto_install_pod_identity_webhook_addon", "true"), ), }, From 59f5580cd5b66e6dd7d45b1525939f6d8034f13f Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Tue, 9 Apr 2024 18:01:30 +0800 Subject: [PATCH 12/15] feat(tke): generate auth attach --- .../resource_tc_kubernetes_auth_attachment_test.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go index f7129c32d8..9310d5a8cb 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_auth_attachment_test.go @@ -46,24 +46,25 @@ func TestAccTencentCloudKubernetesAuthAttachResource(t *testing.T) { }) } -const testAccTkeAuthAttachDefault = ` +const testAccTkeAuthAttachDefault = tcacctest.TkeDataSource + ` + resource "tencentcloud_kubernetes_auth_attachment" "test_auth_attach" { - cluster_id = "cls-r8gqwjw6" + cluster_id = local.cluster_id auto_create_discovery_anonymous_auth = true use_tke_default = true }` -const testAccTkeAuthAttachNonDefault = ` +const testAccTkeAuthAttachNonDefault = tcacctest.TkeDataSource + ` resource "tencentcloud_kubernetes_auth_attachment" "test_auth_attach" { - cluster_id = "cls-r8gqwjw6" + cluster_id = local.cluster_id auto_create_discovery_anonymous_auth = true jwks_uri = "https://ap-guangzhou-oidc.tke.tencentcs.com/id/7cbe7ca92eba3abc76a17de1/openid/v1/jwks" issuer = "https://ap-guangzhou-oidc.tke.tencentcs.com/id/7cbe7ca92eba3abc76a17de1" }` -const testAccTkeAuthAttachOidcUpdateOidc = ` +const testAccTkeAuthAttachOidcUpdateOidc = tcacctest.TkeDataSource + ` resource "tencentcloud_kubernetes_auth_attachment" "test_auth_attach" { - cluster_id = "cls-r8gqwjw6" + cluster_id = local.cluster_id auto_create_discovery_anonymous_auth = true use_tke_default = true auto_create_oidc_config = true From 0c6bf17f4a7034a819dbe3f3b744c79342643bd8 Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Tue, 9 Apr 2024 18:05:50 +0800 Subject: [PATCH 13/15] feat --- .../services/tke/resource_tc_kubernetes_scale_worker.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_scale_worker.go b/tencentcloud/services/tke/resource_tc_kubernetes_scale_worker.go index 9727fb248a..91a4200c9c 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_scale_worker.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_scale_worker.go @@ -254,7 +254,7 @@ func resourceTencentCloudTkeScaleWorkerCreate(d *schema.ResourceData, meta inter d.SetId(id) //wait for LANIP - time.Sleep(3 * time.Minute) + time.Sleep(tccommon.ReadRetryTimeout) return resourceTencentCloudTkeScaleWorkerRead(d, meta) } From aa0de9bb0a2650820765af0e9a08b4f53c74082d Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Tue, 9 Apr 2024 18:53:51 +0800 Subject: [PATCH 14/15] feat --- ...rce_tc_kubernetes_addon_attachment_test.go | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_test.go b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_test.go index f5637bb83f..9bc5d1be43 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_test.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_test.go @@ -57,24 +57,6 @@ func init() { } func TestAccTencentCloudKubernetesAddonAttachmentResource(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { tcacctest.AccPreCheck(t) }, - Providers: tcacctest.AccProviders, - Steps: []resource.TestStep{ - { - Config: testAccTkeAddonAttachment(), - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_addon_attachment.cos", "response_body"), - resource.TestCheckResourceAttr("tencentcloud_kubernetes_addon_attachment.cos", "name", "cos"), - resource.TestCheckResourceAttrSet("tencentcloud_kubernetes_addon_attachment.cos", "version"), - ), - }, - }, - }) -} - -func TestAccTencentCloudKubernetesAddonAttachmentResourceUpdate(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { tcacctest.AccPreCheck(t) }, @@ -101,17 +83,6 @@ func TestAccTencentCloudKubernetesAddonAttachmentResourceUpdate(t *testing.T) { }, }) } -func testAccTkeAddonAttachment() string { - return fmt.Sprintf(` -%s - -resource "tencentcloud_kubernetes_addon_attachment" "cos" { - cluster_id = local.cluster_id - name = "%s" -} -`, tcacctest.TkeDataSource, DefaultAddonName) -} - func testAccTkeAddonAttachmentBasic() string { return fmt.Sprintf(` %s From 4f4fb547b938799cd7234d30ca6973ae6fd50d63 Mon Sep 17 00:00:00 2001 From: Wmxs <54929266+WeiMengXS@users.noreply.github.com> Date: Tue, 9 Apr 2024 20:15:20 +0800 Subject: [PATCH 15/15] feat --- .../tke/resource_tc_kubernetes_addon_attachment_extension.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go index bb06bdd53b..2b6ac19d5c 100644 --- a/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go +++ b/tencentcloud/services/tke/resource_tc_kubernetes_addon_attachment_extension.go @@ -168,10 +168,6 @@ func resourceTencentCloudKubernetesAddonAttachmentReadPostHandleResponse0(ctx co } return nil } -func resourceTencentCloudKubernetesAddonAttachmentUpdatePostFillRequest0(ctx context.Context, req *tke.ForwardApplicationRequestV3Request) error { - - return nil -} func resourceTencentCloudKubernetesAddonAttachmentUpdateOnExit(ctx context.Context) error { d := tccommon.ResourceDataFromContext(ctx)