From 6c75a8fc1f8718c06e97e515ded6507800fbb0bb Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Tue, 19 Dec 2023 16:42:03 +0800 Subject: [PATCH 01/31] refactor: migrate package tencentcloud/services/cam --- tencentcloud/acctest/test_util.go | 45 + tencentcloud/provider.go | 80 +- .../data_source_tc_cam_account_summary.go | 23 +- ...data_source_tc_cam_account_summary_test.go | 10 +- .../data_source_tc_cam_group_memberships.go | 21 +- ...ta_source_tc_cam_group_memberships_test.go | 10 +- ..._source_tc_cam_group_policy_attachments.go | 23 +- ...ce_tc_cam_group_policy_attachments_test.go | 10 +- .../data_source_tc_cam_group_user_account.go | 23 +- ...a_source_tc_cam_group_user_account_test.go | 10 +- .../cam}/data_source_tc_cam_groups.go | 21 +- .../cam}/data_source_tc_cam_groups_test.go | 10 +- ..._source_tc_cam_list_entities_for_policy.go | 23 +- ...ce_tc_cam_list_entities_for_policy_test.go | 10 +- .../cam}/data_source_tc_cam_oidc_config.go | 21 +- .../data_source_tc_cam_oidc_config_test.go | 10 +- .../cam}/data_source_tc_cam_policies.go | 25 +- .../cam}/data_source_tc_cam_policies_test.go | 10 +- ...e_tc_cam_policy_granting_service_access.go | 25 +- ...cam_policy_granting_service_access_test.go | 10 +- ...a_source_tc_cam_role_policy_attachments.go | 25 +- ...rce_tc_cam_role_policy_attachments_test.go | 10 +- .../cam}/data_source_tc_cam_roles.go | 21 +- .../cam}/data_source_tc_cam_roles_test.go | 10 +- .../cam}/data_source_tc_cam_saml_providers.go | 21 +- .../data_source_tc_cam_saml_providers_test.go | 8 +- ...ata_source_tc_cam_secret_last_used_time.go | 23 +- ...ource_tc_cam_secret_last_used_time_test.go | 10 +- ...a_source_tc_cam_user_policy_attachments.go | 25 +- ...rce_tc_cam_user_policy_attachments_test.go | 10 +- .../cam}/data_source_tc_cam_users.go | 21 +- .../cam}/data_source_tc_cam_users_test.go | 10 +- .../cam}/data_source_tc_user_info.go | 21 +- .../cam}/data_source_tc_user_info_test.go | 12 +- tencentcloud/services/cam/extension_cam.go | 26 + tencentcloud/services/cam/extension_tags.go | 3 + tencentcloud/services/cam/pkgkey.go | 193 ++ .../cam}/resource_tc_cam_access_key.go | 59 +- .../cam}/resource_tc_cam_access_key_test.go | 8 +- .../cam}/resource_tc_cam_group.go | 59 +- .../cam}/resource_tc_cam_group_membership.go | 66 +- .../resource_tc_cam_group_membership_test.go | 30 +- ...resource_tc_cam_group_policy_attachment.go | 48 +- ...rce_tc_cam_group_policy_attachment_test.go | 28 +- .../cam}/resource_tc_cam_group_test.go | 39 +- .../cam}/resource_tc_cam_mfa_flag.go | 37 +- .../cam}/resource_tc_cam_mfa_flag_test.go | 8 +- .../cam}/resource_tc_cam_oidc_sso.go | 47 +- .../cam}/resource_tc_cam_oidc_sso_test.go | 23 +- .../cam}/resource_tc_cam_policy.go | 61 +- .../cam}/resource_tc_cam_policy_by_name.go | 73 +- .../resource_tc_cam_policy_by_name_test.go | 26 +- .../cam}/resource_tc_cam_policy_test.go | 37 +- .../cam}/resource_tc_cam_policy_version.go | 49 +- .../resource_tc_cam_policy_version_test.go | 8 +- .../cam}/resource_tc_cam_role.go | 87 +- .../cam}/resource_tc_cam_role_by_name.go | 87 +- .../cam}/resource_tc_cam_role_by_name_test.go | 30 +- ...cam_role_permission_boundary_attachment.go | 45 +- ...ole_permission_boundary_attachment_test.go | 8 +- .../resource_tc_cam_role_policy_attachment.go | 50 +- ...e_tc_cam_role_policy_attachment_by_name.go | 51 +- ...cam_role_policy_attachment_by_name_test.go | 30 +- ...urce_tc_cam_role_policy_attachment_test.go | 30 +- .../cam}/resource_tc_cam_role_sso.go | 47 +- .../cam}/resource_tc_cam_role_sso_test.go | 24 +- .../cam}/resource_tc_cam_role_test.go | 40 +- .../cam}/resource_tc_cam_saml_provider.go | 59 +- .../resource_tc_cam_saml_provider_test.go | 31 +- .../resource_tc_cam_service_linked_role.go | 65 +- ...esource_tc_cam_service_linked_role_test.go | 26 +- ...source_tc_cam_set_policy_version_config.go | 41 +- ...e_tc_cam_set_policy_version_config_test.go | 8 +- .../resource_tc_cam_tag_role_attachment.go | 45 +- ...esource_tc_cam_tag_role_attachment_test.go | 8 +- .../cam}/resource_tc_cam_user.go | 85 +- ...cam_user_permission_boundary_attachment.go | 45 +- ...ser_permission_boundary_attachment_test.go | 8 +- .../resource_tc_cam_user_policy_attachment.go | 48 +- ...urce_tc_cam_user_policy_attachment_test.go | 30 +- .../cam}/resource_tc_cam_user_saml_config.go | 69 +- .../resource_tc_cam_user_saml_config_test.go | 8 +- .../cam}/resource_tc_cam_user_test.go | 47 +- .../services/cam/service_tencentcloud_cam.go | 1973 +++++++++++++++++ .../services/cam/service_tencentcloud_tag.go | 415 ++++ 85 files changed, 3972 insertions(+), 1143 deletions(-) rename tencentcloud/{ => services/cam}/data_source_tc_cam_account_summary.go (79%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_account_summary_test.go (59%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_group_memberships.go (81%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_group_memberships_test.go (82%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_group_policy_attachments.go (86%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_group_policy_attachments_test.go (86%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_group_user_account.go (83%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_group_user_account_test.go (65%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_groups.go (84%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_groups_test.go (77%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_list_entities_for_policy.go (86%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_list_entities_for_policy_test.go (70%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_oidc_config.go (83%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_oidc_config_test.go (67%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_policies.go (86%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_policies_test.go (81%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_policy_granting_service_access.go (89%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_policy_granting_service_access_test.go (62%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_role_policy_attachments.go (85%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_role_policy_attachments_test.go (86%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_roles.go (86%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_roles_test.go (82%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_saml_providers.go (83%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_saml_providers_test.go (95%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_secret_last_used_time.go (81%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_secret_last_used_time_test.go (61%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_user_policy_attachments.go (87%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_user_policy_attachments_test.go (81%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_users.go (89%) rename tencentcloud/{ => services/cam}/data_source_tc_cam_users_test.go (84%) rename tencentcloud/{ => services/cam}/data_source_tc_user_info.go (83%) rename tencentcloud/{ => services/cam}/data_source_tc_user_info_test.go (79%) create mode 100644 tencentcloud/services/cam/extension_cam.go create mode 100644 tencentcloud/services/cam/extension_tags.go create mode 100644 tencentcloud/services/cam/pkgkey.go rename tencentcloud/{ => services/cam}/resource_tc_cam_access_key.go (78%) rename tencentcloud/{ => services/cam}/resource_tc_cam_access_key_test.go (91%) rename tencentcloud/{ => services/cam}/resource_tc_cam_group.go (74%) rename tencentcloud/{ => services/cam}/resource_tc_cam_group_membership.go (80%) rename tencentcloud/{ => services/cam}/resource_tc_cam_group_membership_test.go (82%) rename tencentcloud/{ => services/cam}/resource_tc_cam_group_policy_attachment.go (74%) rename tencentcloud/{ => services/cam}/resource_tc_cam_group_policy_attachment_test.go (74%) rename tencentcloud/{ => services/cam}/resource_tc_cam_group_test.go (76%) rename tencentcloud/{ => services/cam}/resource_tc_cam_mfa_flag.go (82%) rename tencentcloud/{ => services/cam}/resource_tc_cam_mfa_flag_test.go (94%) rename tencentcloud/{ => services/cam}/resource_tc_cam_oidc_sso.go (81%) rename tencentcloud/{ => services/cam}/resource_tc_cam_oidc_sso_test.go (97%) rename tencentcloud/{ => services/cam}/resource_tc_cam_policy.go (79%) rename tencentcloud/{ => services/cam}/resource_tc_cam_policy_by_name.go (77%) rename tencentcloud/{ => services/cam}/resource_tc_cam_policy_by_name_test.go (80%) rename tencentcloud/{ => services/cam}/resource_tc_cam_policy_test.go (79%) rename tencentcloud/{ => services/cam}/resource_tc_cam_policy_version.go (78%) rename tencentcloud/{ => services/cam}/resource_tc_cam_policy_version_test.go (91%) rename tencentcloud/{ => services/cam}/resource_tc_cam_role.go (77%) rename tencentcloud/{ => services/cam}/resource_tc_cam_role_by_name.go (76%) rename tencentcloud/{ => services/cam}/resource_tc_cam_role_by_name_test.go (77%) rename tencentcloud/{ => services/cam}/resource_tc_cam_role_permission_boundary_attachment.go (72%) rename tencentcloud/{ => services/cam}/resource_tc_cam_role_permission_boundary_attachment_test.go (87%) rename tencentcloud/{ => services/cam}/resource_tc_cam_role_policy_attachment.go (74%) rename tencentcloud/{ => services/cam}/resource_tc_cam_role_policy_attachment_by_name.go (75%) rename tencentcloud/{ => services/cam}/resource_tc_cam_role_policy_attachment_by_name_test.go (77%) rename tencentcloud/{ => services/cam}/resource_tc_cam_role_policy_attachment_test.go (75%) rename tencentcloud/{ => services/cam}/resource_tc_cam_role_sso.go (75%) rename tencentcloud/{ => services/cam}/resource_tc_cam_role_sso_test.go (97%) rename tencentcloud/{ => services/cam}/resource_tc_cam_role_test.go (75%) rename tencentcloud/{ => services/cam}/resource_tc_cam_saml_provider.go (76%) rename tencentcloud/{ => services/cam}/resource_tc_cam_saml_provider_test.go (91%) rename tencentcloud/{ => services/cam}/resource_tc_cam_service_linked_role.go (76%) rename tencentcloud/{ => services/cam}/resource_tc_cam_service_linked_role_test.go (83%) rename tencentcloud/{ => services/cam}/resource_tc_cam_set_policy_version_config.go (69%) rename tencentcloud/{ => services/cam}/resource_tc_cam_set_policy_version_config_test.go (90%) rename tencentcloud/{ => services/cam}/resource_tc_cam_tag_role_attachment.go (76%) rename tencentcloud/{ => services/cam}/resource_tc_cam_tag_role_attachment_test.go (84%) rename tencentcloud/{ => services/cam}/resource_tc_cam_user.go (80%) rename tencentcloud/{ => services/cam}/resource_tc_cam_user_permission_boundary_attachment.go (67%) rename tencentcloud/{ => services/cam}/resource_tc_cam_user_permission_boundary_attachment_test.go (87%) rename tencentcloud/{ => services/cam}/resource_tc_cam_user_policy_attachment.go (77%) rename tencentcloud/{ => services/cam}/resource_tc_cam_user_policy_attachment_test.go (75%) rename tencentcloud/{ => services/cam}/resource_tc_cam_user_saml_config.go (66%) rename tencentcloud/{ => services/cam}/resource_tc_cam_user_saml_config_test.go (80%) rename tencentcloud/{ => services/cam}/resource_tc_cam_user_test.go (87%) create mode 100644 tencentcloud/services/cam/service_tencentcloud_cam.go create mode 100644 tencentcloud/services/cam/service_tencentcloud_tag.go diff --git a/tencentcloud/acctest/test_util.go b/tencentcloud/acctest/test_util.go index 2215e140bb..b0a75821d5 100644 --- a/tencentcloud/acctest/test_util.go +++ b/tencentcloud/acctest/test_util.go @@ -9,8 +9,10 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" tcprovider "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud" + providercommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" ) @@ -206,3 +208,46 @@ func AccPreCheckBusiness(t *testing.T, accountType string) { AccPreCheck(t) } } + +type TencentCloudClient struct { + apiV3Conn *connectivity.TencentCloudClient +} + +var _ providercommon.ProviderMeta = &TencentCloudClient{} + +// GetAPIV3Conn 返回访问云 API 的客户端连接对象 +func (meta *TencentCloudClient) GetAPIV3Conn() *connectivity.TencentCloudClient { + return meta.apiV3Conn +} + +func SharedClientForRegion(region string) (interface{}, error) { + var secretId string + if secretId = os.Getenv(tcprovider.PROVIDER_SECRET_ID); secretId == "" { + return nil, fmt.Errorf("%s can not be empty", tcprovider.PROVIDER_SECRET_ID) + } + + var secretKey string + if secretKey = os.Getenv(tcprovider.PROVIDER_SECRET_KEY); secretKey == "" { + return nil, fmt.Errorf("%s can not be empty", tcprovider.PROVIDER_SECRET_KEY) + } + + securityToken := os.Getenv(tcprovider.PROVIDER_SECURITY_TOKEN) + protocol := os.Getenv(tcprovider.PROVIDER_PROTOCOL) + domain := os.Getenv(tcprovider.PROVIDER_DOMAIN) + + client := &connectivity.TencentCloudClient{ + Credential: common.NewTokenCredential( + secretId, + secretKey, + securityToken, + ), + Region: region, + Protocol: protocol, + Domain: domain, + } + + var tcClient TencentCloudClient + tcClient.apiV3Conn = client + + return &tcClient, nil +} diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 5d2f7e92b7..24643052e6 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -10,6 +10,8 @@ import ( "strconv" "strings" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mitchellh/go-homedir" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" @@ -408,19 +410,19 @@ func Provider() *schema.Provider { "tencentcloud_ssl_describe_managers": dataSourceTencentCloudSslDescribeManagers(), "tencentcloud_ssl_describe_host_deploy_record": dataSourceTencentCloudSslDescribeHostDeployRecord(), "tencentcloud_ssl_describe_host_deploy_record_detail": dataSourceTencentCloudSslDescribeHostDeployRecordDetail(), - "tencentcloud_cam_roles": dataSourceTencentCloudCamRoles(), - "tencentcloud_cam_users": dataSourceTencentCloudCamUsers(), - "tencentcloud_cam_groups": dataSourceTencentCloudCamGroups(), - "tencentcloud_cam_group_memberships": dataSourceTencentCloudCamGroupMemberships(), - "tencentcloud_cam_policies": dataSourceTencentCloudCamPolicies(), - "tencentcloud_cam_role_policy_attachments": dataSourceTencentCloudCamRolePolicyAttachments(), - "tencentcloud_cam_user_policy_attachments": dataSourceTencentCloudCamUserPolicyAttachments(), - "tencentcloud_cam_group_policy_attachments": dataSourceTencentCloudCamGroupPolicyAttachments(), - "tencentcloud_cam_saml_providers": dataSourceTencentCloudCamSAMLProviders(), - "tencentcloud_cam_list_entities_for_policy": dataSourceTencentCloudCamListEntitiesForPolicy(), - "tencentcloud_cam_account_summary": dataSourceTencentCloudCamAccountSummary(), - "tencentcloud_cam_oidc_config": dataSourceTencentCloudCamOidcConfig(), - "tencentcloud_user_info": datasourceTencentCloudUserInfo(), + "tencentcloud_cam_roles": cam.DataSourceTencentCloudCamRoles(), + "tencentcloud_cam_users": cam.DataSourceTencentCloudCamUsers(), + "tencentcloud_cam_groups": cam.DataSourceTencentCloudCamGroups(), + "tencentcloud_cam_group_memberships": cam.DataSourceTencentCloudCamGroupMemberships(), + "tencentcloud_cam_policies": cam.DataSourceTencentCloudCamPolicies(), + "tencentcloud_cam_role_policy_attachments": cam.DataSourceTencentCloudCamRolePolicyAttachments(), + "tencentcloud_cam_user_policy_attachments": cam.DataSourceTencentCloudCamUserPolicyAttachments(), + "tencentcloud_cam_group_policy_attachments": cam.DataSourceTencentCloudCamGroupPolicyAttachments(), + "tencentcloud_cam_saml_providers": cam.DataSourceTencentCloudCamSAMLProviders(), + "tencentcloud_cam_list_entities_for_policy": cam.DataSourceTencentCloudCamListEntitiesForPolicy(), + "tencentcloud_cam_account_summary": cam.DataSourceTencentCloudCamAccountSummary(), + "tencentcloud_cam_oidc_config": cam.DataSourceTencentCloudCamOidcConfig(), + "tencentcloud_user_info": cam.DataSourceTencentCloudUserInfo(), "tencentcloud_cdn_domains": dataSourceTencentCloudCdnDomains(), "tencentcloud_cdn_domain_verifier": dataSourceTencentCloudCdnDomainVerifyRecord(), "tencentcloud_scf_functions": dataSourceTencentCloudScfFunctions(), @@ -863,9 +865,9 @@ func Provider() *schema.Provider { "tencentcloud_organization_members": dataSourceTencentCloudOrganizationMembers(), "tencentcloud_pts_scenario_with_jobs": dataSourceTencentCloudPtsScenarioWithJobs(), "tencentcloud_cam_list_attached_user_policy": dataSourceTencentCloudCamListAttachedUserPolicy(), - "tencentcloud_cam_secret_last_used_time": dataSourceTencentCloudCamSecretLastUsedTime(), - "tencentcloud_cam_policy_granting_service_access": dataSourceTencentCloudCamPolicyGrantingServiceAccess(), - "tencentcloud_cam_group_user_account": dataSourceTencentCloudCamGroupUserAccount(), + "tencentcloud_cam_secret_last_used_time": cam.DataSourceTencentCloudCamSecretLastUsedTime(), + "tencentcloud_cam_policy_granting_service_access": cam.DataSourceTencentCloudCamPolicyGrantingServiceAccess(), + "tencentcloud_cam_group_user_account": cam.DataSourceTencentCloudCamGroupUserAccount(), "tencentcloud_dlc_check_data_engine_image_can_be_rollback": dataSourceTencentCloudDlcCheckDataEngineImageCanBeRollback(), "tencentcloud_dlc_check_data_engine_image_can_be_upgrade": dataSourceTencentCloudDlcCheckDataEngineImageCanBeUpgrade(), "tencentcloud_dlc_describe_user_type": dataSourceTencentCloudDlcDescribeUserType(), @@ -1145,29 +1147,29 @@ func Provider() *schema.Provider { "tencentcloud_ssl_certificate": resourceTencentCloudSslCertificate(), "tencentcloud_ssl_pay_certificate": resourceTencentCloudSSLInstance(), "tencentcloud_ssl_free_certificate": resourceTencentCloudSSLFreeCertificate(), - "tencentcloud_cam_role": resourceTencentCloudCamRole(), - "tencentcloud_cam_role_by_name": resourceTencentCloudCamRoleByName(), - "tencentcloud_cam_user": resourceTencentCloudCamUser(), - "tencentcloud_cam_policy": resourceTencentCloudCamPolicy(), - "tencentcloud_cam_policy_by_name": resourceTencentCloudCamPolicyByName(), - "tencentcloud_cam_role_policy_attachment": resourceTencentCloudCamRolePolicyAttachment(), - "tencentcloud_cam_role_policy_attachment_by_name": resourceTencentCloudCamRolePolicyAttachmentByName(), - "tencentcloud_cam_user_policy_attachment": resourceTencentCloudCamUserPolicyAttachment(), - "tencentcloud_cam_group_policy_attachment": resourceTencentCloudCamGroupPolicyAttachment(), - "tencentcloud_cam_group": resourceTencentCloudCamGroup(), - "tencentcloud_cam_oidc_sso": resourceTencentCloudCamOIDCSSO(), - "tencentcloud_cam_role_sso": resourceTencentCloudCamRoleSSO(), - "tencentcloud_cam_group_membership": resourceTencentCloudCamGroupMembership(), - "tencentcloud_cam_saml_provider": resourceTencentCloudCamSAMLProvider(), - "tencentcloud_cam_service_linked_role": resourceTencentCloudCamServiceLinkedRole(), - "tencentcloud_cam_mfa_flag": resourceTencentCloudCamMfaFlag(), - "tencentcloud_cam_access_key": resourceTencentCloudCamAccessKey(), - "tencentcloud_cam_user_saml_config": resourceTencentCloudCamUserSamlConfig(), - "tencentcloud_cam_tag_role_attachment": resourceTencentCloudCamTagRoleAttachment(), - "tencentcloud_cam_policy_version": resourceTencentCloudCamPolicyVersion(), - "tencentcloud_cam_set_policy_version_config": resourceTencentCloudCamSetPolicyVersionConfig(), - "tencentcloud_cam_user_permission_boundary_attachment": resourceTencentCloudCamUserPermissionBoundaryAttachment(), - "tencentcloud_cam_role_permission_boundary_attachment": resourceTencentCloudCamRolePermissionBoundaryAttachment(), + "tencentcloud_cam_role": cam.ResourceTencentCloudCamRole(), + "tencentcloud_cam_role_by_name": cam.ResourceTencentCloudCamRoleByName(), + "tencentcloud_cam_user": cam.ResourceTencentCloudCamUser(), + "tencentcloud_cam_policy": cam.ResourceTencentCloudCamPolicy(), + "tencentcloud_cam_policy_by_name": cam.ResourceTencentCloudCamPolicyByName(), + "tencentcloud_cam_role_policy_attachment": cam.ResourceTencentCloudCamRolePolicyAttachment(), + "tencentcloud_cam_role_policy_attachment_by_name": cam.ResourceTencentCloudCamRolePolicyAttachmentByName(), + "tencentcloud_cam_user_policy_attachment": cam.ResourceTencentCloudCamUserPolicyAttachment(), + "tencentcloud_cam_group_policy_attachment": cam.ResourceTencentCloudCamGroupPolicyAttachment(), + "tencentcloud_cam_group": cam.ResourceTencentCloudCamGroup(), + "tencentcloud_cam_oidc_sso": cam.ResourceTencentCloudCamOIDCSSO(), + "tencentcloud_cam_role_sso": cam.ResourceTencentCloudCamRoleSSO(), + "tencentcloud_cam_group_membership": cam.ResourceTencentCloudCamGroupMembership(), + "tencentcloud_cam_saml_provider": cam.ResourceTencentCloudCamSAMLProvider(), + "tencentcloud_cam_service_linked_role": cam.ResourceTencentCloudCamServiceLinkedRole(), + "tencentcloud_cam_mfa_flag": cam.ResourceTencentCloudCamMfaFlag(), + "tencentcloud_cam_access_key": cam.ResourceTencentCloudCamAccessKey(), + "tencentcloud_cam_user_saml_config": cam.ResourceTencentCloudCamUserSamlConfig(), + "tencentcloud_cam_tag_role_attachment": cam.ResourceTencentCloudCamTagRoleAttachment(), + "tencentcloud_cam_policy_version": cam.ResourceTencentCloudCamPolicyVersion(), + "tencentcloud_cam_set_policy_version_config": cam.ResourceTencentCloudCamSetPolicyVersionConfig(), + "tencentcloud_cam_user_permission_boundary_attachment": cam.ResourceTencentCloudCamUserPermissionBoundaryAttachment(), + "tencentcloud_cam_role_permission_boundary_attachment": cam.ResourceTencentCloudCamRolePermissionBoundaryAttachment(), "tencentcloud_organization_quit_organization_operation": resourceTencentCloudOrganizationQuitOrganizationOperation(), "tencentcloud_ciam_user_group": resourceTencentCloudCiamUserGroup(), "tencentcloud_ciam_user_store": resourceTencentCloudCiamUserStore(), diff --git a/tencentcloud/data_source_tc_cam_account_summary.go b/tencentcloud/services/cam/data_source_tc_cam_account_summary.go similarity index 79% rename from tencentcloud/data_source_tc_cam_account_summary.go rename to tencentcloud/services/cam/data_source_tc_cam_account_summary.go index 95a3efa2d7..6e2a104ba4 100644 --- a/tencentcloud/data_source_tc_cam_account_summary.go +++ b/tencentcloud/services/cam/data_source_tc_cam_account_summary.go @@ -1,15 +1,18 @@ -package tencentcloud +package cam import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCamAccountSummary() *schema.Resource { +func DataSourceTencentCloudCamAccountSummary() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamAccountSummaryRead, Schema: map[string]*schema.Schema{ @@ -59,19 +62,19 @@ func dataSourceTencentCloudCamAccountSummary() *schema.Resource { } func dataSourceTencentCloudCamAccountSummaryRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_account_summary.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_account_summary.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} AccountData := &cam.GetAccountSummaryResponseParams{} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCamAccountSummaryByFilter(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } AccountData = result return nil @@ -113,7 +116,7 @@ func dataSourceTencentCloudCamAccountSummaryRead(d *schema.ResourceData, meta in d.SetId(helper.BuildToken()) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), template); e != nil { + if e := tccommon.WriteToFile(output.(string), template); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cam_account_summary_test.go b/tencentcloud/services/cam/data_source_tc_cam_account_summary_test.go similarity index 59% rename from tencentcloud/data_source_tc_cam_account_summary_test.go rename to tencentcloud/services/cam/data_source_tc_cam_account_summary_test.go index 3fd7873ef7..d04c2d14b8 100644 --- a/tencentcloud/data_source_tc_cam_account_summary_test.go +++ b/tencentcloud/services/cam/data_source_tc_cam_account_summary_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCamAccountSummaryDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCamAccountSummaryDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cam_account_summary.account_summary")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cam_account_summary.account_summary")), }, }, }) diff --git a/tencentcloud/data_source_tc_cam_group_memberships.go b/tencentcloud/services/cam/data_source_tc_cam_group_memberships.go similarity index 81% rename from tencentcloud/data_source_tc_cam_group_memberships.go rename to tencentcloud/services/cam/data_source_tc_cam_group_memberships.go index 5a8ede267e..c40278f64a 100644 --- a/tencentcloud/data_source_tc_cam_group_memberships.go +++ b/tencentcloud/services/cam/data_source_tc_cam_group_memberships.go @@ -1,15 +1,18 @@ -package tencentcloud +package cam import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCamGroupMemberships() *schema.Resource { +func DataSourceTencentCloudCamGroupMemberships() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamGroupMembershipsRead, @@ -60,20 +63,20 @@ func dataSourceTencentCloudCamGroupMemberships() *schema.Resource { } func dataSourceTencentCloudCamGroupMembershipsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_group_memberships.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_group_memberships.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) groupId := d.Get("group_id").(string) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var memberships []*string - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := camService.DescribeGroupMembershipById(ctx, groupId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } memberships = results return nil @@ -100,7 +103,7 @@ func dataSourceTencentCloudCamGroupMembershipsRead(d *schema.ResourceData, meta output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), groupList); e != nil { + if e := tccommon.WriteToFile(output.(string), groupList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cam_group_memberships_test.go b/tencentcloud/services/cam/data_source_tc_cam_group_memberships_test.go similarity index 82% rename from tencentcloud/data_source_tc_cam_group_memberships_test.go rename to tencentcloud/services/cam/data_source_tc_cam_group_memberships_test.go index 7942f624c0..26a487d1ce 100644 --- a/tencentcloud/data_source_tc_cam_group_memberships_test.go +++ b/tencentcloud/services/cam/data_source_tc_cam_group_memberships_test.go @@ -1,15 +1,17 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCamGroupMembershipsDataSource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamGroupMembershipDestroy, Steps: []resource.TestStep{ { @@ -25,7 +27,7 @@ func TestAccTencentCloudCamGroupMembershipsDataSource_basic(t *testing.T) { }) } -const testAccCamGroupMembershipsDataSource_basic = defaultCamVariables + ` +const testAccCamGroupMembershipsDataSource_basic = tcacctest.DefaultCamVariables + ` data "tencentcloud_cam_groups" "groups" { name = var.cam_group_basic } diff --git a/tencentcloud/data_source_tc_cam_group_policy_attachments.go b/tencentcloud/services/cam/data_source_tc_cam_group_policy_attachments.go similarity index 86% rename from tencentcloud/data_source_tc_cam_group_policy_attachments.go rename to tencentcloud/services/cam/data_source_tc_cam_group_policy_attachments.go index af8e08b8f3..090ae1eef1 100644 --- a/tencentcloud/data_source_tc_cam_group_policy_attachments.go +++ b/tencentcloud/services/cam/data_source_tc_cam_group_policy_attachments.go @@ -1,17 +1,20 @@ -package tencentcloud +package cam import ( "context" "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCamGroupPolicyAttachments() *schema.Resource { +func DataSourceTencentCloudCamGroupPolicyAttachments() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamGroupPolicyAttachmentsRead, @@ -35,7 +38,7 @@ func dataSourceTencentCloudCamGroupPolicyAttachments() *schema.Resource { "policy_type": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CAM_POLICY_CREATE_STRATEGY), + ValidateFunc: tccommon.ValidateAllowedStringValue(CAM_POLICY_CREATE_STRATEGY), Description: "Type of the policy strategy. 'User' means customer strategy and 'QCS' means preset strategy.", }, "result_output_file": { @@ -87,10 +90,10 @@ func dataSourceTencentCloudCamGroupPolicyAttachments() *schema.Resource { } func dataSourceTencentCloudCamGroupPolicyAttachmentsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_group_policy_attachments.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_group_policy_attachments.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]interface{}) groupId := d.Get("group_id").(string) @@ -110,13 +113,13 @@ func dataSourceTencentCloudCamGroupPolicyAttachmentsRead(d *schema.ResourceData, } camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var policyOfGroups []*cam.AttachPolicyInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := camService.DescribeGroupPolicyAttachmentsByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } policyOfGroups = results return nil @@ -148,7 +151,7 @@ func dataSourceTencentCloudCamGroupPolicyAttachmentsRead(d *schema.ResourceData, output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), policyOfGroupList); e != nil { + if e := tccommon.WriteToFile(output.(string), policyOfGroupList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cam_group_policy_attachments_test.go b/tencentcloud/services/cam/data_source_tc_cam_group_policy_attachments_test.go similarity index 86% rename from tencentcloud/data_source_tc_cam_group_policy_attachments_test.go rename to tencentcloud/services/cam/data_source_tc_cam_group_policy_attachments_test.go index da42a3dd12..1ddfc9189b 100644 --- a/tencentcloud/data_source_tc_cam_group_policy_attachments_test.go +++ b/tencentcloud/services/cam/data_source_tc_cam_group_policy_attachments_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCamGroupPolicyAttachmentsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamGroupPolicyAttachmentDestroy, Steps: []resource.TestStep{ { @@ -28,7 +30,7 @@ func TestAccTencentCloudCamGroupPolicyAttachmentsDataSource_basic(t *testing.T) }) } -const testAccCamGroupPolicyAttachmentsDataSource_basic = defaultCamVariables + ` +const testAccCamGroupPolicyAttachmentsDataSource_basic = tcacctest.DefaultCamVariables + ` data "tencentcloud_cam_groups" "groups" { name = var.cam_group_basic } diff --git a/tencentcloud/data_source_tc_cam_group_user_account.go b/tencentcloud/services/cam/data_source_tc_cam_group_user_account.go similarity index 83% rename from tencentcloud/data_source_tc_cam_group_user_account.go rename to tencentcloud/services/cam/data_source_tc_cam_group_user_account.go index 174c8335f5..4cac1d8e7d 100644 --- a/tencentcloud/data_source_tc_cam_group_user_account.go +++ b/tencentcloud/services/cam/data_source_tc_cam_group_user_account.go @@ -1,15 +1,18 @@ -package tencentcloud +package cam import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCamGroupUserAccount() *schema.Resource { +func DataSourceTencentCloudCamGroupUserAccount() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamGroupUserAccountRead, Schema: map[string]*schema.Schema{ @@ -77,12 +80,12 @@ func dataSourceTencentCloudCamGroupUserAccount() *schema.Resource { } func dataSourceTencentCloudCamGroupUserAccountRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_group_user_account.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_group_user_account.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOkExists("uid"); ok { @@ -97,13 +100,13 @@ func dataSourceTencentCloudCamGroupUserAccountRead(d *schema.ResourceData, meta paramMap["SubUin"] = helper.IntUint64(v.(int)) } - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var groupInfoList []*cam.GroupInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCamGroupUserAccountByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } groupInfoList = result return nil @@ -149,7 +152,7 @@ func dataSourceTencentCloudCamGroupUserAccountRead(d *schema.ResourceData, meta d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cam_group_user_account_test.go b/tencentcloud/services/cam/data_source_tc_cam_group_user_account_test.go similarity index 65% rename from tencentcloud/data_source_tc_cam_group_user_account_test.go rename to tencentcloud/services/cam/data_source_tc_cam_group_user_account_test.go index a34c0f3331..1eeeab2943 100644 --- a/tencentcloud/data_source_tc_cam_group_user_account_test.go +++ b/tencentcloud/services/cam/data_source_tc_cam_group_user_account_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCamGroupUserAccountDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCamGroupUserAccountDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cam_group_user_account.group_user_account"), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cam_group_user_account.group_user_account"), resource.TestCheckResourceAttr("data.tencentcloud_cam_group_user_account.group_user_account", "sub_uin", "100033690181")), }, }, diff --git a/tencentcloud/data_source_tc_cam_groups.go b/tencentcloud/services/cam/data_source_tc_cam_groups.go similarity index 84% rename from tencentcloud/data_source_tc_cam_groups.go rename to tencentcloud/services/cam/data_source_tc_cam_groups.go index 4de036de44..0d0f4490f5 100644 --- a/tencentcloud/data_source_tc_cam_groups.go +++ b/tencentcloud/services/cam/data_source_tc_cam_groups.go @@ -1,17 +1,20 @@ -package tencentcloud +package cam import ( "context" "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCamGroups() *schema.Resource { +func DataSourceTencentCloudCamGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamGroupsRead, @@ -70,10 +73,10 @@ func dataSourceTencentCloudCamGroups() *schema.Resource { } func dataSourceTencentCloudCamGroupsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_groups.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_groups.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]interface{}) if v, ok := d.GetOk("group_id"); ok { @@ -92,13 +95,13 @@ func dataSourceTencentCloudCamGroupsRead(d *schema.ResourceData, meta interface{ } camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var groups []*cam.GroupInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := camService.DescribeGroupsByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } groups = results return nil @@ -130,7 +133,7 @@ func dataSourceTencentCloudCamGroupsRead(d *schema.ResourceData, meta interface{ output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), groupList); e != nil { + if e := tccommon.WriteToFile(output.(string), groupList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cam_groups_test.go b/tencentcloud/services/cam/data_source_tc_cam_groups_test.go similarity index 77% rename from tencentcloud/data_source_tc_cam_groups_test.go rename to tencentcloud/services/cam/data_source_tc_cam_groups_test.go index cbe3f71a8a..2c0a709e57 100644 --- a/tencentcloud/data_source_tc_cam_groups_test.go +++ b/tencentcloud/services/cam/data_source_tc_cam_groups_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCamGroupsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamGroupDestroy, Steps: []resource.TestStep{ { @@ -27,7 +29,7 @@ func TestAccTencentCloudCamGroupsDataSource_basic(t *testing.T) { }) } -const testAccCamGroupsDataSource_basic = defaultCamVariables + ` +const testAccCamGroupsDataSource_basic = tcacctest.DefaultCamVariables + ` data "tencentcloud_cam_groups" "groups" { name = var.cam_group_basic } diff --git a/tencentcloud/data_source_tc_cam_list_entities_for_policy.go b/tencentcloud/services/cam/data_source_tc_cam_list_entities_for_policy.go similarity index 86% rename from tencentcloud/data_source_tc_cam_list_entities_for_policy.go rename to tencentcloud/services/cam/data_source_tc_cam_list_entities_for_policy.go index 68b03e824f..4e203c335f 100644 --- a/tencentcloud/data_source_tc_cam_list_entities_for_policy.go +++ b/tencentcloud/services/cam/data_source_tc_cam_list_entities_for_policy.go @@ -1,15 +1,18 @@ -package tencentcloud +package cam import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCamListEntitiesForPolicy() *schema.Resource { +func DataSourceTencentCloudCamListEntitiesForPolicy() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamListEntitiesForPolicyRead, Schema: map[string]*schema.Schema{ @@ -76,12 +79,12 @@ func dataSourceTencentCloudCamListEntitiesForPolicy() *schema.Resource { } func dataSourceTencentCloudCamListEntitiesForPolicyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_list_entities_for_policy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_list_entities_for_policy.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, _ := d.GetOkExists("policy_id"); v != nil { @@ -96,13 +99,13 @@ func dataSourceTencentCloudCamListEntitiesForPolicyRead(d *schema.ResourceData, paramMap["EntityFilter"] = helper.String(v.(string)) } - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var listEntitiesForPolicy []*cam.AttachEntityOfPolicy - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCamListEntitiesForPolicyByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } listEntitiesForPolicy = result return nil @@ -148,7 +151,7 @@ func dataSourceTencentCloudCamListEntitiesForPolicyRead(d *schema.ResourceData, d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cam_list_entities_for_policy_test.go b/tencentcloud/services/cam/data_source_tc_cam_list_entities_for_policy_test.go similarity index 70% rename from tencentcloud/data_source_tc_cam_list_entities_for_policy_test.go rename to tencentcloud/services/cam/data_source_tc_cam_list_entities_for_policy_test.go index 6cae1d97f7..2844befa98 100644 --- a/tencentcloud/data_source_tc_cam_list_entities_for_policy_test.go +++ b/tencentcloud/services/cam/data_source_tc_cam_list_entities_for_policy_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCamListEntitiesForPolicyDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCamListEntitiesForPolicyDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cam_list_entities_for_policy.list_entities_for_policy"), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cam_list_entities_for_policy.list_entities_for_policy"), resource.TestCheckResourceAttrSet("data.tencentcloud_cam_list_entities_for_policy.list_entities_for_policy", "policy_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_cam_list_entities_for_policy.list_entities_for_policy", "entity_filter"), ), diff --git a/tencentcloud/data_source_tc_cam_oidc_config.go b/tencentcloud/services/cam/data_source_tc_cam_oidc_config.go similarity index 83% rename from tencentcloud/data_source_tc_cam_oidc_config.go rename to tencentcloud/services/cam/data_source_tc_cam_oidc_config.go index 19e6b9387b..262c76266c 100644 --- a/tencentcloud/data_source_tc_cam_oidc_config.go +++ b/tencentcloud/services/cam/data_source_tc_cam_oidc_config.go @@ -1,15 +1,18 @@ -package tencentcloud +package cam import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCamOidcConfig() *schema.Resource { +func DataSourceTencentCloudCamOidcConfig() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamOidcConfigRead, Schema: map[string]*schema.Schema{ @@ -68,10 +71,10 @@ func dataSourceTencentCloudCamOidcConfig() *schema.Resource { } func dataSourceTencentCloudCamOidcConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_oidc_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_oidc_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var name string result := make(map[string]interface{}) @@ -83,10 +86,10 @@ func dataSourceTencentCloudCamOidcConfigRead(d *schema.ResourceData, meta interf } var response *cam.DescribeOIDCConfigResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().DescribeOIDCConfig(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().DescribeOIDCConfig(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -129,7 +132,7 @@ func dataSourceTencentCloudCamOidcConfigRead(d *schema.ResourceData, meta interf d.SetId(name) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), result); e != nil { + if e := tccommon.WriteToFile(output.(string), result); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cam_oidc_config_test.go b/tencentcloud/services/cam/data_source_tc_cam_oidc_config_test.go similarity index 67% rename from tencentcloud/data_source_tc_cam_oidc_config_test.go rename to tencentcloud/services/cam/data_source_tc_cam_oidc_config_test.go index ea356eb90e..a366cba351 100644 --- a/tencentcloud/data_source_tc_cam_oidc_config_test.go +++ b/tencentcloud/services/cam/data_source_tc_cam_oidc_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCamOidcConfigDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCamOidcConfigDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cam_oidc_config.oidc_config")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cam_oidc_config.oidc_config")), }, }, }) diff --git a/tencentcloud/data_source_tc_cam_policies.go b/tencentcloud/services/cam/data_source_tc_cam_policies.go similarity index 86% rename from tencentcloud/data_source_tc_cam_policies.go rename to tencentcloud/services/cam/data_source_tc_cam_policies.go index 1c205cdbb0..0fdbfddf75 100644 --- a/tencentcloud/data_source_tc_cam_policies.go +++ b/tencentcloud/services/cam/data_source_tc_cam_policies.go @@ -1,17 +1,20 @@ -package tencentcloud +package cam import ( "context" "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCamPolicies() *schema.Resource { +func DataSourceTencentCloudCamPolicies() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamPoliciesRead, @@ -34,13 +37,13 @@ func dataSourceTencentCloudCamPolicies() *schema.Resource { "type": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue([]int{1, 2}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{1, 2}), Description: "Type of the policy strategy. Valid values: `1`, `2`. `1` means customer strategy and `2` means preset strategy.", }, "create_mode": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue([]int{1, 2}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{1, 2}), Description: "Mode of creation of policy strategy. Valid values: `1`, `2`. `1` means policy was created with console, and `2` means it was created by strategies.", }, "result_output_file": { @@ -102,10 +105,10 @@ func dataSourceTencentCloudCamPolicies() *schema.Resource { } func dataSourceTencentCloudCamPoliciesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_policies.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_policies.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]interface{}) if v, ok := d.GetOk("policy_id"); ok { @@ -130,13 +133,13 @@ func dataSourceTencentCloudCamPoliciesRead(d *schema.ResourceData, meta interfac } camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var policies []*cam.StrategyInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := camService.DescribePoliciesByFilter(ctx, params) if e != nil { - return retryError(e, InternalError) + return tccommon.RetryError(e, tccommon.InternalError) } policies = results return nil @@ -172,7 +175,7 @@ func dataSourceTencentCloudCamPoliciesRead(d *schema.ResourceData, meta interfac output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), policyList); e != nil { + if e := tccommon.WriteToFile(output.(string), policyList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cam_policies_test.go b/tencentcloud/services/cam/data_source_tc_cam_policies_test.go similarity index 81% rename from tencentcloud/data_source_tc_cam_policies_test.go rename to tencentcloud/services/cam/data_source_tc_cam_policies_test.go index cb8113dd95..787fceb896 100644 --- a/tencentcloud/data_source_tc_cam_policies_test.go +++ b/tencentcloud/services/cam/data_source_tc_cam_policies_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCamPoliciesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamPolicyDestroy, Steps: []resource.TestStep{ { @@ -29,7 +31,7 @@ func TestAccTencentCloudCamPoliciesDataSource_basic(t *testing.T) { }) } -const testAccCamPoliciesDataSource_basic = defaultCamVariables + ` +const testAccCamPoliciesDataSource_basic = tcacctest.DefaultCamVariables + ` data "tencentcloud_cam_policies" "policies" { name = var.cam_policy_basic } diff --git a/tencentcloud/data_source_tc_cam_policy_granting_service_access.go b/tencentcloud/services/cam/data_source_tc_cam_policy_granting_service_access.go similarity index 89% rename from tencentcloud/data_source_tc_cam_policy_granting_service_access.go rename to tencentcloud/services/cam/data_source_tc_cam_policy_granting_service_access.go index 255a46f470..03a2fe29ac 100644 --- a/tencentcloud/data_source_tc_cam_policy_granting_service_access.go +++ b/tencentcloud/services/cam/data_source_tc_cam_policy_granting_service_access.go @@ -1,15 +1,18 @@ -package tencentcloud +package cam import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCamPolicyGrantingServiceAccess() *schema.Resource { +func DataSourceTencentCloudCamPolicyGrantingServiceAccess() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamPolicyGrantingServiceAccessRead, Schema: map[string]*schema.Schema{ @@ -124,12 +127,12 @@ func dataSourceTencentCloudCamPolicyGrantingServiceAccess() *schema.Resource { } func dataSourceTencentCloudCamPolicyGrantingServiceAccessRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_policy_granting_service_access.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_policy_granting_service_access.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( targetUin string roleId string @@ -152,14 +155,14 @@ func dataSourceTencentCloudCamPolicyGrantingServiceAccessRead(d *schema.Resource paramMap["ServiceType"] = helper.String(v.(string)) } - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var list []*cam.ListGrantServiceAccessNode - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCamPolicyGrantingServiceAccessByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } list = result return nil @@ -240,10 +243,10 @@ func dataSourceTencentCloudCamPolicyGrantingServiceAccessRead(d *schema.Resource _ = d.Set("list", tmpList) } - d.SetId(targetUin + FILED_SP + roleId + groupId) + d.SetId(targetUin + tccommon.FILED_SP + roleId + groupId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cam_policy_granting_service_access_test.go b/tencentcloud/services/cam/data_source_tc_cam_policy_granting_service_access_test.go similarity index 62% rename from tencentcloud/data_source_tc_cam_policy_granting_service_access_test.go rename to tencentcloud/services/cam/data_source_tc_cam_policy_granting_service_access_test.go index 5816d75720..052fbd9317 100644 --- a/tencentcloud/data_source_tc_cam_policy_granting_service_access_test.go +++ b/tencentcloud/services/cam/data_source_tc_cam_policy_granting_service_access_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCamPolicyGrantingServiceAccessDataSource_basic(t *testin t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCamPolicyGrantingServiceAccessDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cam_policy_granting_service_access.policy_granting_service_access")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cam_policy_granting_service_access.policy_granting_service_access")), }, }, }) diff --git a/tencentcloud/data_source_tc_cam_role_policy_attachments.go b/tencentcloud/services/cam/data_source_tc_cam_role_policy_attachments.go similarity index 85% rename from tencentcloud/data_source_tc_cam_role_policy_attachments.go rename to tencentcloud/services/cam/data_source_tc_cam_role_policy_attachments.go index 1829192188..a220d19a63 100644 --- a/tencentcloud/data_source_tc_cam_role_policy_attachments.go +++ b/tencentcloud/services/cam/data_source_tc_cam_role_policy_attachments.go @@ -1,17 +1,20 @@ -package tencentcloud +package cam import ( "context" "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCamRolePolicyAttachments() *schema.Resource { +func DataSourceTencentCloudCamRolePolicyAttachments() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamRolePolicyAttachmentsRead, @@ -29,13 +32,13 @@ func dataSourceTencentCloudCamRolePolicyAttachments() *schema.Resource { "create_mode": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue([]int{1, 2}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{1, 2}), Description: "Mode of Creation of the CAM user policy attachment. `1` means the cam policy attachment is created by production, and the others indicate syntax strategy ways.", }, "policy_type": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CAM_POLICY_CREATE_STRATEGY), + ValidateFunc: tccommon.ValidateAllowedStringValue(CAM_POLICY_CREATE_STRATEGY), Description: "Type of the policy strategy. Valid values are 'User', 'QCS'. 'User' means customer strategy and 'QCS' means preset strategy.", }, "result_output_file": { @@ -87,10 +90,10 @@ func dataSourceTencentCloudCamRolePolicyAttachments() *schema.Resource { } func dataSourceTencentCloudCamRolePolicyAttachmentsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_role_policy_attachments.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_role_policy_attachments.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]interface{}) roleId := d.Get("role_id").(string) @@ -110,13 +113,13 @@ func dataSourceTencentCloudCamRolePolicyAttachmentsRead(d *schema.ResourceData, } camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var policyOfRoles []*cam.AttachedPolicyOfRole - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := camService.DescribeRolePolicyAttachmentsByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } policyOfRoles = results return nil @@ -148,7 +151,7 @@ func dataSourceTencentCloudCamRolePolicyAttachmentsRead(d *schema.ResourceData, output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), policyOfRoleList); e != nil { + if e := tccommon.WriteToFile(output.(string), policyOfRoleList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cam_role_policy_attachments_test.go b/tencentcloud/services/cam/data_source_tc_cam_role_policy_attachments_test.go similarity index 86% rename from tencentcloud/data_source_tc_cam_role_policy_attachments_test.go rename to tencentcloud/services/cam/data_source_tc_cam_role_policy_attachments_test.go index 90e13f66d5..0353011718 100644 --- a/tencentcloud/data_source_tc_cam_role_policy_attachments_test.go +++ b/tencentcloud/services/cam/data_source_tc_cam_role_policy_attachments_test.go @@ -1,15 +1,17 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCamRolePolicyAttachmentsDataSource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamRolePolicyAttachmentDestroy, Steps: []resource.TestStep{ { @@ -27,7 +29,7 @@ func TestAccTencentCloudCamRolePolicyAttachmentsDataSource_basic(t *testing.T) { }) } -const testAccCamRolePolicyAttachmentsDataSource_basic = defaultCamVariables + ` +const testAccCamRolePolicyAttachmentsDataSource_basic = tcacctest.DefaultCamVariables + ` data "tencentcloud_cam_policies" "policy" { name = var.cam_policy_basic } diff --git a/tencentcloud/data_source_tc_cam_roles.go b/tencentcloud/services/cam/data_source_tc_cam_roles.go similarity index 86% rename from tencentcloud/data_source_tc_cam_roles.go rename to tencentcloud/services/cam/data_source_tc_cam_roles.go index 76c9fc5e1d..6e492fafde 100644 --- a/tencentcloud/data_source_tc_cam_roles.go +++ b/tencentcloud/services/cam/data_source_tc_cam_roles.go @@ -1,16 +1,19 @@ -package tencentcloud +package cam import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCamRoles() *schema.Resource { +func DataSourceTencentCloudCamRoles() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamRolesRead, @@ -84,10 +87,10 @@ func dataSourceTencentCloudCamRoles() *schema.Resource { } func dataSourceTencentCloudCamRolesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_roles.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_roles.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]interface{}) if v, ok := d.GetOk("role_id"); ok { @@ -101,13 +104,13 @@ func dataSourceTencentCloudCamRolesRead(d *schema.ResourceData, meta interface{} } camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var roles []*cam.RoleInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := camService.DescribeRolesByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } roles = results return nil @@ -144,7 +147,7 @@ func dataSourceTencentCloudCamRolesRead(d *schema.ResourceData, meta interface{} output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), roleList); e != nil { + if e := tccommon.WriteToFile(output.(string), roleList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cam_roles_test.go b/tencentcloud/services/cam/data_source_tc_cam_roles_test.go similarity index 82% rename from tencentcloud/data_source_tc_cam_roles_test.go rename to tencentcloud/services/cam/data_source_tc_cam_roles_test.go index 73ae7d599a..8cc8034bd2 100644 --- a/tencentcloud/data_source_tc_cam_roles_test.go +++ b/tencentcloud/services/cam/data_source_tc_cam_roles_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCamRolesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamRoleDestroy, Steps: []resource.TestStep{ { @@ -30,7 +32,7 @@ func TestAccTencentCloudCamRolesDataSource_basic(t *testing.T) { }) } -const testAccCamRolesDatasourceBasic = defaultCamVariables + ` +const testAccCamRolesDatasourceBasic = tcacctest.DefaultCamVariables + ` data "tencentcloud_cam_roles" "roles" { name = var.cam_role_basic } diff --git a/tencentcloud/data_source_tc_cam_saml_providers.go b/tencentcloud/services/cam/data_source_tc_cam_saml_providers.go similarity index 83% rename from tencentcloud/data_source_tc_cam_saml_providers.go rename to tencentcloud/services/cam/data_source_tc_cam_saml_providers.go index d281dfa22d..9a68065299 100644 --- a/tencentcloud/data_source_tc_cam_saml_providers.go +++ b/tencentcloud/services/cam/data_source_tc_cam_saml_providers.go @@ -1,16 +1,19 @@ -package tencentcloud +package cam import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCamSAMLProviders() *schema.Resource { +func DataSourceTencentCloudCamSAMLProviders() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamSAMLProvidersRead, @@ -64,10 +67,10 @@ func dataSourceTencentCloudCamSAMLProviders() *schema.Resource { } func dataSourceTencentCloudCamSAMLProvidersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_saml_providers.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_saml_providers.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]interface{}) if v, ok := d.GetOk("name"); ok { @@ -78,13 +81,13 @@ func dataSourceTencentCloudCamSAMLProvidersRead(d *schema.ResourceData, meta int } camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var providers []*cam.SAMLProviderInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := camService.DescribeSAMLProvidersByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } providers = results return nil @@ -114,7 +117,7 @@ func dataSourceTencentCloudCamSAMLProvidersRead(d *schema.ResourceData, meta int output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), providerList); e != nil { + if e := tccommon.WriteToFile(output.(string), providerList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cam_saml_providers_test.go b/tencentcloud/services/cam/data_source_tc_cam_saml_providers_test.go similarity index 95% rename from tencentcloud/data_source_tc_cam_saml_providers_test.go rename to tencentcloud/services/cam/data_source_tc_cam_saml_providers_test.go index af6d9caf19..640bd13be0 100644 --- a/tencentcloud/data_source_tc_cam_saml_providers_test.go +++ b/tencentcloud/services/cam/data_source_tc_cam_saml_providers_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,8 +13,8 @@ const testAccSAMLProviderDataSourceName = "cam-provider-test1" func TestAccTencentCloudCamSAMLProvidersDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamSAMLProviderDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_cam_secret_last_used_time.go b/tencentcloud/services/cam/data_source_tc_cam_secret_last_used_time.go similarity index 81% rename from tencentcloud/data_source_tc_cam_secret_last_used_time.go rename to tencentcloud/services/cam/data_source_tc_cam_secret_last_used_time.go index aaeb0dda1e..eada43e2b4 100644 --- a/tencentcloud/data_source_tc_cam_secret_last_used_time.go +++ b/tencentcloud/services/cam/data_source_tc_cam_secret_last_used_time.go @@ -1,15 +1,18 @@ -package tencentcloud +package cam import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCamSecretLastUsedTime() *schema.Resource { +func DataSourceTencentCloudCamSecretLastUsedTime() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamSecretLastUsedTimeRead, Schema: map[string]*schema.Schema{ @@ -59,12 +62,12 @@ func dataSourceTencentCloudCamSecretLastUsedTime() *schema.Resource { } func dataSourceTencentCloudCamSecretLastUsedTimeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_secret_last_used_time.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_secret_last_used_time.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("secret_id_list"); ok { @@ -72,14 +75,14 @@ func dataSourceTencentCloudCamSecretLastUsedTimeRead(d *schema.ResourceData, met paramMap["SecretIdList"] = helper.InterfacesStringsPoint(secretIdListSet) } - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var secretIdLastUsedRows []*cam.SecretIdLastUsed - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCamSecretLastUsedTimeByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } secretIdLastUsedRows = result return nil @@ -117,7 +120,7 @@ func dataSourceTencentCloudCamSecretLastUsedTimeRead(d *schema.ResourceData, met d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cam_secret_last_used_time_test.go b/tencentcloud/services/cam/data_source_tc_cam_secret_last_used_time_test.go similarity index 61% rename from tencentcloud/data_source_tc_cam_secret_last_used_time_test.go rename to tencentcloud/services/cam/data_source_tc_cam_secret_last_used_time_test.go index ce81798825..d45bb2f63e 100644 --- a/tencentcloud/data_source_tc_cam_secret_last_used_time_test.go +++ b/tencentcloud/services/cam/data_source_tc_cam_secret_last_used_time_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCamSecretLastUsedTimeDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCamSecretLastUsedTimeDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cam_secret_last_used_time.secret_last_used_time")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cam_secret_last_used_time.secret_last_used_time")), }, }, }) diff --git a/tencentcloud/data_source_tc_cam_user_policy_attachments.go b/tencentcloud/services/cam/data_source_tc_cam_user_policy_attachments.go similarity index 87% rename from tencentcloud/data_source_tc_cam_user_policy_attachments.go rename to tencentcloud/services/cam/data_source_tc_cam_user_policy_attachments.go index 7cebf0dc83..1d9a73c917 100644 --- a/tencentcloud/data_source_tc_cam_user_policy_attachments.go +++ b/tencentcloud/services/cam/data_source_tc_cam_user_policy_attachments.go @@ -1,17 +1,20 @@ -package tencentcloud +package cam import ( "context" "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCamUserPolicyAttachments() *schema.Resource { +func DataSourceTencentCloudCamUserPolicyAttachments() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamUserPolicyAttachmentsRead, @@ -37,13 +40,13 @@ func dataSourceTencentCloudCamUserPolicyAttachments() *schema.Resource { "create_mode": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue([]int{1, 2}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{1, 2}), Description: "Mode of Creation of the CAM user policy attachment. `1` means the CAM policy attachment is created by production, and the others indicate syntax strategy ways.", }, "policy_type": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CAM_POLICY_CREATE_STRATEGY), + ValidateFunc: tccommon.ValidateAllowedStringValue(CAM_POLICY_CREATE_STRATEGY), Description: "Type of the policy strategy. 'User' means customer strategy and 'QCS' means preset strategy.", }, "result_output_file": { @@ -101,10 +104,10 @@ func dataSourceTencentCloudCamUserPolicyAttachments() *schema.Resource { } func dataSourceTencentCloudCamUserPolicyAttachmentsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_user_policy_attachments.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_user_policy_attachments.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]interface{}) userId, _, err := getUserId(d) @@ -127,13 +130,13 @@ func dataSourceTencentCloudCamUserPolicyAttachmentsRead(d *schema.ResourceData, } camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var policyOfUsers []*cam.AttachPolicyInfo - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := camService.DescribeUserPolicyAttachmentsByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } policyOfUsers = results return nil @@ -166,7 +169,7 @@ func dataSourceTencentCloudCamUserPolicyAttachmentsRead(d *schema.ResourceData, output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), policyOfUserList); e != nil { + if e := tccommon.WriteToFile(output.(string), policyOfUserList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cam_user_policy_attachments_test.go b/tencentcloud/services/cam/data_source_tc_cam_user_policy_attachments_test.go similarity index 81% rename from tencentcloud/data_source_tc_cam_user_policy_attachments_test.go rename to tencentcloud/services/cam/data_source_tc_cam_user_policy_attachments_test.go index 4fe30c3795..94acafc7d7 100644 --- a/tencentcloud/data_source_tc_cam_user_policy_attachments_test.go +++ b/tencentcloud/services/cam/data_source_tc_cam_user_policy_attachments_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCamUserPolicyAttachmentsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamUserPolicyAttachmentDestroy, Steps: []resource.TestStep{ { @@ -27,7 +29,7 @@ func TestAccTencentCloudCamUserPolicyAttachmentsDataSource_basic(t *testing.T) { }) } -const testAccCamUserPolicyAttachmentsDataSource_basic = defaultCamVariables + ` +const testAccCamUserPolicyAttachmentsDataSource_basic = tcacctest.DefaultCamVariables + ` data "tencentcloud_cam_user_policy_attachments" "user_policy_attachments" { user_name = var.cam_user_basic diff --git a/tencentcloud/data_source_tc_cam_users.go b/tencentcloud/services/cam/data_source_tc_cam_users.go similarity index 89% rename from tencentcloud/data_source_tc_cam_users.go rename to tencentcloud/services/cam/data_source_tc_cam_users.go index cdd17d9ac0..ddff1e518b 100644 --- a/tencentcloud/data_source_tc_cam_users.go +++ b/tencentcloud/services/cam/data_source_tc_cam_users.go @@ -1,16 +1,19 @@ -package tencentcloud +package cam import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCamUsers() *schema.Resource { +func DataSourceTencentCloudCamUsers() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCamUsersRead, @@ -119,10 +122,10 @@ func dataSourceTencentCloudCamUsers() *schema.Resource { } func dataSourceTencentCloudCamUsersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cam_users.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cam_users.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]interface{}) if v, ok := d.GetOk("name"); ok { @@ -156,13 +159,13 @@ func dataSourceTencentCloudCamUsersRead(d *schema.ResourceData, meta interface{} } camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var users []*cam.SubAccountInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := camService.DescribeUsersByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } users = results return nil @@ -201,7 +204,7 @@ func dataSourceTencentCloudCamUsersRead(d *schema.ResourceData, meta interface{} output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), userList); e != nil { + if e := tccommon.WriteToFile(output.(string), userList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cam_users_test.go b/tencentcloud/services/cam/data_source_tc_cam_users_test.go similarity index 84% rename from tencentcloud/data_source_tc_cam_users_test.go rename to tencentcloud/services/cam/data_source_tc_cam_users_test.go index caed717dc5..2409b6903f 100644 --- a/tencentcloud/data_source_tc_cam_users_test.go +++ b/tencentcloud/services/cam/data_source_tc_cam_users_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCamUsersDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamUserDestroy, Steps: []resource.TestStep{ { @@ -32,7 +34,7 @@ func TestAccTencentCloudCamUsersDataSource_basic(t *testing.T) { }) } -const testAccCamUsersDataSource_basic = defaultCamVariables + ` +const testAccCamUsersDataSource_basic = tcacctest.DefaultCamVariables + ` data "tencentcloud_cam_users" "users" { name = var.cam_user_basic } diff --git a/tencentcloud/data_source_tc_user_info.go b/tencentcloud/services/cam/data_source_tc_user_info.go similarity index 83% rename from tencentcloud/data_source_tc_user_info.go rename to tencentcloud/services/cam/data_source_tc_user_info.go index eb9a3ff2e6..1dc6b614ad 100644 --- a/tencentcloud/data_source_tc_user_info.go +++ b/tencentcloud/services/cam/data_source_tc_user_info.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -7,14 +7,17 @@ import ( "math/rand" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func datasourceTencentCloudUserInfo() *schema.Resource { +func DataSourceTencentCloudUserInfo() *schema.Resource { return &schema.Resource{ Read: datasourceTencentCloudUserInfoRead, @@ -54,15 +57,15 @@ func datasourceTencentCloudUserInfo() *schema.Resource { } func datasourceTencentCloudUserInfoRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("datasource.tencentcloud_user_info.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("datasource.tencentcloud_user_info.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request := cam.NewGetUserAppIdRequest() ratelimit.Check(request.GetAction()) @@ -110,7 +113,7 @@ func datasourceTencentCloudUserInfoRead(d *schema.ResourceData, meta interface{} output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), map[string]interface{}{ + if e := tccommon.WriteToFile(output.(string), map[string]interface{}{ "app_id": appId, "uin": uin, "ownerUin": ownerUin, diff --git a/tencentcloud/data_source_tc_user_info_test.go b/tencentcloud/services/cam/data_source_tc_user_info_test.go similarity index 79% rename from tencentcloud/data_source_tc_user_info_test.go rename to tencentcloud/services/cam/data_source_tc_user_info_test.go index 1a6bd99d47..3392348b4b 100644 --- a/tencentcloud/data_source_tc_user_info_test.go +++ b/tencentcloud/services/cam/data_source_tc_user_info_test.go @@ -1,18 +1,20 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudDataSourceUserInfoBasic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccDataUserInfoBasic, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttrSet("data.tencentcloud_user_info.info", "app_id"), @@ -27,11 +29,11 @@ func TestAccTencentCloudDataSourceUserInfoBasic(t *testing.T) { func TestAccTencentCloudDataSourceUserInfoSubAccount(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { // Need use subaccount aksk - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_SUB_ACCOUNT) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_SUB_ACCOUNT) }, Config: testAccDataUserInfoSubAccount, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttrSet("data.tencentcloud_user_info.info_sub_account", "app_id"), diff --git a/tencentcloud/services/cam/extension_cam.go b/tencentcloud/services/cam/extension_cam.go new file mode 100644 index 0000000000..1573d14aa4 --- /dev/null +++ b/tencentcloud/services/cam/extension_cam.go @@ -0,0 +1,26 @@ +package cam + +const PAGE_ITEM = 200 + +const ( + CAM_POLICY_CREATE_STRATEGY_CUSTOM = "User" + CAM_POLICY_CREATE_STRATEGY_PRESET = "QCS" + CAM_POLICY_CREATE_STRATEGY_NULL = "" +) + +var CAM_POLICY_CREATE_STRATEGY = []string{ + CAM_POLICY_CREATE_STRATEGY_CUSTOM, + CAM_POLICY_CREATE_STRATEGY_PRESET, + CAM_POLICY_CREATE_STRATEGY_NULL, +} + +type Principal struct { + Service []string `json:"service"` +} +type Statement struct { + Principal Principal `json:"principal"` +} +type Document struct { + Version string `json:"version"` + Statement []Statement `json:"statement"` +} diff --git a/tencentcloud/services/cam/extension_tags.go b/tencentcloud/services/cam/extension_tags.go new file mode 100644 index 0000000000..73b7bedbf4 --- /dev/null +++ b/tencentcloud/services/cam/extension_tags.go @@ -0,0 +1,3 @@ +package cam + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/cam/pkgkey.go b/tencentcloud/services/cam/pkgkey.go new file mode 100644 index 0000000000..4da41a819f --- /dev/null +++ b/tencentcloud/services/cam/pkgkey.go @@ -0,0 +1,193 @@ +package cam + +import ( + "bytes" + "encoding/base64" + "encoding/json" + "fmt" + "io" + "strings" + + "github.com/ProtonMail/go-crypto/openpgp" + "github.com/ProtonMail/go-crypto/openpgp/packet" + "github.com/hashicorp/go-cleanhttp" +) + +const ( + kbPrefix = "keybase:" +) + +func DecodeJSONFromReader(r io.Reader, out interface{}) error { + if r == nil { + return fmt.Errorf("'io.Reader' being decoded is nil") + } + if out == nil { + return fmt.Errorf("output parameter 'out' is nil") + } + + dec := json.NewDecoder(r) + + // While decoding JSON values, interpret the integer values as `json.Number`s instead of `float64`. + dec.UseNumber() + + // Since 'out' is an interface representing a pointer, pass it to the decoder without an '&' + return dec.Decode(out) +} + +func FetchKeybasePubkeys(input []string) (map[string]string, error) { + client := cleanhttp.DefaultClient() + if client == nil { + return nil, fmt.Errorf("unable to create an http client") + } + + if len(input) == 0 { + return nil, nil + } + + usernames := make([]string, 0, len(input)) + for _, v := range input { + if strings.HasPrefix(v, kbPrefix) { + usernames = append(usernames, strings.TrimSuffix(strings.TrimPrefix(v, kbPrefix), "\n")) + } + } + + if len(usernames) == 0 { + return nil, nil + } + + ret := make(map[string]string, len(usernames)) + url := fmt.Sprintf("https://keybase.io/_/api/1.0/user/lookup.json?usernames=%s&fields=public_keys", strings.Join(usernames, ",")) + resp, err := client.Get(url) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + type PublicKeys struct { + Primary struct { + Bundle string + } + } + + type LThem struct { + PublicKeys `json:"public_keys"` + } + + type KbResp struct { + Status struct { + Name string + } + Them []LThem + } + + out := &KbResp{ + Them: []LThem{}, + } + + if err := DecodeJSONFromReader(resp.Body, out); err != nil { + return nil, err + } + + if out.Status.Name != "OK" { + return nil, fmt.Errorf("got non-OK response: %q", out.Status.Name) + } + + missingNames := make([]string, 0, len(usernames)) + var keyReader *bytes.Reader + serializedEntity := bytes.NewBuffer(nil) + for i, themVal := range out.Them { + if themVal.Primary.Bundle == "" { + missingNames = append(missingNames, usernames[i]) + continue + } + keyReader = bytes.NewReader([]byte(themVal.Primary.Bundle)) + entityList, err := openpgp.ReadArmoredKeyRing(keyReader) + if err != nil { + return nil, err + } + if len(entityList) != 1 { + return nil, fmt.Errorf("primary key could not be parsed for user %q", usernames[i]) + } + if entityList[0] == nil { + return nil, fmt.Errorf("primary key was nil for user %q", usernames[i]) + } + + serializedEntity.Reset() + err = entityList[0].Serialize(serializedEntity) + if err != nil { + return nil, fmt.Errorf("serializing entity for user %q: %w", usernames[i], err) + } + + // The API returns values in the same ordering requested, so this should properly match + ret[kbPrefix+usernames[i]] = base64.StdEncoding.EncodeToString(serializedEntity.Bytes()) + } + + if len(missingNames) > 0 { + return nil, fmt.Errorf("unable to fetch keys for user(s) %q from keybase", strings.Join(missingNames, ",")) + } + + return ret, nil +} + +func EncryptShares(input [][]byte, pgpKeys []string) ([]string, [][]byte, error) { + if len(input) != len(pgpKeys) { + return nil, nil, fmt.Errorf("mismatch between number items to encrypt and number of PGP keys") + } + encryptedShares := make([][]byte, 0, len(pgpKeys)) + entities, err := GetEntities(pgpKeys) + if err != nil { + return nil, nil, err + } + for i, entity := range entities { + ctBuf := bytes.NewBuffer(nil) + pt, err := openpgp.Encrypt(ctBuf, []*openpgp.Entity{entity}, nil, nil, nil) + if err != nil { + return nil, nil, fmt.Errorf("setting up encryption for PGP message: %w", err) + } + _, err = pt.Write(input[i]) + if err != nil { + return nil, nil, fmt.Errorf("encrypting PGP message: %w", err) + } + pt.Close() + encryptedShares = append(encryptedShares, ctBuf.Bytes()) + } + + fingerprints, err := GetFingerprints(nil, entities) + if err != nil { + return nil, nil, err + } + + return fingerprints, encryptedShares, nil +} + +func GetFingerprints(pgpKeys []string, entities []*openpgp.Entity) ([]string, error) { + if entities == nil { + var err error + entities, err = GetEntities(pgpKeys) + + if err != nil { + return nil, err + } + } + ret := make([]string, 0, len(entities)) + for _, entity := range entities { + ret = append(ret, fmt.Sprintf("%x", entity.PrimaryKey.Fingerprint)) + } + return ret, nil +} + +func GetEntities(pgpKeys []string) ([]*openpgp.Entity, error) { + ret := make([]*openpgp.Entity, 0, len(pgpKeys)) + for _, keystring := range pgpKeys { + data, err := base64.StdEncoding.DecodeString(keystring) + if err != nil { + return nil, fmt.Errorf("decoding given PGP key: %w", err) + } + entity, err := openpgp.ReadEntity(packet.NewReader(bytes.NewBuffer(data))) + if err != nil { + return nil, fmt.Errorf("parsing given PGP key: %w", err) + } + ret = append(ret, entity) + } + return ret, nil +} diff --git a/tencentcloud/resource_tc_cam_access_key.go b/tencentcloud/services/cam/resource_tc_cam_access_key.go similarity index 78% rename from tencentcloud/resource_tc_cam_access_key.go rename to tencentcloud/services/cam/resource_tc_cam_access_key.go index 66d90541eb..6761af8c71 100644 --- a/tencentcloud/resource_tc_cam_access_key.go +++ b/tencentcloud/services/cam/resource_tc_cam_access_key.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -7,13 +7,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamAccessKey() *schema.Resource { +func ResourceTencentCloudCamAccessKey() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamAccessKeyCreate, Read: resourceTencentCloudCamAccessKeyRead, @@ -67,10 +70,10 @@ func resourceTencentCloudCamAccessKey() *schema.Resource { } func resourceTencentCloudCamAccessKeyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_access_key.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_access_key.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cam.NewCreateAccessKeyRequest() @@ -82,10 +85,10 @@ func resourceTencentCloudCamAccessKeyCreate(d *schema.ResourceData, meta interfa request.TargetUin = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().CreateAccessKey(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().CreateAccessKey(request) if e != nil { - return retryError(e) + 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()) } @@ -99,7 +102,7 @@ func resourceTencentCloudCamAccessKeyCreate(d *schema.ResourceData, meta interfa if response == nil || response.Response == nil || response.Response.AccessKey == nil || response.Response.AccessKey.SecretAccessKey == nil { return fmt.Errorf("CAM AccessKey id is nil") } - d.SetId(helper.Int64ToStr(targetUin) + FILED_SP + *response.Response.AccessKey.AccessKeyId) + d.SetId(helper.Int64ToStr(targetUin) + tccommon.FILED_SP + *response.Response.AccessKey.AccessKeyId) if v, ok := d.GetOk("pgp_key"); ok { pgpKey := v.(string) @@ -124,16 +127,16 @@ func resourceTencentCloudCamAccessKeyCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudCamAccessKeyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_access_key.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_access_key.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -163,14 +166,14 @@ func resourceTencentCloudCamAccessKeyRead(d *schema.ResourceData, meta interface } func resourceTencentCloudCamAccessKeyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_access_key.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_access_key.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewUpdateAccessKeyRequest() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -185,10 +188,10 @@ func resourceTencentCloudCamAccessKeyUpdate(d *schema.ResourceData, meta interfa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().UpdateAccessKey(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdateAccessKey(request) if e != nil { - return retryError(e) + 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()) } @@ -203,14 +206,14 @@ func resourceTencentCloudCamAccessKeyUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudCamAccessKeyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_access_key.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_access_key.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) uin := idSplit[0] accessKey := idSplit[1] diff --git a/tencentcloud/resource_tc_cam_access_key_test.go b/tencentcloud/services/cam/resource_tc_cam_access_key_test.go similarity index 91% rename from tencentcloud/resource_tc_cam_access_key_test.go rename to tencentcloud/services/cam/resource_tc_cam_access_key_test.go index 5444951929..6264bfc73d 100644 --- a/tencentcloud/resource_tc_cam_access_key_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_access_key_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCamAccessKeyResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCamAccessKey, diff --git a/tencentcloud/resource_tc_cam_group.go b/tencentcloud/services/cam/resource_tc_cam_group.go similarity index 74% rename from tencentcloud/resource_tc_cam_group.go rename to tencentcloud/services/cam/resource_tc_cam_group.go index 6294a7389d..55503ea551 100644 --- a/tencentcloud/resource_tc_cam_group.go +++ b/tencentcloud/services/cam/resource_tc_cam_group.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -8,14 +8,17 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamGroup() *schema.Resource { +func ResourceTencentCloudCamGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamGroupCreate, Read: resourceTencentCloudCamGroupRead, @@ -46,9 +49,9 @@ func resourceTencentCloudCamGroup() *schema.Resource { } func resourceTencentCloudCamGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_group.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_group.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewCreateGroupRequest() request.GroupName = helper.String(d.Get("name").(string)) @@ -57,8 +60,8 @@ func resourceTencentCloudCamGroupCreate(d *schema.ResourceData, meta interface{} } var response *cam.CreateGroupResponse - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().CreateGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().CreateGroup(request) if e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { errCode := ee.GetCode() @@ -69,7 +72,7 @@ func resourceTencentCloudCamGroupCreate(d *schema.ResourceData, meta interface{} } log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + 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()) @@ -87,16 +90,16 @@ func resourceTencentCloudCamGroupCreate(d *schema.ResourceData, meta interface{} d.SetId(strconv.Itoa(int(*response.Response.GroupId))) //get really instance then read - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) groupId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, e := camService.DescribeGroupById(ctx, groupId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if instance == nil || instance.Response == nil || instance.Response.GroupId == nil { return resource.RetryableError(fmt.Errorf("creation not done")) @@ -112,21 +115,21 @@ func resourceTencentCloudCamGroupCreate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudCamGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_group.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) groupId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *cam.GetGroupResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := camService.DescribeGroupById(ctx, groupId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -150,9 +153,9 @@ func resourceTencentCloudCamGroupRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudCamGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_group.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_group.update")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) groupId := d.Id() groupIdInt, e := strconv.Atoi(groupId) @@ -179,13 +182,13 @@ func resourceTencentCloudCamGroupUpdate(d *schema.ResourceData, meta interface{} request.Remark = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().UpdateGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdateGroup(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) @@ -202,9 +205,9 @@ func resourceTencentCloudCamGroupUpdate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudCamGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_group.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_group.delete")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) groupId := d.Id() groupIdInt, e := strconv.Atoi(groupId) @@ -214,11 +217,11 @@ func resourceTencentCloudCamGroupDelete(d *schema.ResourceData, meta interface{} groupIdInt64 := uint64(groupIdInt) request := cam.NewDeleteGroupRequest() request.GroupId = &groupIdInt64 - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().DeleteGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().DeleteGroup(request) if e != nil { log.Printf("[CRITAL]%s reason[%s]\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cam_group_membership.go b/tencentcloud/services/cam/resource_tc_cam_group_membership.go similarity index 80% rename from tencentcloud/resource_tc_cam_group_membership.go rename to tencentcloud/services/cam/resource_tc_cam_group_membership.go index 8acc731af8..75f480c571 100644 --- a/tencentcloud/resource_tc_cam_group_membership.go +++ b/tencentcloud/services/cam/resource_tc_cam_group_membership.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -7,13 +7,15 @@ import ( "strconv" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" ) -func resourceTencentCloudCamGroupMembership() *schema.Resource { +func ResourceTencentCloudCamGroupMembership() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamGroupMembershipCreate, Read: resourceTencentCloudCamGroupMembershipRead, @@ -53,9 +55,9 @@ func resourceTencentCloudCamGroupMembership() *schema.Resource { } func resourceTencentCloudCamGroupMembershipCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_group_membership.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_group_membership.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) groupId := d.Get("group_id").(string) members, _, err := getUserIds(d) @@ -70,16 +72,16 @@ func resourceTencentCloudCamGroupMembershipCreate(d *schema.ResourceData, meta i d.SetId(groupId) //get really instance then read - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, e := camService.DescribeGroupMembershipById(ctx, groupId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if len(instance) == 0 { return resource.RetryableError(fmt.Errorf("creation not done")) @@ -95,21 +97,21 @@ func resourceTencentCloudCamGroupMembershipCreate(d *schema.ResourceData, meta i } func resourceTencentCloudCamGroupMembershipRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_group_membership.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_group_membership.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) groupId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var members []*string - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := camService.DescribeGroupMembershipById(ctx, groupId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } members = result return nil @@ -156,9 +158,9 @@ func resourceTencentCloudCamGroupMembershipRead(d *schema.ResourceData, meta int } func resourceTencentCloudCamGroupMembershipUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_group_membership.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_group_membership.update")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) groupId := d.Id() @@ -170,9 +172,9 @@ func resourceTencentCloudCamGroupMembershipUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudCamGroupMembershipDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_group_membership.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_group_membership.delete")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) groupId := d.Get("group_id").(string) userIds, _, err := getUserIds(d) if err != nil { @@ -189,16 +191,16 @@ func resourceTencentCloudCamGroupMembershipDelete(d *schema.ResourceData, meta i } func getUidFromName(name string, meta interface{}) (uid *uint64, errRet error) { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := camService.DescribeUserById(ctx, name) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result == nil || result.Response == nil || result.Response.Uid == nil { return nil @@ -213,7 +215,7 @@ func getUidFromName(name string, meta interface{}) (uid *uint64, errRet error) { } func addUsersToGroup(members []interface{}, groupId string, meta interface{}) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewAddUserToGroupRequest() request.Info = make([]*cam.GroupIdOfUidInfo, 0) @@ -237,12 +239,12 @@ func addUsersToGroup(members []interface{}, groupId string, meta interface{}) er info.GroupId = &groupIdInt64 request.Info = append(request.Info, &info) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().AddUserToGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().AddUserToGroup(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + 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()) @@ -257,7 +259,7 @@ func addUsersToGroup(members []interface{}, groupId string, meta interface{}) er } func removeUsersFromGroup(members []interface{}, groupId string, meta interface{}) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewRemoveUserFromGroupRequest() request.Info = make([]*cam.GroupIdOfUidInfo, 0) @@ -292,12 +294,12 @@ func removeUsersFromGroup(members []interface{}, groupId string, meta interface{ if len(request.Info) == 0 { return nil } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().RemoveUserFromGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().RemoveUserFromGroup(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + 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()) diff --git a/tencentcloud/resource_tc_cam_group_membership_test.go b/tencentcloud/services/cam/resource_tc_cam_group_membership_test.go similarity index 82% rename from tencentcloud/resource_tc_cam_group_membership_test.go rename to tencentcloud/services/cam/resource_tc_cam_group_membership_test.go index 10de1d1e91..4c3473fc10 100644 --- a/tencentcloud/resource_tc_cam_group_membership_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_group_membership_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package cam_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -12,8 +16,8 @@ import ( func TestAccTencentCloudCamGroupMembership_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamGroupMembershipDestroy, Steps: []resource.TestStep{ { @@ -41,12 +45,10 @@ func TestAccTencentCloudCamGroupMembership_basic(t *testing.T) { } func testAccCheckCamGroupMembershipDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cam_group_membership" { continue @@ -62,8 +64,8 @@ func testAccCheckCamGroupMembershipDestroy(s *terraform.State) error { func testAccCheckCamGroupMembershipExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -72,9 +74,7 @@ func testAccCheckCamGroupMembershipExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CAM group membership][Exists] check: CAM group membership id is not set") } - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := camService.DescribeGroupMembershipById(ctx, rs.Primary.ID) if err != nil { return err @@ -86,7 +86,7 @@ func testAccCheckCamGroupMembershipExists(n string) resource.TestCheckFunc { } } -const testAccCamGroupMembership_basic = defaultCamVariables + ` +const testAccCamGroupMembership_basic = tcacctest.DefaultCamVariables + ` data "tencentcloud_cam_groups" "groups" { name = var.cam_group_basic } @@ -123,7 +123,7 @@ resource "tencentcloud_cam_group_membership" "group_membership_basic" { } ` -const testAccCamGroupMembership_update = defaultCamVariables + ` +const testAccCamGroupMembership_update = tcacctest.DefaultCamVariables + ` data "tencentcloud_cam_groups" "groups" { name = var.cam_group_basic } diff --git a/tencentcloud/resource_tc_cam_group_policy_attachment.go b/tencentcloud/services/cam/resource_tc_cam_group_policy_attachment.go similarity index 74% rename from tencentcloud/resource_tc_cam_group_policy_attachment.go rename to tencentcloud/services/cam/resource_tc_cam_group_policy_attachment.go index db3bc09a08..4c725f62ea 100644 --- a/tencentcloud/resource_tc_cam_group_policy_attachment.go +++ b/tencentcloud/services/cam/resource_tc_cam_group_policy_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -7,12 +7,14 @@ import ( "strconv" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" ) -func resourceTencentCloudCamGroupPolicyAttachment() *schema.Resource { +func ResourceTencentCloudCamGroupPolicyAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamGroupPolicyAttachmentCreate, Read: resourceTencentCloudCamGroupPolicyAttachmentRead, @@ -59,21 +61,21 @@ func resourceTencentCloudCamGroupPolicyAttachment() *schema.Resource { } func resourceTencentCloudCamGroupPolicyAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_group_policy_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_group_policy_attachment.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) groupId := d.Get("group_id").(string) policyId := d.Get("policy_id").(string) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := camService.AddGroupPolicyAttachment(ctx, groupId, policyId) if e != nil { log.Printf("[CRITAL]%s reason[%s]\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -86,10 +88,10 @@ func resourceTencentCloudCamGroupPolicyAttachmentCreate(d *schema.ResourceData, //get really instance then read groupPolicyAttachmentId := d.Id() - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, e := camService.DescribeGroupPolicyAttachmentById(ctx, groupPolicyAttachmentId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if instance == nil { return resource.RetryableError(fmt.Errorf("creation not done")) @@ -105,22 +107,22 @@ func resourceTencentCloudCamGroupPolicyAttachmentCreate(d *schema.ResourceData, } func resourceTencentCloudCamGroupPolicyAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_group_policy_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_group_policy_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) groupPolicyAttachmentId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *cam.AttachPolicyInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := camService.DescribeGroupPolicyAttachmentById(ctx, groupPolicyAttachmentId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -150,21 +152,21 @@ func resourceTencentCloudCamGroupPolicyAttachmentRead(d *schema.ResourceData, me } func resourceTencentCloudCamGroupPolicyAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_group_policy_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_group_policy_attachment.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) groupPolicyAttachmentId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := camService.DeleteGroupPolicyAttachmentById(ctx, groupPolicyAttachmentId) if e != nil { log.Printf("[CRITAL]%s reason[%s]\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cam_group_policy_attachment_test.go b/tencentcloud/services/cam/resource_tc_cam_group_policy_attachment_test.go similarity index 74% rename from tencentcloud/resource_tc_cam_group_policy_attachment_test.go rename to tencentcloud/services/cam/resource_tc_cam_group_policy_attachment_test.go index 0132872a99..217053c569 100644 --- a/tencentcloud/resource_tc_cam_group_policy_attachment_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_group_policy_attachment_test.go @@ -1,18 +1,22 @@ -package tencentcloud +package cam_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) func TestAccTencentCloudCamGroupPolicyAttachment_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamGroupPolicyAttachmentDestroy, Steps: []resource.TestStep{ { @@ -33,12 +37,10 @@ func TestAccTencentCloudCamGroupPolicyAttachment_basic(t *testing.T) { } func testAccCheckCamGroupPolicyAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cam_group_policy_attachment" { continue @@ -54,8 +56,8 @@ func testAccCheckCamGroupPolicyAttachmentDestroy(s *terraform.State) error { func testAccCheckCamGroupPolicyAttachmentExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -64,9 +66,7 @@ func testAccCheckCamGroupPolicyAttachmentExists(n string) resource.TestCheckFunc if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CAM group policy attachment][Exists] check: CAM group policy attachment id is not set") } - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := camService.DescribeGroupPolicyAttachmentById(ctx, rs.Primary.ID) if err != nil { return err @@ -78,7 +78,7 @@ func testAccCheckCamGroupPolicyAttachmentExists(n string) resource.TestCheckFunc } } -const testAccCamGroupPolicyAttachment_basic = defaultCamVariables + ` +const testAccCamGroupPolicyAttachment_basic = tcacctest.DefaultCamVariables + ` data "tencentcloud_cam_groups" "groups" { name = var.cam_group_basic } diff --git a/tencentcloud/resource_tc_cam_group_test.go b/tencentcloud/services/cam/resource_tc_cam_group_test.go similarity index 76% rename from tencentcloud/resource_tc_cam_group_test.go rename to tencentcloud/services/cam/resource_tc_cam_group_test.go index 3784b0e7e3..becdd2574d 100644 --- a/tencentcloud/resource_tc_cam_group_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_group_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam_test import ( "context" @@ -6,10 +6,15 @@ import ( "log" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + tccam "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" ) func init() { @@ -17,12 +22,12 @@ func init() { resource.AddTestSweepers("tencentcloud_cam_group", &resource.Sweeper{ Name: "tencentcloud_cam_group", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() - service := CamService{client: client} + service := tccam.NewCamService(client) groups, err := service.DescribeGroupsByFilter(ctx, nil) if err != nil { @@ -31,7 +36,7 @@ func init() { for _, v := range groups { name := *v.GroupName - if persistResource.MatchString(name) { + if tcacctest.PersistResource.MatchString(name) { continue } @@ -51,8 +56,8 @@ func init() { func TestAccTencentCloudCamGroup_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamGroupDestroy, Steps: []resource.TestStep{ { @@ -88,12 +93,10 @@ func TestAccTencentCloudCamGroup_basic(t *testing.T) { } func testAccCheckCamGroupDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := tccam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cam_group" { continue @@ -110,8 +113,8 @@ func testAccCheckCamGroupDestroy(s *terraform.State) error { func testAccCheckCamGroupExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -120,9 +123,7 @@ func testAccCheckCamGroupExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CAM group][Exists] check: CAM group id is not set") } - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := tccam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := camService.DescribeGroupById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_cam_mfa_flag.go b/tencentcloud/services/cam/resource_tc_cam_mfa_flag.go similarity index 82% rename from tencentcloud/resource_tc_cam_mfa_flag.go rename to tencentcloud/services/cam/resource_tc_cam_mfa_flag.go index d4bb12ce7f..4a86adae5a 100644 --- a/tencentcloud/resource_tc_cam_mfa_flag.go +++ b/tencentcloud/services/cam/resource_tc_cam_mfa_flag.go @@ -1,18 +1,21 @@ -package tencentcloud +package cam import ( "context" "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamMfaFlag() *schema.Resource { +func ResourceTencentCloudCamMfaFlag() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamMfaFlagCreate, Read: resourceTencentCloudCamMfaFlagRead, @@ -84,8 +87,8 @@ func resourceTencentCloudCamMfaFlag() *schema.Resource { } func resourceTencentCloudCamMfaFlagCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_mfa_flag.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_mfa_flag.create")() + defer tccommon.InconsistentCheck(d, meta)() var opUin int if v, ok := d.GetOk("op_uin"); ok { @@ -96,18 +99,18 @@ func resourceTencentCloudCamMfaFlagCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudCamMfaFlagRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_mfa_flag.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_mfa_flag.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) opUin := d.Id() uin, err := strconv.Atoi(opUin) if err != nil { return err } - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} loginFlag, actionFlag, err := service.DescribeCamMfaFlagById(ctx, uint64(uin)) if err != nil { @@ -159,10 +162,10 @@ func resourceTencentCloudCamMfaFlagRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudCamMfaFlagUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_mfa_flag.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_mfa_flag.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) opUin := d.Id() request := cam.NewSetMfaFlagRequest() uin, err := strconv.Atoi(opUin) @@ -203,10 +206,10 @@ func resourceTencentCloudCamMfaFlagUpdate(d *schema.ResourceData, meta interface } } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().SetMfaFlag(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().SetMfaFlag(request) if e != nil { - return retryError(e) + 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()) } @@ -221,8 +224,8 @@ func resourceTencentCloudCamMfaFlagUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudCamMfaFlagDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_mfa_flag.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_mfa_flag.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cam_mfa_flag_test.go b/tencentcloud/services/cam/resource_tc_cam_mfa_flag_test.go similarity index 94% rename from tencentcloud/resource_tc_cam_mfa_flag_test.go rename to tencentcloud/services/cam/resource_tc_cam_mfa_flag_test.go index fa6e5f7518..01170090fd 100644 --- a/tencentcloud/resource_tc_cam_mfa_flag_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_mfa_flag_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCamMfaFlagResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCamMfaFlag, diff --git a/tencentcloud/resource_tc_cam_oidc_sso.go b/tencentcloud/services/cam/resource_tc_cam_oidc_sso.go similarity index 81% rename from tencentcloud/resource_tc_cam_oidc_sso.go rename to tencentcloud/services/cam/resource_tc_cam_oidc_sso.go index 69b1ce6f07..dfdbf7158a 100644 --- a/tencentcloud/resource_tc_cam_oidc_sso.go +++ b/tencentcloud/services/cam/resource_tc_cam_oidc_sso.go @@ -1,15 +1,18 @@ -package tencentcloud +package cam import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamOIDCSSO() *schema.Resource { +func ResourceTencentCloudCamOIDCSSO() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamOIDCSSOCreate, Read: resourceTencentCloudCamOIDCSSORead, @@ -66,9 +69,9 @@ func resourceTencentCloudCamOIDCSSO() *schema.Resource { } func resourceTencentCloudCamOIDCSSOCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_oidc_sso.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_oidc_sso.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewCreateUserOIDCConfigRequest() request.IdentityUrl = helper.String(d.Get("identity_url").(string)) @@ -84,12 +87,12 @@ func resourceTencentCloudCamOIDCSSOCreate(d *schema.ResourceData, meta interface request.Scope = helper.InterfacesStringsPoint([]interface{}{"openid"}) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().CreateUserOIDCConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().CreateUserOIDCConfig(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + 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()) @@ -105,15 +108,15 @@ func resourceTencentCloudCamOIDCSSOCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudCamOIDCSSORead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_oidc_sso.read")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_oidc_sso.read")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewDescribeUserOIDCConfigRequest() var response *cam.DescribeUserOIDCConfigResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().DescribeUserOIDCConfig(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().DescribeUserOIDCConfig(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -145,8 +148,8 @@ func resourceTencentCloudCamOIDCSSORead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudCamOIDCSSOUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_oidc_sso.update")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_cam_oidc_sso.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewUpdateUserOIDCConfigRequest() if d.HasChange("authorization_endpoint") || d.HasChange("client_id") || d.HasChange("identity_key") || d.HasChange("identity_url") || d.HasChange("mapping_filed") || d.HasChange("response_mode") || d.HasChange("response_type") || d.HasChange("scope") { request.AuthorizationEndpoint = helper.String(d.Get("authorization_endpoint").(string)) @@ -163,10 +166,10 @@ func resourceTencentCloudCamOIDCSSOUpdate(d *schema.ResourceData, meta interface } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().UpdateUserOIDCConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdateUserOIDCConfig(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -179,13 +182,13 @@ func resourceTencentCloudCamOIDCSSOUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudCamOIDCSSODelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_oidc_sso.delete")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_cam_oidc_sso.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewDisableUserSSORequest() - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().DisableUserSSO(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().DisableUserSSO(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cam_oidc_sso_test.go b/tencentcloud/services/cam/resource_tc_cam_oidc_sso_test.go similarity index 97% rename from tencentcloud/resource_tc_cam_oidc_sso_test.go rename to tencentcloud/services/cam/resource_tc_cam_oidc_sso_test.go index f7cbd42852..93c02e9259 100644 --- a/tencentcloud/resource_tc_cam_oidc_sso_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_oidc_sso_test.go @@ -1,10 +1,13 @@ -package tencentcloud +package cam_test import ( "fmt" "log" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" @@ -15,13 +18,13 @@ func init() { resource.AddTestSweepers("tencentcloud_cam_oidc_sso", &resource.Sweeper{ Name: "tencentcloud_cam_oidc_sso", F: func(r string) error { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewDisableUserSSORequest() - cli, _ := sharedClientForRegion(r) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := cli.(*TencentCloudClient).apiV3Conn.UseCamClient().DisableUserSSO(request) + cli, _ := tcacctest.SharedClientForRegion(r) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := cli.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().DisableUserSSO(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -37,8 +40,8 @@ func init() { func TestAccTencentCloudCamOIDCSSO(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamOIDCSSODestroy, Steps: []resource.TestStep{ { @@ -79,7 +82,7 @@ func testAccCheckCamOIDCSSODestroy(s *terraform.State) error { } request := cam.NewDescribeUserOIDCConfigRequest() - response, e := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn.UseCamClient().DescribeUserOIDCConfig(request) + response, e := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().DescribeUserOIDCConfig(request) if e != nil { return e } @@ -101,7 +104,7 @@ func testAccCheckCamOIDCSSOExists(n string) resource.TestCheckFunc { return fmt.Errorf("[Exists] check: CAM-OIDC-SSO id is not set") } request := cam.NewDescribeUserOIDCConfigRequest() - response, e := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn.UseCamClient().DescribeUserOIDCConfig(request) + response, e := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().DescribeUserOIDCConfig(request) if e != nil { return e } diff --git a/tencentcloud/resource_tc_cam_policy.go b/tencentcloud/services/cam/resource_tc_cam_policy.go similarity index 79% rename from tencentcloud/resource_tc_cam_policy.go rename to tencentcloud/services/cam/resource_tc_cam_policy.go index 8c77f9f1b7..f790af3a91 100644 --- a/tencentcloud/resource_tc_cam_policy.go +++ b/tencentcloud/services/cam/resource_tc_cam_policy.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -10,14 +10,17 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamPolicy() *schema.Resource { +func ResourceTencentCloudCamPolicy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamPolicyCreate, Read: resourceTencentCloudCamPolicyRead, @@ -78,15 +81,15 @@ func resourceTencentCloudCamPolicy() *schema.Resource { } func resourceTencentCloudCamPolicyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_policy.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_policy.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) name := d.Get("name").(string) document := d.Get("document").(string) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } documentErr := camService.PolicyDocumentForceCheck(document) if documentErr != nil { @@ -100,8 +103,8 @@ func resourceTencentCloudCamPolicyCreate(d *schema.ResourceData, meta interface{ } var response *cam.CreatePolicyResponse - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().CreatePolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().CreatePolicy(request) if e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { errCode := ee.GetCode() @@ -112,7 +115,7 @@ func resourceTencentCloudCamPolicyCreate(d *schema.ResourceData, meta interface{ } log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + 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()) @@ -130,13 +133,13 @@ func resourceTencentCloudCamPolicyCreate(d *schema.ResourceData, meta interface{ d.SetId(strconv.Itoa(int(*response.Response.PolicyId))) //get really instance then read - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) policyId := d.Id() - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, e := camService.DescribePolicyById(ctx, policyId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if instance == nil { return resource.RetryableError(fmt.Errorf("creation not done")) @@ -152,21 +155,21 @@ func resourceTencentCloudCamPolicyCreate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCamPolicyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_policy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_policy.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) policyId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *cam.GetPolicyResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := camService.DescribePolicyById(ctx, policyId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -194,9 +197,9 @@ func resourceTencentCloudCamPolicyRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudCamPolicyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_policy.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_policy.update")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) policyId := d.Id() policyIdInt, e := strconv.Atoi(policyId) @@ -221,7 +224,7 @@ func resourceTencentCloudCamPolicyUpdate(d *schema.ResourceData, meta interface{ if d.HasChange("document") { document := d.Get("document").(string) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } documentErr := camService.PolicyDocumentForceCheck(document) if documentErr != nil { @@ -232,13 +235,13 @@ func resourceTencentCloudCamPolicyUpdate(d *schema.ResourceData, meta interface{ } if changeFlag { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().UpdatePolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdatePolicy(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) @@ -255,9 +258,9 @@ func resourceTencentCloudCamPolicyUpdate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCamPolicyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_policy.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_policy.delete")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) policyId := d.Id() policyIdInt, e := strconv.Atoi(policyId) @@ -267,11 +270,11 @@ func resourceTencentCloudCamPolicyDelete(d *schema.ResourceData, meta interface{ policyIdInt64 := uint64(policyIdInt) request := cam.NewDeletePolicyRequest() request.PolicyId = []*uint64{&policyIdInt64} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().DeletePolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().DeletePolicy(request) if e != nil { log.Printf("[CRITAL]%s reason[%s]\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cam_policy_by_name.go b/tencentcloud/services/cam/resource_tc_cam_policy_by_name.go similarity index 77% rename from tencentcloud/resource_tc_cam_policy_by_name.go rename to tencentcloud/services/cam/resource_tc_cam_policy_by_name.go index df52eafa54..3a36edcb1a 100644 --- a/tencentcloud/resource_tc_cam_policy_by_name.go +++ b/tencentcloud/services/cam/resource_tc_cam_policy_by_name.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -10,14 +10,17 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamPolicyByName() *schema.Resource { +func ResourceTencentCloudCamPolicyByName() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamPolicyByNameCreate, Read: resourceTencentCloudCamPolicyByNameRead, @@ -78,15 +81,15 @@ func resourceTencentCloudCamPolicyByName() *schema.Resource { } func resourceTencentCloudCamPolicyByNameCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_policy_by_name.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_policy_by_name.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) name := d.Get("name").(string) document := d.Get("document").(string) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } documentErr := camService.PolicyDocumentForceCheck(document) if documentErr != nil { @@ -100,8 +103,8 @@ func resourceTencentCloudCamPolicyByNameCreate(d *schema.ResourceData, meta inte } var response *cam.CreatePolicyResponse - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().CreatePolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().CreatePolicy(request) if e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { errCode := ee.GetCode() @@ -112,7 +115,7 @@ func resourceTencentCloudCamPolicyByNameCreate(d *schema.ResourceData, meta inte } log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + 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()) @@ -130,14 +133,14 @@ func resourceTencentCloudCamPolicyByNameCreate(d *schema.ResourceData, meta inte d.SetId(name) //get really instance then read - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { parmas := make(map[string]interface{}) parmas["name"] = name instances, e := camService.DescribePoliciesByFilter(ctx, parmas) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if len(instances) == 0 { return resource.RetryableError(fmt.Errorf("creation not done")) @@ -153,24 +156,24 @@ func resourceTencentCloudCamPolicyByNameCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudCamPolicyByNameRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_policy_by_name.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_policy_by_name.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) policyName := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var policies []*cam.StrategyInfo params := make(map[string]interface{}) params["name"] = policyName - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { var innerErr error policies, innerErr = camService.DescribePoliciesByFilter(ctx, params) if innerErr != nil { - return retryError(innerErr, InternalError) + return tccommon.RetryError(innerErr, tccommon.InternalError) } return nil }) @@ -182,11 +185,11 @@ func resourceTencentCloudCamPolicyByNameRead(d *schema.ResourceData, meta interf return nil } var instance *cam.GetPolicyResponse - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { policyId := strconv.Itoa(int(*policies[0].PolicyId)) result, e := camService.DescribePolicyById(ctx, policyId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -214,9 +217,9 @@ func resourceTencentCloudCamPolicyByNameRead(d *schema.ResourceData, meta interf } func resourceTencentCloudCamPolicyByNameUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_policy_by_name.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_policy_by_name.update")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) policyName := d.Id() request := cam.NewUpdatePolicyRequest() @@ -236,7 +239,7 @@ func resourceTencentCloudCamPolicyByNameUpdate(d *schema.ResourceData, meta inte if d.HasChange("document") { document := d.Get("document").(string) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } documentErr := camService.PolicyDocumentForceCheck(document) if documentErr != nil { @@ -247,13 +250,13 @@ func resourceTencentCloudCamPolicyByNameUpdate(d *schema.ResourceData, meta inte } if changeFlag { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().UpdatePolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdatePolicy(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) @@ -270,22 +273,22 @@ func resourceTencentCloudCamPolicyByNameUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudCamPolicyByNameDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_policy_by_name.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_policy_by_name.delete")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var policies []*cam.StrategyInfo policyName := d.Id() params := make(map[string]interface{}) params["name"] = policyName camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - ctx := context.WithValue(context.TODO(), logIdKey, logId) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { var innerErr error policies, innerErr = camService.DescribePoliciesByFilter(ctx, params) if innerErr != nil { - return retryError(innerErr, InternalError) + return tccommon.RetryError(innerErr, tccommon.InternalError) } return nil }) @@ -300,11 +303,11 @@ func resourceTencentCloudCamPolicyByNameDelete(d *schema.ResourceData, meta inte policyId := policies[0].PolicyId request := cam.NewDeletePolicyRequest() request.PolicyId = []*uint64{policyId} - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().DeletePolicy(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().DeletePolicy(request) if e != nil { log.Printf("[CRITAL]%s reason[%s]\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cam_policy_by_name_test.go b/tencentcloud/services/cam/resource_tc_cam_policy_by_name_test.go similarity index 80% rename from tencentcloud/resource_tc_cam_policy_by_name_test.go rename to tencentcloud/services/cam/resource_tc_cam_policy_by_name_test.go index e19946f664..7d46c6e53c 100644 --- a/tencentcloud/resource_tc_cam_policy_by_name_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_policy_by_name_test.go @@ -1,18 +1,22 @@ -package tencentcloud +package cam_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) func TestAccTencentCloudCamPolicyByNameResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamPolicyByNameDestroy, Steps: []resource.TestStep{ { @@ -41,12 +45,10 @@ func TestAccTencentCloudCamPolicyByNameResource_basic(t *testing.T) { } func testAccCheckCamPolicyByNameDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cam_policy_by_name" { continue @@ -64,8 +66,8 @@ func testAccCheckCamPolicyByNameDestroy(s *terraform.State) error { func testAccCheckCamPolicyByNameExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -74,9 +76,7 @@ func testAccCheckCamPolicyByNameExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CAM policy][Exists] check: CAM policy id is not set") } - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) params := make(map[string]interface{}) params["name"] = rs.Primary.ID instances, err := camService.DescribePoliciesByFilter(ctx, params) diff --git a/tencentcloud/resource_tc_cam_policy_test.go b/tencentcloud/services/cam/resource_tc_cam_policy_test.go similarity index 79% rename from tencentcloud/resource_tc_cam_policy_test.go rename to tencentcloud/services/cam/resource_tc_cam_policy_test.go index 03ab8b4b92..04c4658ac1 100644 --- a/tencentcloud/resource_tc_cam_policy_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_policy_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam_test import ( "context" @@ -7,10 +7,15 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + tccam "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" ) func init() { @@ -18,11 +23,11 @@ func init() { resource.AddTestSweepers("tencentcloud_cam_policy", &resource.Sweeper{ Name: "tencentcloud_cam_policy", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := CamService{client: client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := tccam.NewCamService(client) policies, err := service.DescribePoliciesByFilter(ctx, map[string]interface{}{"name": "cam-policy-test"}) if err != nil { @@ -56,8 +61,8 @@ func init() { func TestAccTencentCloudCamPolicy_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamPolicyDestroy, Steps: []resource.TestStep{ { @@ -86,12 +91,10 @@ func TestAccTencentCloudCamPolicy_basic(t *testing.T) { } func testAccCheckCamPolicyDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := tccam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cam_policy" { continue @@ -107,8 +110,8 @@ func testAccCheckCamPolicyDestroy(s *terraform.State) error { func testAccCheckCamPolicyExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -117,9 +120,7 @@ func testAccCheckCamPolicyExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CAM policy][Exists] check: CAM policy id is not set") } - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := tccam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := camService.DescribePolicyById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_cam_policy_version.go b/tencentcloud/services/cam/resource_tc_cam_policy_version.go similarity index 78% rename from tencentcloud/resource_tc_cam_policy_version.go rename to tencentcloud/services/cam/resource_tc_cam_policy_version.go index f5a9dca1ee..558c019025 100644 --- a/tencentcloud/resource_tc_cam_policy_version.go +++ b/tencentcloud/services/cam/resource_tc_cam_policy_version.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamPolicyVersion() *schema.Resource { +func ResourceTencentCloudCamPolicyVersion() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamPolicyVersionCreate, Read: resourceTencentCloudCamPolicyVersionRead, @@ -78,10 +81,10 @@ func resourceTencentCloudCamPolicyVersion() *schema.Resource { } func resourceTencentCloudCamPolicyVersionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_policy_version.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_policy_version.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cam.NewCreatePolicyVersionRequest() @@ -102,10 +105,10 @@ func resourceTencentCloudCamPolicyVersionCreate(d *schema.ResourceData, meta int request.SetAsDefault = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().CreatePolicyVersion(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().CreatePolicyVersion(request) if e != nil { - return retryError(e) + 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()) } @@ -120,22 +123,22 @@ func resourceTencentCloudCamPolicyVersionCreate(d *schema.ResourceData, meta int return fmt.Errorf("CAM policy version is null") } versionId = helper.UInt64ToStr(*response.Response.VersionId) - d.SetId(policyId + FILED_SP + versionId) + d.SetId(policyId + tccommon.FILED_SP + versionId) return resourceTencentCloudCamPolicyVersionRead(d, meta) } func resourceTencentCloudCamPolicyVersionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_policy_version.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_policy_version.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -182,14 +185,14 @@ func resourceTencentCloudCamPolicyVersionRead(d *schema.ResourceData, meta inter } func resourceTencentCloudCamPolicyVersionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_policy_version.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_policy_version.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -203,8 +206,8 @@ func resourceTencentCloudCamPolicyVersionDelete(d *schema.ResourceData, meta int return nil } func resourceTencentCloudCamPolicyVersionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_policy_version.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_policy_version.update")() + defer tccommon.InconsistentCheck(d, meta)() return resourceTencentCloudCamPolicyVersionRead(d, meta) } diff --git a/tencentcloud/resource_tc_cam_policy_version_test.go b/tencentcloud/services/cam/resource_tc_cam_policy_version_test.go similarity index 91% rename from tencentcloud/resource_tc_cam_policy_version_test.go rename to tencentcloud/services/cam/resource_tc_cam_policy_version_test.go index c8efbdc00a..0e109d7187 100644 --- a/tencentcloud/resource_tc_cam_policy_version_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_policy_version_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCamPolicyVersionResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCamPolicyVersion, diff --git a/tencentcloud/resource_tc_cam_role.go b/tencentcloud/services/cam/resource_tc_cam_role.go similarity index 77% rename from tencentcloud/resource_tc_cam_role.go rename to tencentcloud/services/cam/resource_tc_cam_role.go index bc1f320e78..2133510470 100644 --- a/tencentcloud/resource_tc_cam_role.go +++ b/tencentcloud/services/cam/resource_tc_cam_role.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -9,14 +9,17 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamRole() *schema.Resource { +func ResourceTencentCloudCamRole() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamRoleCreate, Read: resourceTencentCloudCamRoleRead, @@ -87,15 +90,15 @@ func resourceTencentCloudCamRole() *schema.Resource { } func resourceTencentCloudCamRoleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) name := d.Get("name").(string) document := d.Get("document").(string) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } //documentErr := camService.PolicyDocumentForceCheck(document) //if documentErr != nil { @@ -120,8 +123,8 @@ func resourceTencentCloudCamRoleCreate(d *schema.ResourceData, meta interface{}) } var response *cam.CreateRoleResponse - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().CreateRole(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().CreateRole(request) if e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { errCode := ee.GetCode() @@ -132,7 +135,7 @@ func resourceTencentCloudCamRoleCreate(d *schema.ResourceData, meta interface{}) } log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + 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()) @@ -150,13 +153,13 @@ func resourceTencentCloudCamRoleCreate(d *schema.ResourceData, meta interface{}) d.SetId(*response.Response.RoleId) //get really instance then read - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) roleId := d.Id() - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, e := camService.DescribeRoleById(ctx, roleId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if instance == nil { return resource.RetryableError(fmt.Errorf("creation not done")) @@ -170,8 +173,8 @@ func resourceTencentCloudCamRoleCreate(d *schema.ResourceData, meta interface{}) //modify tags if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - resourceName := BuildTagResourceName("cam", "role", "", roleId) + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + resourceName := tccommon.BuildTagResourceName("cam", "role", "", roleId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -181,21 +184,21 @@ func resourceTencentCloudCamRoleCreate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudCamRoleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) roleId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *cam.RoleInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := camService.DescribeRoleById(ctx, roleId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -230,7 +233,7 @@ func resourceTencentCloudCamRoleRead(d *schema.ResourceData, meta interface{}) e } //tags - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} tags, err := tagService.DescribeResourceTags(ctx, "cam", "role", "", roleId) if err != nil { return err @@ -241,10 +244,10 @@ func resourceTencentCloudCamRoleRead(d *schema.ResourceData, meta interface{}) e } func resourceTencentCloudCamRoleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) d.Partial(true) @@ -258,13 +261,13 @@ func resourceTencentCloudCamRoleUpdate(d *schema.ResourceData, meta interface{}) mDescRequest := cam.NewUpdateRoleDescriptionRequest() mDescRequest.Description = &description mDescRequest.RoleId = &roleId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().UpdateRoleDescription(mDescRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdateRoleDescription(mDescRequest) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, mDescRequest.GetAction(), mDescRequest.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, mDescRequest.GetAction(), mDescRequest.ToJsonString(), response.ToJsonString()) @@ -282,7 +285,7 @@ func resourceTencentCloudCamRoleUpdate(d *schema.ResourceData, meta interface{}) document = d.Get("document").(string) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } documentErr := camService.PolicyDocumentForceCheck(document) if documentErr != nil { @@ -291,13 +294,13 @@ func resourceTencentCloudCamRoleUpdate(d *schema.ResourceData, meta interface{}) mDocRequest := cam.NewUpdateAssumeRolePolicyRequest() mDocRequest.PolicyDocument = &document mDocRequest.RoleId = &roleId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().UpdateAssumeRolePolicy(mDocRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdateAssumeRolePolicy(mDocRequest) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, mDocRequest.GetAction(), mDocRequest.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, mDocRequest.GetAction(), mDocRequest.ToJsonString(), response.ToJsonString()) @@ -318,9 +321,9 @@ func resourceTencentCloudCamRoleUpdate(d *schema.ResourceData, meta interface{}) oldInterface, newInterface := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) tagService := TagService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - resourceName := BuildTagResourceName("cam", "role", "", roleId) + resourceName := tccommon.BuildTagResourceName("cam", "role", "", roleId) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -342,13 +345,13 @@ func resourceTencentCloudCamRoleUpdate(d *schema.ResourceData, meta interface{}) consoleLoginRequest.RoleId = helper.StrToInt64Point(roleId) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().UpdateRoleConsoleLogin(consoleLoginRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdateRoleConsoleLogin(consoleLoginRequest) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, consoleLoginRequest.GetAction(), consoleLoginRequest.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, consoleLoginRequest.GetAction(), consoleLoginRequest.ToJsonString(), response.ToJsonString()) @@ -369,20 +372,20 @@ func resourceTencentCloudCamRoleUpdate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudCamRoleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) roleId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := camService.DeleteRoleById(ctx, roleId) if e != nil { log.Printf("[CRITAL]%s reason[%s]\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cam_role_by_name.go b/tencentcloud/services/cam/resource_tc_cam_role_by_name.go similarity index 76% rename from tencentcloud/resource_tc_cam_role_by_name.go rename to tencentcloud/services/cam/resource_tc_cam_role_by_name.go index 530bd94937..d6a65ff0f4 100644 --- a/tencentcloud/resource_tc_cam_role_by_name.go +++ b/tencentcloud/services/cam/resource_tc_cam_role_by_name.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -9,14 +9,17 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamRoleByName() *schema.Resource { +func ResourceTencentCloudCamRoleByName() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamRoleByNameCreate, Read: resourceTencentCloudCamRoleByNameRead, @@ -83,15 +86,15 @@ func resourceTencentCloudCamRoleByName() *schema.Resource { } func resourceTencentCloudCamRoleByNameCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_by_name.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_by_name.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) name := d.Get("name").(string) document := d.Get("document").(string) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } request := cam.NewCreateRoleRequest() @@ -109,8 +112,8 @@ func resourceTencentCloudCamRoleByNameCreate(d *schema.ResourceData, meta interf request.ConsoleLogin = &loginInt } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().CreateRole(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().CreateRole(request) if e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { errCode := ee.GetCode() @@ -121,7 +124,7 @@ func resourceTencentCloudCamRoleByNameCreate(d *schema.ResourceData, meta interf } log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + 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()) @@ -136,15 +139,15 @@ func resourceTencentCloudCamRoleByNameCreate(d *schema.ResourceData, meta interf d.SetId(name) //get really instance then read - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instances []*cam.RoleInfo - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { params := make(map[string]interface{}) params["name"] = name var innerErr error instances, innerErr = camService.DescribeRolesByFilter(ctx, params) if innerErr != nil { - return retryError(innerErr) + return tccommon.RetryError(innerErr) } if len(instances) == 0 { return resource.RetryableError(fmt.Errorf("creation not done")) @@ -162,8 +165,8 @@ func resourceTencentCloudCamRoleByNameCreate(d *schema.ResourceData, meta interf if len(instances) != 0 { instance = instances[0] } - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - resourceName := BuildTagResourceName("cam", "role", "", *instance.RoleId) + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + resourceName := tccommon.BuildTagResourceName("cam", "role", "", *instance.RoleId) log.Printf("resourceName: %v", resourceName) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -174,24 +177,24 @@ func resourceTencentCloudCamRoleByNameCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudCamRoleByNameRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_by_name.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_by_name.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) roleName := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *cam.RoleInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { params := make(map[string]interface{}) params["name"] = roleName instances, e := camService.DescribeRolesByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if len(instances) != 0 { instance = instances[0] @@ -227,7 +230,7 @@ func resourceTencentCloudCamRoleByNameRead(d *schema.ResourceData, meta interfac } //tags - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} tags, err := tagService.DescribeResourceTags(ctx, "cam", "role", "", *instance.RoleId) if err != nil { return err @@ -238,10 +241,10 @@ func resourceTencentCloudCamRoleByNameRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudCamRoleByNameUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_by_name.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_by_name.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) d.Partial(true) @@ -255,13 +258,13 @@ func resourceTencentCloudCamRoleByNameUpdate(d *schema.ResourceData, meta interf mDescRequest := cam.NewUpdateRoleDescriptionRequest() mDescRequest.Description = &description mDescRequest.RoleName = &roleName - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().UpdateRoleDescription(mDescRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdateRoleDescription(mDescRequest) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, mDescRequest.GetAction(), mDescRequest.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, mDescRequest.GetAction(), mDescRequest.ToJsonString(), response.ToJsonString()) @@ -279,7 +282,7 @@ func resourceTencentCloudCamRoleByNameUpdate(d *schema.ResourceData, meta interf document = d.Get("document").(string) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } documentErr := camService.PolicyDocumentForceCheck(document) if documentErr != nil { @@ -288,13 +291,13 @@ func resourceTencentCloudCamRoleByNameUpdate(d *schema.ResourceData, meta interf mDocRequest := cam.NewUpdateAssumeRolePolicyRequest() mDocRequest.PolicyDocument = &document mDocRequest.RoleName = &roleName - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().UpdateAssumeRolePolicy(mDocRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdateAssumeRolePolicy(mDocRequest) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, mDocRequest.GetAction(), mDocRequest.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, mDocRequest.GetAction(), mDocRequest.ToJsonString(), response.ToJsonString()) @@ -315,19 +318,19 @@ func resourceTencentCloudCamRoleByNameUpdate(d *schema.ResourceData, meta interf oldInterface, newInterface := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) tagService := TagService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *cam.RoleInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { params := make(map[string]interface{}) params["name"] = roleName camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } instances, e := camService.DescribeRolesByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if len(instances) != 0 { instance = instances[0] @@ -341,7 +344,7 @@ func resourceTencentCloudCamRoleByNameUpdate(d *schema.ResourceData, meta interf if instance == nil { return fmt.Errorf("Instance can not find by name!") } - resourceName := BuildTagResourceName("cam", "role", "", *instance.RoleId) + resourceName := tccommon.BuildTagResourceName("cam", "role", "", *instance.RoleId) err = tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -353,20 +356,20 @@ func resourceTencentCloudCamRoleByNameUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudCamRoleByNameDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_by_name.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_by_name.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) roleName := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := camService.DeleteRoleByName(ctx, roleName) if e != nil { log.Printf("[CRITAL]%s reason[%s]\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cam_role_by_name_test.go b/tencentcloud/services/cam/resource_tc_cam_role_by_name_test.go similarity index 77% rename from tencentcloud/resource_tc_cam_role_by_name_test.go rename to tencentcloud/services/cam/resource_tc_cam_role_by_name_test.go index 660306b715..7d2cdd05c2 100644 --- a/tencentcloud/resource_tc_cam_role_by_name_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_role_by_name_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package cam_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -12,19 +16,19 @@ import ( func TestAccTencentCloudCamRoleByNameResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCamRoleByNameDestroy, Steps: []resource.TestStep{ { - Config: testAccCamRoleByName_basic(ownerUin), + Config: testAccCamRoleByName_basic(tcacctest.OwnerUin), Check: resource.ComposeTestCheckFunc( testAccCamRoleByNameExists("tencentcloud_cam_role_by_name.role_basic"), resource.TestCheckResourceAttrSet("tencentcloud_cam_role_by_name.role_basic", "name"), resource.TestCheckResourceAttrSet("tencentcloud_cam_role_by_name.role_basic", "document"), ), }, { - Config: testAccCamRoleByName_update(ownerUin), + Config: testAccCamRoleByName_update(tcacctest.OwnerUin), Check: resource.ComposeTestCheckFunc( testAccCamRoleByNameExists("tencentcloud_cam_role_by_name.role_basic"), resource.TestCheckResourceAttrSet("tencentcloud_cam_role_by_name.role_basic", "name"), @@ -41,12 +45,10 @@ func TestAccTencentCloudCamRoleByNameResource_basic(t *testing.T) { } func testAccCamRoleByNameDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cam_role_by_name" { continue @@ -64,8 +66,8 @@ func testAccCamRoleByNameDestroy(s *terraform.State) error { func testAccCamRoleByNameExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -74,9 +76,7 @@ func testAccCamRoleByNameExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CAM role][Exists] check: CAM role id is not set") } - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) params := make(map[string]interface{}) params["name"] = rs.Primary.ID instances, err := camService.DescribeRolesByFilter(ctx, params) diff --git a/tencentcloud/resource_tc_cam_role_permission_boundary_attachment.go b/tencentcloud/services/cam/resource_tc_cam_role_permission_boundary_attachment.go similarity index 72% rename from tencentcloud/resource_tc_cam_role_permission_boundary_attachment.go rename to tencentcloud/services/cam/resource_tc_cam_role_permission_boundary_attachment.go index dea2c0d86c..2bd376c9c0 100644 --- a/tencentcloud/resource_tc_cam_role_permission_boundary_attachment.go +++ b/tencentcloud/services/cam/resource_tc_cam_role_permission_boundary_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamRolePermissionBoundaryAttachment() *schema.Resource { +func ResourceTencentCloudCamRolePermissionBoundaryAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamRolePermissionBoundaryAttachmentCreate, Read: resourceTencentCloudCamRolePermissionBoundaryAttachmentRead, @@ -47,10 +50,10 @@ func resourceTencentCloudCamRolePermissionBoundaryAttachment() *schema.Resource } func resourceTencentCloudCamRolePermissionBoundaryAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_permission_boundary_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_permission_boundary_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cam.NewPutRolePermissionsBoundaryRequest() @@ -73,10 +76,10 @@ func resourceTencentCloudCamRolePermissionBoundaryAttachmentCreate(d *schema.Res request.RoleName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().PutRolePermissionsBoundary(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().PutRolePermissionsBoundary(request) if e != nil { - return retryError(e) + 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()) } @@ -87,22 +90,22 @@ func resourceTencentCloudCamRolePermissionBoundaryAttachmentCreate(d *schema.Res return err } - d.SetId(policyId + FILED_SP + roleId + FILED_SP + roleName) + d.SetId(policyId + tccommon.FILED_SP + roleId + tccommon.FILED_SP + roleName) return resourceTencentCloudCamRolePermissionBoundaryAttachmentRead(d, meta) } func resourceTencentCloudCamRolePermissionBoundaryAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_permission_boundary_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_permission_boundary_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -143,14 +146,14 @@ func resourceTencentCloudCamRolePermissionBoundaryAttachmentRead(d *schema.Resou } func resourceTencentCloudCamRolePermissionBoundaryAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_permission_boundary_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_permission_boundary_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_cam_role_permission_boundary_attachment_test.go b/tencentcloud/services/cam/resource_tc_cam_role_permission_boundary_attachment_test.go similarity index 87% rename from tencentcloud/resource_tc_cam_role_permission_boundary_attachment_test.go rename to tencentcloud/services/cam/resource_tc_cam_role_permission_boundary_attachment_test.go index 9fb378ec0d..69aee013f1 100644 --- a/tencentcloud/resource_tc_cam_role_permission_boundary_attachment_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_role_permission_boundary_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCamRolePermissionBoundaryAttachmentResource_basic(t *tes t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCamRolePermissionBoundaryAttachment, diff --git a/tencentcloud/resource_tc_cam_role_policy_attachment.go b/tencentcloud/services/cam/resource_tc_cam_role_policy_attachment.go similarity index 74% rename from tencentcloud/resource_tc_cam_role_policy_attachment.go rename to tencentcloud/services/cam/resource_tc_cam_role_policy_attachment.go index 9bb97127bb..84e7e8c40b 100644 --- a/tencentcloud/resource_tc_cam_role_policy_attachment.go +++ b/tencentcloud/services/cam/resource_tc_cam_role_policy_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -7,12 +7,14 @@ import ( "strconv" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" ) -func resourceTencentCloudCamRolePolicyAttachment() *schema.Resource { +func ResourceTencentCloudCamRolePolicyAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamRolePolicyAttachmentCreate, Read: resourceTencentCloudCamRolePolicyAttachmentRead, @@ -59,9 +61,9 @@ func resourceTencentCloudCamRolePolicyAttachment() *schema.Resource { } func resourceTencentCloudCamRolePolicyAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_policy_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_policy_attachment.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) roleId := d.Get("role_id").(string) policyId, e := strconv.Atoi(d.Get("policy_id").(string)) @@ -73,12 +75,12 @@ func resourceTencentCloudCamRolePolicyAttachmentCreate(d *schema.ResourceData, m request.AttachRoleId = &roleId request.PolicyId = &policyId64 - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().AttachRolePolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().AttachRolePolicy(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + 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()) @@ -93,15 +95,15 @@ func resourceTencentCloudCamRolePolicyAttachmentCreate(d *schema.ResourceData, m d.SetId(roleId + "#" + strconv.Itoa(policyId)) //get really instance then read - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } rolePolicyAttachmentId := d.Id() - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, e := camService.DescribeRolePolicyAttachmentById(ctx, rolePolicyAttachmentId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if instance == nil { return resource.RetryableError(fmt.Errorf("creation not done")) @@ -117,22 +119,22 @@ func resourceTencentCloudCamRolePolicyAttachmentCreate(d *schema.ResourceData, m } func resourceTencentCloudCamRolePolicyAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_policy_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_policy_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rolePolicyAttachmentId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *cam.AttachedPolicyOfRole - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := camService.DescribeRolePolicyAttachmentById(ctx, rolePolicyAttachmentId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -162,21 +164,21 @@ func resourceTencentCloudCamRolePolicyAttachmentRead(d *schema.ResourceData, met } func resourceTencentCloudCamRolePolicyAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_policy_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_policy_attachment.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rolePolicyAttachmentId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := camService.DeleteRolePolicyAttachmentById(ctx, rolePolicyAttachmentId) if e != nil { log.Printf("[CRITAL]%s reason[%s]\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cam_role_policy_attachment_by_name.go b/tencentcloud/services/cam/resource_tc_cam_role_policy_attachment_by_name.go similarity index 75% rename from tencentcloud/resource_tc_cam_role_policy_attachment_by_name.go rename to tencentcloud/services/cam/resource_tc_cam_role_policy_attachment_by_name.go index 8c04cf9a06..3430ec2715 100644 --- a/tencentcloud/resource_tc_cam_role_policy_attachment_by_name.go +++ b/tencentcloud/services/cam/resource_tc_cam_role_policy_attachment_by_name.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -7,13 +7,16 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamRolePolicyAttachmentByName() *schema.Resource { +func ResourceTencentCloudCamRolePolicyAttachmentByName() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamRolePolicyAttachmentByNameCreate, Read: resourceTencentCloudCamRolePolicyAttachmentByNameRead, @@ -55,9 +58,9 @@ func resourceTencentCloudCamRolePolicyAttachmentByName() *schema.Resource { } func resourceTencentCloudCamRolePolicyAttachmentByNameCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_policy_attachment_by_name.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_policy_attachment_by_name.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) roleName := d.Get("role_name").(string) policyName := d.Get("policy_name").(string) @@ -66,12 +69,12 @@ func resourceTencentCloudCamRolePolicyAttachmentByNameCreate(d *schema.ResourceD request.PolicyName = helper.String(policyName) request.AttachRoleName = helper.String(roleName) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().AttachRolePolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().AttachRolePolicy(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + 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()) @@ -86,16 +89,16 @@ func resourceTencentCloudCamRolePolicyAttachmentByNameCreate(d *schema.ResourceD d.SetId(roleName + "#" + policyName) //get really instance then read - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } params := make(map[string]interface{}) params["policy_name"] = policyName - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, e := camService.DescribeRolePolicyAttachmentByName(ctx, roleName, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if instance == nil { return resource.RetryableError(fmt.Errorf("creation not done")) @@ -111,16 +114,16 @@ func resourceTencentCloudCamRolePolicyAttachmentByNameCreate(d *schema.ResourceD } func resourceTencentCloudCamRolePolicyAttachmentByNameRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_policy_attachment_by_name.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_policy_attachment_by_name.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rolePolicyAttachmentId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *cam.AttachedPolicyOfRole items := strings.Split(rolePolicyAttachmentId, "#") @@ -130,10 +133,10 @@ func resourceTencentCloudCamRolePolicyAttachmentByNameRead(d *schema.ResourceDat roleName, policyName := items[0], items[1] params := make(map[string]interface{}) params["policy_name"] = policyName - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := camService.DescribeRolePolicyAttachmentByName(ctx, roleName, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -157,26 +160,26 @@ func resourceTencentCloudCamRolePolicyAttachmentByNameRead(d *schema.ResourceDat } func resourceTencentCloudCamRolePolicyAttachmentByNameDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_policy_attachment_by_name.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_policy_attachment_by_name.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rolePolicyAttachmentId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } items := strings.Split(rolePolicyAttachmentId, "#") if len(items) < 2 { return fmt.Errorf("RolePolicyAttachmentId is invalid!") } roleName, policyName := items[0], items[1] - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := camService.DeleteRolePolicyAttachmentByName(ctx, roleName, policyName) if e != nil { log.Printf("[CRITAL]%s reason[%s]\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cam_role_policy_attachment_by_name_test.go b/tencentcloud/services/cam/resource_tc_cam_role_policy_attachment_by_name_test.go similarity index 77% rename from tencentcloud/resource_tc_cam_role_policy_attachment_by_name_test.go rename to tencentcloud/services/cam/resource_tc_cam_role_policy_attachment_by_name_test.go index 45a3a574ad..6c7853a3ac 100644 --- a/tencentcloud/resource_tc_cam_role_policy_attachment_by_name_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_role_policy_attachment_by_name_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam_test import ( "context" @@ -6,6 +6,10 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudCamRolePolicyAttachmentByNameResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamRolePolicyAttachmentByNameDestroy, Steps: []resource.TestStep{ { @@ -35,12 +39,10 @@ func TestAccTencentCloudCamRolePolicyAttachmentByNameResource_basic(t *testing.T } func testAccCheckCamRolePolicyAttachmentByNameDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cam_role_policy_attachment_by_name" { continue @@ -63,8 +65,8 @@ func testAccCheckCamRolePolicyAttachmentByNameDestroy(s *terraform.State) error func testAccCheckCamRolePolicyAttachmentByNameExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -73,9 +75,7 @@ func testAccCheckCamRolePolicyAttachmentByNameExists(n string) resource.TestChec if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CAM role policy attachment][Exist] check: CAM role policy attachment id is not set") } - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) items := strings.Split(rs.Primary.ID, "#") if len(items) < 2 { return fmt.Errorf("RolePolicyAttachmentId is invalid!") @@ -95,9 +95,9 @@ func testAccCheckCamRolePolicyAttachmentByNameExists(n string) resource.TestChec } } -//need to add policy resource definition +// need to add policy resource definition func testAccCamRolePolicyAttachmentByName_basic() string { - return defaultCamVariables + ` + return tcacctest.DefaultCamVariables + ` resource "tencentcloud_cam_role_policy_attachment_by_name" "role_policy_attachment_basic" { role_name = var.cam_role_basic policy_name = var.cam_policy_basic diff --git a/tencentcloud/resource_tc_cam_role_policy_attachment_test.go b/tencentcloud/services/cam/resource_tc_cam_role_policy_attachment_test.go similarity index 75% rename from tencentcloud/resource_tc_cam_role_policy_attachment_test.go rename to tencentcloud/services/cam/resource_tc_cam_role_policy_attachment_test.go index a3cc016f11..4cce1eebbc 100644 --- a/tencentcloud/resource_tc_cam_role_policy_attachment_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_role_policy_attachment_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package cam_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudCamRolePolicyAttachmentResource_basic(t *testing.T) { // t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamRolePolicyAttachmentDestroy, Steps: []resource.TestStep{ { @@ -35,12 +39,10 @@ func TestAccTencentCloudCamRolePolicyAttachmentResource_basic(t *testing.T) { } func testAccCheckCamRolePolicyAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cam_role_policy_attachment" { continue @@ -56,8 +58,8 @@ func testAccCheckCamRolePolicyAttachmentDestroy(s *terraform.State) error { func testAccCheckCamRolePolicyAttachmentExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -66,9 +68,7 @@ func testAccCheckCamRolePolicyAttachmentExists(n string) resource.TestCheckFunc if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CAM role policy attachment][Exist] check: CAM role policy attachment id is not set") } - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := camService.DescribeRolePolicyAttachmentById(ctx, rs.Primary.ID) if err != nil { return err @@ -80,9 +80,9 @@ func testAccCheckCamRolePolicyAttachmentExists(n string) resource.TestCheckFunc } } -//need to add policy resource definition +// need to add policy resource definition func testAccCamRolePolicyAttachment_basic() string { - return defaultCamVariables + ` + return tcacctest.DefaultCamVariables + ` data "tencentcloud_cam_policies" "policy" { name = var.cam_policy_basic } diff --git a/tencentcloud/resource_tc_cam_role_sso.go b/tencentcloud/services/cam/resource_tc_cam_role_sso.go similarity index 75% rename from tencentcloud/resource_tc_cam_role_sso.go rename to tencentcloud/services/cam/resource_tc_cam_role_sso.go index 1f8bdf7a9e..2ee04bf624 100644 --- a/tencentcloud/resource_tc_cam_role_sso.go +++ b/tencentcloud/services/cam/resource_tc_cam_role_sso.go @@ -1,16 +1,19 @@ -package tencentcloud +package cam import ( "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamRoleSSO() *schema.Resource { +func ResourceTencentCloudCamRoleSSO() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamRoleSSOCreate, Read: resourceTencentCloudCamRoleSSORead, @@ -52,9 +55,9 @@ func resourceTencentCloudCamRoleSSO() *schema.Resource { } func resourceTencentCloudCamRoleSSOCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_sso.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_sso.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewCreateOIDCConfigRequest() request.Name = helper.String(d.Get("name").(string)) @@ -63,12 +66,12 @@ func resourceTencentCloudCamRoleSSOCreate(d *schema.ResourceData, meta interface request.Description = helper.String(d.Get("description").(string)) request.ClientId = helper.InterfacesStringsPoint(d.Get("client_ids").(*schema.Set).List()) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().CreateOIDCConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().CreateOIDCConfig(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + 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()) @@ -84,16 +87,16 @@ func resourceTencentCloudCamRoleSSOCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudCamRoleSSORead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_sso.read")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_sso.read")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewDescribeOIDCConfigRequest() request.Name = helper.String(d.Id()) var response *cam.DescribeOIDCConfigResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().DescribeOIDCConfig(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().DescribeOIDCConfig(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -122,8 +125,8 @@ func resourceTencentCloudCamRoleSSORead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudCamRoleSSOUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_sso.update")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_sso.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewUpdateOIDCConfigRequest() if d.HasChange("name") { return fmt.Errorf("not support change name") @@ -136,10 +139,10 @@ func resourceTencentCloudCamRoleSSOUpdate(d *schema.ResourceData, meta interface request.ClientId = helper.InterfacesStringsPoint(d.Get("client_ids").(*schema.Set).List()) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().UpdateOIDCConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdateOIDCConfig(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -152,15 +155,15 @@ func resourceTencentCloudCamRoleSSOUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudCamRoleSSODelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_role_sso.delete")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_cam_role_sso.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewDeleteOIDCConfigRequest() name := d.Id() request.Name = helper.String(name) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().DeleteOIDCConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().DeleteOIDCConfig(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cam_role_sso_test.go b/tencentcloud/services/cam/resource_tc_cam_role_sso_test.go similarity index 97% rename from tencentcloud/resource_tc_cam_role_sso_test.go rename to tencentcloud/services/cam/resource_tc_cam_role_sso_test.go index 4f8c97753d..6f1222fe37 100644 --- a/tencentcloud/resource_tc_cam_role_sso_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_role_sso_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam_test import ( "context" @@ -6,10 +6,14 @@ import ( "log" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -18,10 +22,10 @@ func init() { resource.AddTestSweepers("tencentcloud_cam_role_sso", &resource.Sweeper{ Name: "tencentcloud_cam_role_sso", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() request := cam.NewDescribeOIDCConfigRequest() request.Name = helper.String(defaultSSORoleName) @@ -39,7 +43,7 @@ func init() { return err } - log.Printf("[%s] success, request %s, response %s, logId %s", dReq.GetAction(), dReq.ToJsonString(), dRes.ToJsonString(), ctx.Value(logIdKey)) + log.Printf("[%s] success, request %s, response %s, logId %s", dReq.GetAction(), dReq.ToJsonString(), dRes.ToJsonString(), ctx.Value(tccommon.LogIdKey)) return nil }, @@ -49,8 +53,8 @@ func init() { func TestAccTencentCloudCamRoleSSO(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamRoleSSODestroy, Steps: []resource.TestStep{ { @@ -89,7 +93,7 @@ func testAccCheckCamRoleSSODestroy(s *terraform.State) error { request := cam.NewDescribeOIDCConfigRequest() request.Name = helper.String(rs.Primary.ID) - response, err := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn.UseCamClient().DescribeOIDCConfig(request) + response, err := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().DescribeOIDCConfig(request) if err != nil { if e, ok := err.(*errors.TencentCloudSDKError); ok { if e.GetCode() == "ResourceNotFound.IdentityNotExist" { @@ -117,7 +121,7 @@ func testAccCheckCamRoleSSOExists(n string) resource.TestCheckFunc { } request := cam.NewDescribeOIDCConfigRequest() request.Name = helper.String(rs.Primary.ID) - response, err := testAccProvider.Meta().(*TencentCloudClient).apiV3Conn.UseCamClient().DescribeOIDCConfig(request) + response, err := tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().DescribeOIDCConfig(request) if err != nil { return err } diff --git a/tencentcloud/resource_tc_cam_role_test.go b/tencentcloud/services/cam/resource_tc_cam_role_test.go similarity index 75% rename from tencentcloud/resource_tc_cam_role_test.go rename to tencentcloud/services/cam/resource_tc_cam_role_test.go index e762ad58cb..d5f8774260 100644 --- a/tencentcloud/resource_tc_cam_role_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_role_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam_test import ( "context" @@ -7,6 +7,10 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + tccam "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" + cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -18,12 +22,12 @@ func init() { resource.AddTestSweepers("tencentcloud_cam_role", &resource.Sweeper{ Name: "tencentcloud_cam_role", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() - service := CamService{client: client} + service := tccam.NewCamService(client) groups, err := service.DescribeRolesByFilter(ctx, nil) if err != nil { @@ -53,19 +57,19 @@ func init() { func TestAccTencentCloudCamRole_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamRoleDestroy, Steps: []resource.TestStep{ { - Config: testAccCamRole_basic(ownerUin), + Config: testAccCamRole_basic(tcacctest.OwnerUin), Check: resource.ComposeTestCheckFunc( testAccCheckCamRoleExists("tencentcloud_cam_role.role_basic"), resource.TestCheckResourceAttrSet("tencentcloud_cam_role.role_basic", "name"), resource.TestCheckResourceAttrSet("tencentcloud_cam_role.role_basic", "document"), ), }, { - Config: testAccCamRole_update(ownerUin), + Config: testAccCamRole_update(tcacctest.OwnerUin), Check: resource.ComposeTestCheckFunc( testAccCheckCamRoleExists("tencentcloud_cam_role.role_basic"), resource.TestCheckResourceAttrSet("tencentcloud_cam_role.role_basic", "name"), @@ -82,12 +86,10 @@ func TestAccTencentCloudCamRole_basic(t *testing.T) { } func testAccCheckCamRoleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := tccam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cam_role" { continue @@ -103,8 +105,8 @@ func testAccCheckCamRoleDestroy(s *terraform.State) error { func testAccCheckCamRoleExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -113,9 +115,7 @@ func testAccCheckCamRoleExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CAM role][Exists] check: CAM role id is not set") } - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := tccam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := camService.DescribeRoleById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_cam_saml_provider.go b/tencentcloud/services/cam/resource_tc_cam_saml_provider.go similarity index 76% rename from tencentcloud/resource_tc_cam_saml_provider.go rename to tencentcloud/services/cam/resource_tc_cam_saml_provider.go index 9a9f81e0d2..e9ad97484f 100644 --- a/tencentcloud/resource_tc_cam_saml_provider.go +++ b/tencentcloud/services/cam/resource_tc_cam_saml_provider.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -7,14 +7,17 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamSAMLProvider() *schema.Resource { +func ResourceTencentCloudCamSAMLProvider() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamSAMLProviderCreate, Read: resourceTencentCloudCamSAMLProviderRead, @@ -61,9 +64,9 @@ func resourceTencentCloudCamSAMLProvider() *schema.Resource { } func resourceTencentCloudCamSAMLProviderCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_saml_provider.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_saml_provider.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewCreateSAMLProviderRequest() request.Name = helper.String(d.Get("name").(string)) @@ -74,8 +77,8 @@ func resourceTencentCloudCamSAMLProviderCreate(d *schema.ResourceData, meta inte } var response *cam.CreateSAMLProviderResponse - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().CreateSAMLProvider(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().CreateSAMLProvider(request) if e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { errCode := ee.GetCode() @@ -86,7 +89,7 @@ func resourceTencentCloudCamSAMLProviderCreate(d *schema.ResourceData, meta inte } log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + 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()) @@ -106,16 +109,16 @@ func resourceTencentCloudCamSAMLProviderCreate(d *schema.ResourceData, meta inte _ = d.Set("provider_arn", *response.Response.ProviderArn) //get really instance then read - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) samlProviderId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, e := camService.DescribeSAMLProviderById(ctx, samlProviderId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if instance == nil { return resource.RetryableError(fmt.Errorf("creation not done")) @@ -132,21 +135,21 @@ func resourceTencentCloudCamSAMLProviderCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudCamSAMLProviderRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_saml_provider.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_saml_provider.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) samlProviderId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *cam.GetSAMLProviderResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := camService.DescribeSAMLProviderById(ctx, samlProviderId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -172,9 +175,9 @@ func resourceTencentCloudCamSAMLProviderRead(d *schema.ResourceData, meta interf } func resourceTencentCloudCamSAMLProviderUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_saml_provider.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_saml_provider.update")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) SAMLProviderId := d.Id() request := cam.NewUpdateSAMLProviderRequest() @@ -192,13 +195,13 @@ func resourceTencentCloudCamSAMLProviderUpdate(d *schema.ResourceData, meta inte } if changeFlag { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().UpdateSAMLProvider(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdateSAMLProvider(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) @@ -215,18 +218,18 @@ func resourceTencentCloudCamSAMLProviderUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudCamSAMLProviderDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_saml_provider.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_saml_provider.delete")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) SAMLProviderId := d.Id() request := cam.NewDeleteSAMLProviderRequest() request.Name = &SAMLProviderId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().DeleteSAMLProvider(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().DeleteSAMLProvider(request) if e != nil { log.Printf("[CRITAL]%s reason[%s]\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cam_saml_provider_test.go b/tencentcloud/services/cam/resource_tc_cam_saml_provider_test.go similarity index 91% rename from tencentcloud/resource_tc_cam_saml_provider_test.go rename to tencentcloud/services/cam/resource_tc_cam_saml_provider_test.go index e58a30e620..6103a64c07 100644 --- a/tencentcloud/resource_tc_cam_saml_provider_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_saml_provider_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam_test import ( "context" @@ -6,7 +6,12 @@ import ( "log" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + tccam "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" + cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -33,8 +38,8 @@ func init() { } func testAccDeleteSAMLProvider(region string, name string) error { - cli, _ := sharedClientForRegion(region) - client := cli.(*TencentCloudClient).apiV3Conn + cli, _ := tcacctest.SharedClientForRegion(region) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() request := cam.NewDeleteSAMLProviderRequest() request.Name = helper.String(name) @@ -46,8 +51,8 @@ func testAccDeleteSAMLProvider(region string, name string) error { func TestAccTencentCloudCamSAMLProvider_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamSAMLProviderDestroy, Steps: []resource.TestStep{ { @@ -77,12 +82,10 @@ func TestAccTencentCloudCamSAMLProvider_basic(t *testing.T) { } func testAccCheckCamSAMLProviderDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := tccam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cam_saml_provider" { continue @@ -98,8 +101,8 @@ func testAccCheckCamSAMLProviderDestroy(s *terraform.State) error { func testAccCheckCamSAMLProviderExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -108,9 +111,7 @@ func testAccCheckCamSAMLProviderExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CAM SAML provider][Exists] check: CAM SAML provider id is not set") } - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := tccam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := camService.DescribeSAMLProviderById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_cam_service_linked_role.go b/tencentcloud/services/cam/resource_tc_cam_service_linked_role.go similarity index 76% rename from tencentcloud/resource_tc_cam_service_linked_role.go rename to tencentcloud/services/cam/resource_tc_cam_service_linked_role.go index c9fe082c25..b80df4bbd3 100644 --- a/tencentcloud/resource_tc_cam_service_linked_role.go +++ b/tencentcloud/services/cam/resource_tc_cam_service_linked_role.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -7,13 +7,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamServiceLinkedRole() *schema.Resource { +func ResourceTencentCloudCamServiceLinkedRole() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudCamServiceLinkedRoleRead, Create: resourceTencentCloudCamServiceLinkedRoleCreate, @@ -55,10 +58,10 @@ func resourceTencentCloudCamServiceLinkedRole() *schema.Resource { } func resourceTencentCloudCamServiceLinkedRoleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_service_linked_role.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_service_linked_role.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cam.NewCreateServiceLinkedRoleRequest() @@ -94,10 +97,10 @@ func resourceTencentCloudCamServiceLinkedRoleCreate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().CreateServiceLinkedRole(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().CreateServiceLinkedRole(request) if e != nil { - return retryError(e) + 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()) @@ -114,9 +117,9 @@ func resourceTencentCloudCamServiceLinkedRoleCreate(d *schema.ResourceData, meta roleId = *response.Response.RoleId d.SetId(roleId) - //ctx := context.WithValue(context.TODO(), logIdKey, logId) + //ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) //if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - // tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} + // tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} // resourceName := fmt.Sprintf("qcs::cam:%s:uin/:role/tencentcloudServiceRole/%s", "", roleId) // if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { // return err @@ -126,12 +129,12 @@ func resourceTencentCloudCamServiceLinkedRoleCreate(d *schema.ResourceData, meta } func resourceTencentCloudCamServiceLinkedRoleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_service_linked_role.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_service_linked_role.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} roleId := d.Id() @@ -184,11 +187,11 @@ func resourceTencentCloudCamServiceLinkedRoleRead(d *schema.ResourceData, meta i } func resourceTencentCloudCamServiceLinkedRoleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_service_linked_role.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_service_linked_role.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) roleId := d.Id() @@ -200,10 +203,10 @@ func resourceTencentCloudCamServiceLinkedRoleUpdate(d *schema.ResourceData, meta request.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().UpdateRoleDescription(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdateRoleDescription(request) if e != nil { - return retryError(e) + 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()) @@ -217,11 +220,11 @@ func resourceTencentCloudCamServiceLinkedRoleUpdate(d *schema.ResourceData, meta } if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("cam", "role/tencentcloudServiceRole", "", d.Id()) + resourceName := tccommon.BuildTagResourceName("cam", "role/tencentcloudServiceRole", "", d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -231,13 +234,13 @@ func resourceTencentCloudCamServiceLinkedRoleUpdate(d *schema.ResourceData, meta } func resourceTencentCloudCamServiceLinkedRoleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_service_linked_role.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_service_linked_role.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} roleId := d.Id() @@ -254,10 +257,10 @@ func resourceTencentCloudCamServiceLinkedRoleDelete(d *schema.ResourceData, meta return err } - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { response, _ := service.DescribeCamServiceLinkedRoleDeleteStatus(ctx, deletionTaskId) // if errRet != nil { - // return retryError(errRet, InternalError) + // return tccommon.RetryError(errRet, tccommon.InternalError) // } if response == nil || response.Response == nil { return resource.NonRetryableError(fmt.Errorf("When querying the deletion status, an error occurred")) diff --git a/tencentcloud/resource_tc_cam_service_linked_role_test.go b/tencentcloud/services/cam/resource_tc_cam_service_linked_role_test.go similarity index 83% rename from tencentcloud/resource_tc_cam_service_linked_role_test.go rename to tencentcloud/services/cam/resource_tc_cam_service_linked_role_test.go index 877c193fb5..c740171a00 100644 --- a/tencentcloud/resource_tc_cam_service_linked_role_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_service_linked_role_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package cam_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudCamServiceLinkedRoleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamServiceLinkedRoleDestroy, Steps: []resource.TestStep{ { @@ -50,12 +54,10 @@ func TestAccTencentCloudCamServiceLinkedRoleResource_basic(t *testing.T) { } func testAccCheckCamServiceLinkedRoleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cam_service_linked_role" { continue @@ -75,8 +77,8 @@ func testAccCheckCamServiceLinkedRoleDestroy(s *terraform.State) error { func testAccCheckCamServiceLinkedRoleExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -88,9 +90,7 @@ func testAccCheckCamServiceLinkedRoleExists(n string) resource.TestCheckFunc { roleId := rs.Primary.ID - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := camService.DescribeCamServiceLinkedRole(ctx, roleId) if err != nil { return err diff --git a/tencentcloud/resource_tc_cam_set_policy_version_config.go b/tencentcloud/services/cam/resource_tc_cam_set_policy_version_config.go similarity index 69% rename from tencentcloud/resource_tc_cam_set_policy_version_config.go rename to tencentcloud/services/cam/resource_tc_cam_set_policy_version_config.go index e72cbe6fdc..0578e327fa 100644 --- a/tencentcloud/resource_tc_cam_set_policy_version_config.go +++ b/tencentcloud/services/cam/resource_tc_cam_set_policy_version_config.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamSetPolicyVersionConfig() *schema.Resource { +func ResourceTencentCloudCamSetPolicyVersionConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamSetPolicyVersionConfigCreate, Read: resourceTencentCloudCamSetPolicyVersionConfigRead, @@ -38,23 +41,23 @@ func resourceTencentCloudCamSetPolicyVersionConfig() *schema.Resource { } func resourceTencentCloudCamSetPolicyVersionConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_set_policy_version_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_set_policy_version_config.create")() + defer tccommon.InconsistentCheck(d, meta)() return resourceTencentCloudCamSetPolicyVersionConfigUpdate(d, meta) } func resourceTencentCloudCamSetPolicyVersionConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_set_policy_version_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_set_policy_version_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -82,10 +85,10 @@ func resourceTencentCloudCamSetPolicyVersionConfigRead(d *schema.ResourceData, m } func resourceTencentCloudCamSetPolicyVersionConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_set_policy_version_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_set_policy_version_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewSetDefaultPolicyVersionRequest() @@ -97,10 +100,10 @@ func resourceTencentCloudCamSetPolicyVersionConfigUpdate(d *schema.ResourceData, request.PolicyId = helper.StrToUint64Point(policyId) request.VersionId = helper.StrToUint64Point(versionId) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().SetDefaultPolicyVersion(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().SetDefaultPolicyVersion(request) if e != nil { - return retryError(e) + 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()) } @@ -110,14 +113,14 @@ func resourceTencentCloudCamSetPolicyVersionConfigUpdate(d *schema.ResourceData, log.Printf("[CRITAL]%s update cam SetPolicyVersionConfig failed, reason:%+v", logId, err) return err } - d.SetId(policyId + FILED_SP + versionId) + d.SetId(policyId + tccommon.FILED_SP + versionId) return resourceTencentCloudCamSetPolicyVersionConfigRead(d, meta) } func resourceTencentCloudCamSetPolicyVersionConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_set_policy_version_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_set_policy_version_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cam_set_policy_version_config_test.go b/tencentcloud/services/cam/resource_tc_cam_set_policy_version_config_test.go similarity index 90% rename from tencentcloud/resource_tc_cam_set_policy_version_config_test.go rename to tencentcloud/services/cam/resource_tc_cam_set_policy_version_config_test.go index b4437fe4a8..2c3327febc 100644 --- a/tencentcloud/resource_tc_cam_set_policy_version_config_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_set_policy_version_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCamSetPolicyVersionConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCamSetPolicyVersionConfig, diff --git a/tencentcloud/resource_tc_cam_tag_role_attachment.go b/tencentcloud/services/cam/resource_tc_cam_tag_role_attachment.go similarity index 76% rename from tencentcloud/resource_tc_cam_tag_role_attachment.go rename to tencentcloud/services/cam/resource_tc_cam_tag_role_attachment.go index e542b12771..6ba2a17a58 100644 --- a/tencentcloud/resource_tc_cam_tag_role_attachment.go +++ b/tencentcloud/services/cam/resource_tc_cam_tag_role_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamTagRoleAttachment() *schema.Resource { +func ResourceTencentCloudCamTagRoleAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamTagRoleCreateAttachment, Read: resourceTencentCloudCamTagRoleReadAttachment, @@ -62,10 +65,10 @@ func resourceTencentCloudCamTagRoleAttachment() *schema.Resource { } func resourceTencentCloudCamTagRoleCreateAttachment(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_tag_role_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_tag_role_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cam.NewTagRoleRequest() @@ -96,10 +99,10 @@ func resourceTencentCloudCamTagRoleCreateAttachment(d *schema.ResourceData, meta request.RoleId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().TagRole(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().TagRole(request) if e != nil { - return retryError(e) + 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()) } @@ -110,22 +113,22 @@ func resourceTencentCloudCamTagRoleCreateAttachment(d *schema.ResourceData, meta return err } - d.SetId(roleName + FILED_SP + roleId) + d.SetId(roleName + tccommon.FILED_SP + roleId) return resourceTencentCloudCamTagRoleReadAttachment(d, meta) } func resourceTencentCloudCamTagRoleReadAttachment(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_tag_role_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_tag_role_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -174,15 +177,15 @@ func resourceTencentCloudCamTagRoleReadAttachment(d *schema.ResourceData, meta i } func resourceTencentCloudCamTagRoleDeleteAttachment(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_tag_role_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_tag_role_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } diff --git a/tencentcloud/resource_tc_cam_tag_role_attachment_test.go b/tencentcloud/services/cam/resource_tc_cam_tag_role_attachment_test.go similarity index 84% rename from tencentcloud/resource_tc_cam_tag_role_attachment_test.go rename to tencentcloud/services/cam/resource_tc_cam_tag_role_attachment_test.go index 4b652f4a20..cbab3e9c7a 100644 --- a/tencentcloud/resource_tc_cam_tag_role_attachment_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_tag_role_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCamTagRoleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCamTagRole, diff --git a/tencentcloud/resource_tc_cam_user.go b/tencentcloud/services/cam/resource_tc_cam_user.go similarity index 80% rename from tencentcloud/resource_tc_cam_user.go rename to tencentcloud/services/cam/resource_tc_cam_user.go index 40c03b66f1..5d26f96d88 100644 --- a/tencentcloud/resource_tc_cam_user.go +++ b/tencentcloud/services/cam/resource_tc_cam_user.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -7,14 +7,17 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamUser() *schema.Resource { +func ResourceTencentCloudCamUser() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamUserCreate, Read: resourceTencentCloudCamUserRead, @@ -66,7 +69,7 @@ func resourceTencentCloudCamUser() *schema.Resource { Optional: true, Computed: true, Sensitive: true, - ValidateFunc: validateAsConfigPassword, + ValidateFunc: tccommon.ValidateAsConfigPassword, Description: "The password of the CAM user. Password should be at least 8 characters and no more than 32 characters, includes uppercase letters, lowercase letters, numbers and special characters. Only required when `console_login` is true. If not set, a random password will be automatically generated.", }, "need_reset_password": { @@ -123,9 +126,9 @@ func resourceTencentCloudCamUser() *schema.Resource { } func resourceTencentCloudCamUserCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_user.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_user.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cam.NewAddUserRequest() request.Name = helper.String(d.Get("name").(string)) @@ -171,8 +174,8 @@ func resourceTencentCloudCamUserCreate(d *schema.ResourceData, meta interface{}) } var response *cam.AddUserResponse - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().AddUser(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().AddUser(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) @@ -182,7 +185,7 @@ func resourceTencentCloudCamUserCreate(d *schema.ResourceData, meta interface{}) return resource.NonRetryableError(e) } } - return retryError(e) + 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()) @@ -204,14 +207,14 @@ func resourceTencentCloudCamUserCreate(d *schema.ResourceData, meta interface{}) _ = d.Set("secret_id", *response.Response.SecretId) //get really instance then read - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, e := camService.DescribeUserById(ctx, *response.Response.Name) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if instance == nil { return resource.RetryableError(fmt.Errorf("creation not done")) @@ -225,9 +228,9 @@ func resourceTencentCloudCamUserCreate(d *schema.ResourceData, meta interface{}) //modify tags if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := BuildTagResourceName("cam", "uin", region, helper.UInt64ToStr(*response.Response.Uin)) + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := tccommon.BuildTagResourceName("cam", "uin", region, helper.UInt64ToStr(*response.Response.Uin)) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -237,11 +240,11 @@ func resourceTencentCloudCamUserCreate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudCamUserRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_user.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_user.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) deleteForce := false if v, ok := d.GetOkExists("force_delete"); ok { @@ -251,13 +254,13 @@ func resourceTencentCloudCamUserRead(d *schema.ResourceData, meta interface{}) e userId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *cam.GetUserResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := camService.DescribeUserById(ctx, userId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -286,8 +289,8 @@ func resourceTencentCloudCamUserRead(d *schema.ResourceData, meta interface{}) e } //tags - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region tags, err := tagService.DescribeResourceTags(ctx, "cam", "uin", region, helper.UInt64ToStr(*instance.Response.Uin)) if err != nil { return err @@ -298,10 +301,10 @@ func resourceTencentCloudCamUserRead(d *schema.ResourceData, meta interface{}) e } func resourceTencentCloudCamUserUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_user.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_user.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) userId := d.Id() @@ -352,13 +355,13 @@ func resourceTencentCloudCamUserUpdate(d *schema.ResourceData, meta interface{}) } if len(updateAttrs) > 0 { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().UpdateUser(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdateUser(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) @@ -374,14 +377,14 @@ func resourceTencentCloudCamUserUpdate(d *schema.ResourceData, meta interface{}) //tag if d.HasChange("tags") { camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *cam.GetUserResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := camService.DescribeUserById(ctx, userId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -399,10 +402,10 @@ func resourceTencentCloudCamUserUpdate(d *schema.ResourceData, meta interface{}) oldInterface, newInterface := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) tagService := TagService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := BuildTagResourceName("cam", "uin", region, helper.UInt64ToStr(*instance.Response.Uin)) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := tccommon.BuildTagResourceName("cam", "uin", region, helper.UInt64ToStr(*instance.Response.Uin)) err = tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -414,9 +417,9 @@ func resourceTencentCloudCamUserUpdate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudCamUserDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_user.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_user.delete")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) userId := d.Id() request := cam.NewDeleteUserRequest() @@ -430,11 +433,11 @@ func resourceTencentCloudCamUserDelete(d *schema.ResourceData, meta interface{}) request.Force = helper.BoolToInt64Pointer(deleteForce) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().DeleteUser(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().DeleteUser(request) if e != nil { log.Printf("[CRITAL]%s reason[%s]\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cam_user_permission_boundary_attachment.go b/tencentcloud/services/cam/resource_tc_cam_user_permission_boundary_attachment.go similarity index 67% rename from tencentcloud/resource_tc_cam_user_permission_boundary_attachment.go rename to tencentcloud/services/cam/resource_tc_cam_user_permission_boundary_attachment.go index 334f2ebfe0..13edf83bf0 100644 --- a/tencentcloud/resource_tc_cam_user_permission_boundary_attachment.go +++ b/tencentcloud/services/cam/resource_tc_cam_user_permission_boundary_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamUserPermissionBoundaryAttachment() *schema.Resource { +func ResourceTencentCloudCamUserPermissionBoundaryAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamUserPermissionBoundaryAttachmentCreate, Read: resourceTencentCloudCamUserPermissionBoundaryAttachmentRead, @@ -39,10 +42,10 @@ func resourceTencentCloudCamUserPermissionBoundaryAttachment() *schema.Resource } func resourceTencentCloudCamUserPermissionBoundaryAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_user_permission_boundary_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_user_permission_boundary_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cam.NewPutUserPermissionsBoundaryRequest() @@ -59,10 +62,10 @@ func resourceTencentCloudCamUserPermissionBoundaryAttachmentCreate(d *schema.Res request.PolicyId = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().PutUserPermissionsBoundary(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().PutUserPermissionsBoundary(request) if e != nil { - return retryError(e) + 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()) } @@ -73,22 +76,22 @@ func resourceTencentCloudCamUserPermissionBoundaryAttachmentCreate(d *schema.Res return err } - d.SetId(targetUin + FILED_SP + policyId) + d.SetId(targetUin + tccommon.FILED_SP + policyId) return resourceTencentCloudCamUserPermissionBoundaryAttachmentRead(d, meta) } func resourceTencentCloudCamUserPermissionBoundaryAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_user_permission_boundary_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_user_permission_boundary_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -112,14 +115,14 @@ func resourceTencentCloudCamUserPermissionBoundaryAttachmentRead(d *schema.Resou } func resourceTencentCloudCamUserPermissionBoundaryAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_user_permission_boundary_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_user_permission_boundary_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_cam_user_permission_boundary_attachment_test.go b/tencentcloud/services/cam/resource_tc_cam_user_permission_boundary_attachment_test.go similarity index 87% rename from tencentcloud/resource_tc_cam_user_permission_boundary_attachment_test.go rename to tencentcloud/services/cam/resource_tc_cam_user_permission_boundary_attachment_test.go index 54f095ab5e..081540b6be 100644 --- a/tencentcloud/resource_tc_cam_user_permission_boundary_attachment_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_user_permission_boundary_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCamUserPermissionBoundaryAttachmentResource_basic(t *tes t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCamUserPermissionBoundary, diff --git a/tencentcloud/resource_tc_cam_user_policy_attachment.go b/tencentcloud/services/cam/resource_tc_cam_user_policy_attachment.go similarity index 77% rename from tencentcloud/resource_tc_cam_user_policy_attachment.go rename to tencentcloud/services/cam/resource_tc_cam_user_policy_attachment.go index ef483cc0a0..24dbe63a4b 100644 --- a/tencentcloud/resource_tc_cam_user_policy_attachment.go +++ b/tencentcloud/services/cam/resource_tc_cam_user_policy_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -7,12 +7,14 @@ import ( "strconv" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" ) -func resourceTencentCloudCamUserPolicyAttachment() *schema.Resource { +func ResourceTencentCloudCamUserPolicyAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamUserPolicyAttachmentCreate, Read: resourceTencentCloudCamUserPolicyAttachmentRead, @@ -68,10 +70,10 @@ func resourceTencentCloudCamUserPolicyAttachment() *schema.Resource { } func resourceTencentCloudCamUserPolicyAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_user_policy_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_user_policy_attachment.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) userId, _, err := getUserId(d) if err != nil { @@ -79,13 +81,13 @@ func resourceTencentCloudCamUserPolicyAttachmentCreate(d *schema.ResourceData, m } policyId := d.Get("policy_id").(string) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := camService.AddUserPolicyAttachment(ctx, userId, policyId) if e != nil { log.Printf("[CRITAL]%s reason[%s]\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -99,10 +101,10 @@ func resourceTencentCloudCamUserPolicyAttachmentCreate(d *schema.ResourceData, m //get really instance then read userPolicyAttachmentId := d.Id() - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, e := camService.DescribeUserPolicyAttachmentById(ctx, userPolicyAttachmentId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if instance == nil { return resource.RetryableError(fmt.Errorf("creation not done")) @@ -118,22 +120,22 @@ func resourceTencentCloudCamUserPolicyAttachmentCreate(d *schema.ResourceData, m } func resourceTencentCloudCamUserPolicyAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_user_policy_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_user_policy_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) userPolicyAttachmentId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *cam.AttachPolicyInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := camService.DescribeUserPolicyAttachmentById(ctx, userPolicyAttachmentId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -163,21 +165,21 @@ func resourceTencentCloudCamUserPolicyAttachmentRead(d *schema.ResourceData, met } func resourceTencentCloudCamUserPolicyAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_user_policy_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cam_user_policy_attachment.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) userPolicyAttachmentId := d.Id() camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := camService.DeleteUserPolicyAttachmentById(ctx, userPolicyAttachmentId) if e != nil { log.Printf("[CRITAL]%s reason[%s]\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cam_user_policy_attachment_test.go b/tencentcloud/services/cam/resource_tc_cam_user_policy_attachment_test.go similarity index 75% rename from tencentcloud/resource_tc_cam_user_policy_attachment_test.go rename to tencentcloud/services/cam/resource_tc_cam_user_policy_attachment_test.go index a6b68e9df3..d23fa46e82 100644 --- a/tencentcloud/resource_tc_cam_user_policy_attachment_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_user_policy_attachment_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package cam_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -12,8 +16,8 @@ import ( func TestAccTencentCloudCamUserPolicyAttachment_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamUserPolicyAttachmentDestroy, Steps: []resource.TestStep{ { @@ -34,12 +38,10 @@ func TestAccTencentCloudCamUserPolicyAttachment_basic(t *testing.T) { } func testAccCheckCamUserPolicyAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cam_user_policy_attachment" { continue @@ -55,8 +57,8 @@ func testAccCheckCamUserPolicyAttachmentDestroy(s *terraform.State) error { func testAccCheckCamUserPolicyAttachmentExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -65,9 +67,7 @@ func testAccCheckCamUserPolicyAttachmentExists(n string) resource.TestCheckFunc if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CAM user policy attachment][Exists] check: CAM user policy attachment id is not set") } - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := cam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := camService.DescribeUserPolicyAttachmentById(ctx, rs.Primary.ID) if err != nil { return err @@ -79,8 +79,8 @@ func testAccCheckCamUserPolicyAttachmentExists(n string) resource.TestCheckFunc } } -//need to add policy resource definition -const testAccCamUserPolicyAttachment_basic = defaultCamVariables + ` +// need to add policy resource definition +const testAccCamUserPolicyAttachment_basic = tcacctest.DefaultCamVariables + ` resource "tencentcloud_cam_policy" "policy_basic" { name = "test-attach-user-policy" diff --git a/tencentcloud/resource_tc_cam_user_saml_config.go b/tencentcloud/services/cam/resource_tc_cam_user_saml_config.go similarity index 66% rename from tencentcloud/resource_tc_cam_user_saml_config.go rename to tencentcloud/services/cam/resource_tc_cam_user_saml_config.go index c84578a0a7..ce399ee2e8 100644 --- a/tencentcloud/resource_tc_cam_user_saml_config.go +++ b/tencentcloud/services/cam/resource_tc_cam_user_saml_config.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCamUserSamlConfig() *schema.Resource { +func ResourceTencentCloudCamUserSamlConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCamUserSamlConfigCreate, Read: resourceTencentCloudCamUserSamlConfigRead, @@ -31,7 +34,7 @@ func resourceTencentCloudCamUserSamlConfig() *schema.Resource { if saml != "" { b := strings.HasSuffix(saml, ".xml") if b { - metadata, _ := ReadFromFile(saml) + metadata, _ := tccommon.ReadFromFile(saml) return string(metadata) } } @@ -55,10 +58,10 @@ func resourceTencentCloudCamUserSamlConfig() *schema.Resource { } func resourceTencentCloudCamUserSamlConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_user_saml_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_user_saml_config.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cam.NewCreateUserSAMLConfigRequest() @@ -68,19 +71,19 @@ func resourceTencentCloudCamUserSamlConfigCreate(d *schema.ResourceData, meta in saml := v.(string) b := strings.HasSuffix(saml, ".xml") if b { - metadata, err := ReadFromFile(v.(string)) + metadata, err := tccommon.ReadFromFile(v.(string)) if err != nil { return err } saml = string(metadata) } - request.SAMLMetadataDocument = helper.String(StringToBase64(saml)) + request.SAMLMetadataDocument = helper.String(tccommon.StringToBase64(saml)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().CreateUserSAMLConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().CreateUserSAMLConfig(request) if e != nil { - return retryError(e) + 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()) } @@ -97,13 +100,13 @@ func resourceTencentCloudCamUserSamlConfigCreate(d *schema.ResourceData, meta in } func resourceTencentCloudCamUserSamlConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_user_saml_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_user_saml_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} samlConfig, err := service.DescribeCamUserSamlConfigById(ctx) if err != nil { @@ -118,7 +121,7 @@ func resourceTencentCloudCamUserSamlConfigRead(d *schema.ResourceData, meta inte userSamlConfig := samlConfig.Response if userSamlConfig.SAMLMetadata != nil { - metadata, err := Base64ToString(*userSamlConfig.SAMLMetadata) + metadata, err := tccommon.Base64ToString(*userSamlConfig.SAMLMetadata) if err != nil { return fmt.Errorf("`SamlConfig.SAMLMetadata` %s does not be decoded to xml", *userSamlConfig.SAMLMetadata) } @@ -131,7 +134,7 @@ func resourceTencentCloudCamUserSamlConfigRead(d *schema.ResourceData, meta inte output, ok := d.GetOk("metadata_document_files") if ok && output.(string) != "" { - if err = writeToFile(output.(string), d.Get("saml_metadata_document")); err != nil { + if err = tccommon.WriteToFile(output.(string), d.Get("saml_metadata_document")); err != nil { return err } } @@ -140,11 +143,11 @@ func resourceTencentCloudCamUserSamlConfigRead(d *schema.ResourceData, meta inte } func resourceTencentCloudCamUserSamlConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_user_saml_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_user_saml_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cam.NewUpdateUserSAMLConfigRequest() @@ -153,17 +156,17 @@ func resourceTencentCloudCamUserSamlConfigUpdate(d *schema.ResourceData, meta in saml := v.(string) b := strings.HasSuffix(saml, ".xml") if b { - metadata, err := ReadFromFile(v.(string)) + metadata, err := tccommon.ReadFromFile(v.(string)) if err != nil { return err } saml = string(metadata) } - request.SAMLMetadataDocument = helper.String(StringToBase64(saml)) + request.SAMLMetadataDocument = helper.String(tccommon.StringToBase64(saml)) } } - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} samlConfig, describeErr := service.DescribeCamUserSamlConfigById(ctx) if describeErr != nil { return describeErr @@ -174,10 +177,10 @@ func resourceTencentCloudCamUserSamlConfigUpdate(d *schema.ResourceData, meta in request.Operate = helper.String("updateSAML") } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCamClient().UpdateUserSAMLConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdateUserSAMLConfig(request) if e != nil { - return retryError(e) + 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()) } @@ -192,13 +195,13 @@ func resourceTencentCloudCamUserSamlConfigUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudCamUserSamlConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cam_user_saml_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cam_user_saml_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if err := service.DeleteCamUserSamlConfigById(ctx); err != nil { return err diff --git a/tencentcloud/resource_tc_cam_user_saml_config_test.go b/tencentcloud/services/cam/resource_tc_cam_user_saml_config_test.go similarity index 80% rename from tencentcloud/resource_tc_cam_user_saml_config_test.go rename to tencentcloud/services/cam/resource_tc_cam_user_saml_config_test.go index b932c89d82..1535d3b081 100644 --- a/tencentcloud/resource_tc_cam_user_saml_config_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_user_saml_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixCamUserSamlConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCamUserSamlConfig, diff --git a/tencentcloud/resource_tc_cam_user_test.go b/tencentcloud/services/cam/resource_tc_cam_user_test.go similarity index 87% rename from tencentcloud/resource_tc_cam_user_test.go rename to tencentcloud/services/cam/resource_tc_cam_user_test.go index 40933470e4..8feb233984 100644 --- a/tencentcloud/resource_tc_cam_user_test.go +++ b/tencentcloud/services/cam/resource_tc_cam_user_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cam_test import ( "context" @@ -7,7 +7,12 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + tccam "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" + cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -19,12 +24,12 @@ func init() { resource.AddTestSweepers("tencentcloud_cam_user", &resource.Sweeper{ Name: "tencentcloud_cam_user", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() - service := CamService{client: client} + service := tccam.NewCamService(client) users, err := service.DescribeUsersByFilter(ctx, nil) if err != nil { @@ -32,7 +37,7 @@ func init() { } for _, v := range users { - if persistResource.MatchString(*v.Name) { + if tcacctest.PersistResource.MatchString(*v.Name) { continue } if !strings.Contains(*v.Name, "test") { @@ -56,8 +61,8 @@ func init() { func TestAccTencentCloudCamUser_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamUserDestroy, Steps: []resource.TestStep{ { @@ -111,8 +116,8 @@ func TestAccTencentCloudCamUser_basic(t *testing.T) { func TestAccTencentCloudCamUser_nilPassword(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamUserDestroy, Steps: []resource.TestStep{ { @@ -137,8 +142,8 @@ func TestAccTencentCloudCamUser_nilPassword(t *testing.T) { func TestAccTencentCloudCamUser_withoutKey(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCamUserDestroy, Steps: []resource.TestStep{ { @@ -160,12 +165,10 @@ func TestAccTencentCloudCamUser_withoutKey(t *testing.T) { }) } func testAccCheckCamUserDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := tccam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cam_user" { continue @@ -181,8 +184,8 @@ func testAccCheckCamUserDestroy(s *terraform.State) error { func testAccCheckCamUserExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -191,9 +194,7 @@ func testAccCheckCamUserExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CAM user][Exists] check: CAM user id is not set") } - camService := CamService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + camService := tccam.NewCamService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := camService.DescribeUserById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/services/cam/service_tencentcloud_cam.go b/tencentcloud/services/cam/service_tencentcloud_cam.go new file mode 100644 index 0000000000..fbfa96a683 --- /dev/null +++ b/tencentcloud/services/cam/service_tencentcloud_cam.go @@ -0,0 +1,1973 @@ +package cam + +import ( + "context" + "encoding/json" + "fmt" + "log" + "reflect" + "strconv" + "strings" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +func NewCamService(client *connectivity.TencentCloudClient) CamService { + return CamService{client: client} +} + +type CamService struct { + client *connectivity.TencentCloudClient +} + +func (me *CamService) DescribeRoleById(ctx context.Context, roleId string) (camInstance *cam.RoleInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewDescribeRoleListRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) //to save in extension + result := make([]*cam.RoleInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DescribeRoleList(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + for _, role := range response.Response.List { + if *role.RoleId == roleId { + result = append(result, role) + } + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + + if len(result) == 0 { + return + } + camInstance = result[0] + return +} + +func (me *CamService) DescribeRolesByFilter(ctx context.Context, params map[string]interface{}) (roles []*cam.RoleInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + //need travel + request := cam.NewDescribeRoleListRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + roles = make([]*cam.RoleInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DescribeRoleList(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + + for _, role := range response.Response.List { + if params["role_id"] != nil { + if *role.RoleId != params["role_id"].(string) { + continue + } + } + if params["name"] != nil { + if *role.RoleName != params["name"].(string) { + continue + } + } + if params["description"] != nil { + if *role.Description != params["description"].(string) { + continue + } + } + roles = append(roles, role) + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + return +} + +func (me *CamService) DeleteRoleById(ctx context.Context, roleId string) error { + + logId := tccommon.GetLogId(ctx) + request := cam.NewDeleteRoleRequest() + request.RoleId = &roleId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DeleteRole(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CamService) DeleteRoleByName(ctx context.Context, roleName string) error { + + logId := tccommon.GetLogId(ctx) + request := cam.NewDeleteRoleRequest() + request.RoleName = &roleName + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DeleteRole(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CamService) decodeCamPolicyAttachmentId(id string) (instanceId string, policyId64 uint64, errRet error) { + items := strings.Split(id, "#") + if len(items) != 2 { + return instanceId, policyId64, fmt.Errorf(" id is not exist %s", id) + } + instanceId = items[0] + policyId, e := strconv.Atoi(items[1]) + if e != nil { + errRet = e + return + } + policyId64 = uint64(policyId) + return +} + +func (me *CamService) DescribeRolePolicyAttachmentByName(ctx context.Context, roleName string, params map[string]interface{}) (policyOfRole *cam.AttachedPolicyOfRole, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewListAttachedRolePoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + result := make([]*cam.AttachedPolicyOfRole, 0) + for { + request.Page = &pageStart + request.Rp = &rp + request.RoleName = &roleName + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedRolePolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") || errCode == "InvalidParameter.RoleNotExist" { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + for _, policy := range response.Response.List { + policyName, ok := params["policy_name"] + if ok && *policy.PolicyName == policyName.(string) { + result = append(result, policy) + } + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + + if len(result) == 0 { + return + } + policyOfRole = result[0] + return +} + +func (me *CamService) DescribeRolePolicyAttachmentById(ctx context.Context, rolePolicyAttachmentId string) (policyOfRole *cam.AttachedPolicyOfRole, errRet error) { + logId := tccommon.GetLogId(ctx) + roleId, policyId, e := me.decodeCamPolicyAttachmentId(rolePolicyAttachmentId) + if e != nil { + return nil, e + } + request := cam.NewListAttachedRolePoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + result := make([]*cam.AttachedPolicyOfRole, 0) + for { + request.Page = &pageStart + request.Rp = &rp + request.RoleId = &roleId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedRolePolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") || errCode == "InvalidParameter.RoleNotExist" { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + for _, policy := range response.Response.List { + if *policy.PolicyId == policyId { + result = append(result, policy) + } + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + + if len(result) == 0 { + return + } + policyOfRole = result[0] + return +} + +func (me *CamService) DescribeRolePolicyAttachmentsByFilter(ctx context.Context, params map[string]interface{}) (policyOfRoles []*cam.AttachedPolicyOfRole, errRet error) { + logId := tccommon.GetLogId(ctx) + roleId := params["role_id"].(string) + request := cam.NewListAttachedRolePoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + policyOfRoles = make([]*cam.AttachedPolicyOfRole, 0) + for { + request.Page = &pageStart + request.Rp = &rp + request.RoleId = &roleId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedRolePolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") || errCode == "InvalidParameter.RoleNotExist" { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + for _, policy := range response.Response.List { + if params["policy_id"] != nil { + if *policy.PolicyId != params["policy_id"].(uint64) { + continue + } + } + if params["policy_type"] != nil { + if *policy.PolicyType != params["policy_type"].(string) { + continue + } + } + if params["create_mode"] != nil { + if int(*policy.CreateMode) != params["create_mode"].(int) { + continue + } + } + policyOfRoles = append(policyOfRoles, policy) + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + return +} + +func (me *CamService) DeleteRolePolicyAttachmentByName(ctx context.Context, roleName, policyName string) error { + logId := tccommon.GetLogId(ctx) + request := cam.NewDetachRolePolicyRequest() + request.DetachRoleName = &roleName + request.PolicyName = &policyName + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DetachRolePolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CamService) DeleteRolePolicyAttachmentById(ctx context.Context, rolePolicyAttachmentId string) error { + logId := tccommon.GetLogId(ctx) + roleId, policyId, e := me.decodeCamPolicyAttachmentId(rolePolicyAttachmentId) + if e != nil { + return e + } + request := cam.NewDetachRolePolicyRequest() + request.DetachRoleId = &roleId + request.PolicyId = &policyId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DetachRolePolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CamService) DescribeUserPolicyAttachmentById(ctx context.Context, userPolicyAttachmentId string) (policyResults *cam.AttachPolicyInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + userId, policyId, e := me.decodeCamPolicyAttachmentId(userPolicyAttachmentId) + if e != nil { + return nil, e + } + user, err := me.DescribeUserById(ctx, userId) + if err != nil { + return nil, err + } + if user == nil || user.Response == nil || user.Response.Uid == nil { + return + } + uin := user.Response.Uin + + request := cam.NewListAttachedUserPoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + result := make([]*cam.AttachPolicyInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + request.TargetUin = uin + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedUserPolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + for _, policy := range response.Response.List { + if *policy.PolicyId == policyId { + result = append(result, policy) + } + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + + if len(result) == 0 { + return + } + policyResults = result[0] + return +} + +func (me *CamService) DescribeUserPolicyAttachmentsByFilter(ctx context.Context, params map[string]interface{}) (policyResults []*cam.AttachPolicyInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + userId := params["user_id"].(string) + user, err := me.DescribeUserById(ctx, userId) + if err != nil { + return nil, err + } + if user == nil || user.Response == nil || user.Response.Uid == nil { + return + } + uin := user.Response.Uin + request := cam.NewListAttachedUserPoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + policyResults = make([]*cam.AttachPolicyInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + request.TargetUin = uin + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedUserPolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + for _, policy := range response.Response.List { + if params["policy_id"] != nil { + if *policy.PolicyId != params["policy_id"].(uint64) { + continue + } + } + if params["policy_type"] != nil { + if *policy.PolicyType != params["policy_type"].(string) { + continue + } + } + if params["create_mode"] != nil { + if int(*policy.CreateMode) != params["create_mode"].(int) { + continue + } + } + policyResults = append(policyResults, policy) + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + return +} + +func (me *CamService) AddUserPolicyAttachment(ctx context.Context, userId string, policyId string) error { + logId := tccommon.GetLogId(ctx) + + user, err := me.DescribeUserById(ctx, userId) + if err != nil { + return err + } + if user == nil || user.Response == nil || user.Response.Uid == nil { + return nil + } + uin := user.Response.Uin + policyIdInt, e := strconv.Atoi(policyId) + if e != nil { + return e + } + policyIdInt64 := uint64(policyIdInt) + request := cam.NewAttachUserPolicyRequest() + request.AttachUin = uin + request.PolicyId = &policyIdInt64 + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().AttachUserPolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CamService) DeleteUserPolicyAttachmentById(ctx context.Context, userPolicyAttachmentId string) error { + logId := tccommon.GetLogId(ctx) + userId, policyId, e := me.decodeCamPolicyAttachmentId(userPolicyAttachmentId) + if e != nil { + return e + } + user, err := me.DescribeUserById(ctx, userId) + if err != nil { + return err + } + if user == nil || user.Response == nil || user.Response.Uid == nil { + return nil + } + uin := user.Response.Uin + + request := cam.NewDetachUserPolicyRequest() + request.DetachUin = uin + request.PolicyId = &policyId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DetachUserPolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CamService) DescribeGroupPolicyAttachmentById(ctx context.Context, groupPolicyAttachmentId string) (policyResults *cam.AttachPolicyInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + groupId, policyId, e := me.decodeCamPolicyAttachmentId(groupPolicyAttachmentId) + if e != nil { + errRet = e + return + } + groupIdInt, ee := strconv.Atoi(groupId) + if ee != nil { + errRet = ee + return + } + groupIdInt64 := uint64(groupIdInt) + request := cam.NewListAttachedGroupPoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + result := make([]*cam.AttachPolicyInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + request.TargetGroupId = &groupIdInt64 + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedGroupPolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + for _, policy := range response.Response.List { + if *policy.PolicyId == policyId { + result = append(result, policy) + } + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + if len(result) == 0 { + return + } + policyResults = result[0] + return +} + +func (me *CamService) DescribeGroupPolicyAttachmentsByFilter(ctx context.Context, params map[string]interface{}) (policyResults []*cam.AttachPolicyInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + groupId := params["group_id"].(string) + groupIdInt, e := strconv.Atoi(groupId) + if e != nil { + errRet = e + return + } + groupIdInt64 := uint64(groupIdInt) + request := cam.NewListAttachedGroupPoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + policyResults = make([]*cam.AttachPolicyInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + request.TargetGroupId = &groupIdInt64 + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedGroupPolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + + for _, policy := range response.Response.List { + if params["policy_id"] != nil { + if *policy.PolicyId != params["policy_id"].(uint64) { + continue + } + } + if params["policy_type"] != nil { + if *policy.PolicyType != params["policy_type"].(string) { + continue + } + } + if params["create_mode"] != nil { + if int(*policy.CreateMode) != params["create_mode"].(int) { + continue + } + } + policyResults = append(policyResults, policy) + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + return +} + +func (me *CamService) AddGroupPolicyAttachment(ctx context.Context, groupId string, policyId string) error { + logId := tccommon.GetLogId(ctx) + + groupIdInt, e := strconv.Atoi(groupId) + if e != nil { + return e + } + groupIdInt64 := uint64(groupIdInt) + policyIdInt, ee := strconv.Atoi(policyId) + if ee != nil { + return ee + } + policyIdInt64 := uint64(policyIdInt) + + request := cam.NewAttachGroupPolicyRequest() + request.AttachGroupId = &groupIdInt64 + request.PolicyId = &policyIdInt64 + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().AttachGroupPolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CamService) DeleteGroupPolicyAttachmentById(ctx context.Context, groupPolicyAttachmentId string) error { + logId := tccommon.GetLogId(ctx) + groupId, policyId, e := me.decodeCamPolicyAttachmentId(groupPolicyAttachmentId) + if e != nil { + return e + } + groupIdInt, ee := strconv.Atoi(groupId) + if ee != nil { + return ee + } + groupIdInt64 := uint64(groupIdInt) + + request := cam.NewDetachGroupPolicyRequest() + request.DetachGroupId = &groupIdInt64 + request.PolicyId = &policyId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DetachGroupPolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CamService) DescribePolicyById(ctx context.Context, policyId string) (result *cam.GetPolicyResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewGetPolicyRequest() + policyIdInt, e := strconv.Atoi(policyId) + if e != nil { + errRet = e + return + } + policyIdInt64 := uint64(policyIdInt) + request.PolicyId = &policyIdInt64 + result, err := me.client.UseCamClient().GetPolicy(request) + + if err != nil { + log.Printf("[CRITAL]%s read CAM policy failed, reason:%s\n", logId, err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + return nil, err + } else { + if result == nil || result.Response == nil || result.Response.PolicyName == nil { + return + } + } + + return +} + +func (me *CamService) DescribePoliciesByFilter(ctx context.Context, params map[string]interface{}) (policies []*cam.StrategyInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + policyId := -1 + policyName := "" + //notice this policy type is different from the policy attachment, this sdk returns int while the attachments returns string + policyType := -1 + description := "" + createMode := -1 + + request := cam.NewListPoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + + for k, v := range params { + if k == "policy_id" { + policyId = v.(int) + } + if k == "name" { + policyName = v.(string) + } + if k == "type" { + policyType = v.(int) + } + if k == "description" { + description = v.(string) + } + if k == "create_mode" { + createMode = v.(int) + } + } + policies = make([]*cam.StrategyInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListPolicies(request) + if err != nil { + log.Printf("[CRITAL]%s read CAM policy failed, reason:%s\n", logId, err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + for _, policy := range response.Response.List { + if policyId != -1 { + if int(*policy.PolicyId) != policyId { + continue + } + } + if policyName != "" { + if *policy.PolicyName != policyName { + continue + } + } + if policyType != -1 { + if int(*policy.Type) != policyType { + continue + } + } + if description != "" { + if *policy.Description != description { + continue + } + } + if createMode != -1 { + if int(*policy.CreateMode) != createMode { + continue + } + } + policies = append(policies, policy) + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + return +} + +func (me *CamService) DescribeUserById(ctx context.Context, userId string) (response *cam.GetUserResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewGetUserRequest() + request.Name = &userId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().GetUser(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + 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 +} + +func (me *CamService) DescribeUsersByFilter(ctx context.Context, params map[string]interface{}) (result []*cam.SubAccountInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewListUsersRequest() + + result = make([]*cam.SubAccountInfo, 0) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListUsers(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + for _, user := range response.Response.Data { + if params["name"] != nil { + if params["name"].(string) != *user.Name { + continue + } + } + if params["remark"] != nil { + if user.Remark != nil { + if params["remark"].(string) != *user.Remark { + continue + } + } else { + continue + } + } + if params["phone_num"] != nil { + if user.PhoneNum != nil { + if params["phone_num"].(string) != *user.PhoneNum { + continue + } + } else { + continue + } + } + if params["country_code"] != nil { + if user.CountryCode != nil { + if params["country_code"].(string) != *user.CountryCode { + continue + } + } else { + continue + } + } + if params["email"] != nil { + if user.Email != nil { + if params["email"].(string) != *user.Email { + continue + } + } else { + continue + } + } + if params["uin"] != nil { + if user.Uin != nil { + if params["uin"].(int) != int(*user.Uin) { + continue + } + } else { + continue + } + } + if params["uid"] != nil { + if user.Uid != nil { + if params["uid"].(int) != int(*user.Uid) { + continue + } + } else { + continue + } + } + if params["console_login"] != nil { + if user.ConsoleLogin != nil { + if params["console_login"].(int) != int(*user.ConsoleLogin) { + continue + } + } else { + continue + } + } + result = append(result, user) + } + + return +} + +func (me *CamService) DescribeGroupById(ctx context.Context, groupId string) (camInstance *cam.GetGroupResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewGetGroupRequest() + groupIdInt, e := strconv.Atoi(groupId) + if e != nil { + errRet = e + return + } + groupIdInt64 := uint64(groupIdInt) + request.GroupId = &groupIdInt64 + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().GetGroup(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + camInstance = response + return +} + +func (me *CamService) DescribeGroupsByFilter(ctx context.Context, params map[string]interface{}) (groups []*cam.GroupInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewListGroupsRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + groups = make([]*cam.GroupInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListGroups(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.GroupInfo) < 1 { + break + } + for _, group := range response.Response.GroupInfo { + if params["group_id"] != nil { + if int(*group.GroupId) != params["group_id"].(int) { + continue + } + } + if params["name"] != nil { + if *group.GroupName != params["name"].(string) { + continue + } + } + if params["remark"] != nil { + if group.Remark == nil || (group.Remark != nil && *group.Remark != params["remark"].(string)) { + continue + } + log.Printf("in") + } + groups = append(groups, group) + } + if len(response.Response.GroupInfo) < PAGE_ITEM { + break + } + pageStart += 1 + } + return +} + +func (me *CamService) DescribeGroupMembershipById(ctx context.Context, groupId string) (members []*string, errRet error) { + logId := tccommon.GetLogId(ctx) + groupIdInt, e := strconv.Atoi(groupId) + if e != nil { + errRet = e + return + } + groupIdInt64 := uint64(groupIdInt) + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + members = make([]*string, 0) + request := cam.NewListUsersForGroupRequest() + request.GroupId = &groupIdInt64 + for { + request.Page = &pageStart + request.Rp = &rp + response, err := me.client.UseCamClient().ListUsersForGroup(request) + if err != nil { + log.Printf("[CRITAL]%s read CAM group membership failed, reason:%s\n", logId, err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + + if response == nil || len(response.Response.UserInfo) < 1 { + break + } + for _, member := range response.Response.UserInfo { + + members = append(members, member.Name) + } + if len(response.Response.UserInfo) < PAGE_ITEM { + break + } + pageStart += 1 + } + return +} + +func (me *CamService) DescribeSAMLProviderById(ctx context.Context, providerName string) (result *cam.GetSAMLProviderResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewGetSAMLProviderRequest() + request.Name = &providerName + result, err := me.client.UseCamClient().GetSAMLProvider(request) + + if err != nil { + log.Printf("[CRITAL]%s read cam SAML provider failed, reason:%s\n", logId, err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + return nil, err + } else { + if result == nil || result.Response == nil || result.Response.Name == nil { + return + } + } + + return +} + +func (me *CamService) DescribeSAMLProvidersByFilter(ctx context.Context, params map[string]interface{}) (providers []*cam.SAMLProviderInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + name := "" + description := "" + + request := cam.NewListSAMLProvidersRequest() + + for k, v := range params { + if k == "name" { + name = v.(string) + } + if k == "description" { + description = v.(string) + } + } + providers = make([]*cam.SAMLProviderInfo, 0) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListSAMLProviders(request) + if err != nil { + log.Printf("[CRITAL]%s read CAM SAML provider failed, reason:%s\n", logId, err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + for _, provider := range response.Response.SAMLProviderSet { + if name != "" { + if *provider.Name != name { + continue + } + } + if description != "" { + if *provider.Description != description { + continue + } + } + providers = append(providers, provider) + } + + return +} + +func (me *CamService) PolicyDocumentForceCheck(document string) error { + + //Policy syntax allows multi formats, but returns with only one format. In this case, the user's input may be different from the output value. To avoid this, terraform must make sure the syntax of the input policy document consists with the syntax of final returned output + type Principal struct { + Qcs []string `json:"qcs"` + } + type Statement struct { + Resource interface{} `json:"resource"` + //to avoid json unmarshal eats up with '/' + Action []json.RawMessage `json:"action"` + Principal Principal `json:"principal"` + } + type Document struct { + Version string `json:"version"` + Statement []Statement `json:"statement"` + } + var documentJson Document + err := json.Unmarshal([]byte(document), &documentJson) + if err != nil { + return err + } + for _, state := range documentJson.Statement { + //multi value case in elemant `resource`, `action`: input:""/[""], output: [""] + if state.Resource != nil { + if reflect.TypeOf(state.Resource) == reflect.TypeOf("string") { + return fmt.Errorf("The format of `resource` in policy document is invalid, its type must be array") + } + } + + if state.Action != nil { + if reflect.TypeOf(state.Action) == reflect.TypeOf("string") { + return fmt.Errorf("The format of `resource` in policy document is invalid, its type must be array") + } + + } + //multi value case in elemant `principal.qcs`:input :root/[uin of the user], output:[uin of the user] + for _, qcs := range state.Principal.Qcs { + if strings.Contains(qcs, "root") { + return fmt.Errorf("`root` format is not supported, please replace it with uin") + } + } + } + return nil +} + +func (me *CamService) DescribeCamServiceLinkedRole(ctx context.Context, roleId string) (serviceLinkedRole *cam.RoleInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewGetRoleRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + request.RoleId = &roleId + + response, err := me.client.UseCamClient().GetRole(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response != nil && response.Response != nil { + serviceLinkedRole = response.Response.RoleInfo + } + + return +} + +func (me *CamService) DeleteCamServiceLinkedRoleById(ctx context.Context, roleId string) (deletionTaskId string, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewDeleteServiceLinkedRoleRequest() + + request.RoleName = &roleId + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DeleteServiceLinkedRole(request) + if err != nil { + errRet = err + return "", err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response != nil && response.Response != nil { + deletionTaskId = *response.Response.DeletionTaskId + } + return +} + +func (me *CamService) DescribeCamServiceLinkedRoleDeleteStatus(ctx context.Context, deletionTaskId string) (response *cam.GetServiceLinkedRoleDeletionStatusResponse, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewGetServiceLinkedRoleDeletionStatusRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + request.DeletionTaskId = &deletionTaskId + + response, err := me.client.UseCamClient().GetServiceLinkedRoleDeletionStatus(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + 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 +} + +func (me *CamService) DescribeCamUserSamlConfigById(ctx context.Context) (userSamlConfig *cam.DescribeUserSAMLConfigResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewDescribeUserSAMLConfigRequest() + + 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.UseCamClient().DescribeUserSAMLConfig(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()) + + userSamlConfig = response + return +} + +func (me *CamService) DeleteCamUserSamlConfigById(ctx context.Context) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewUpdateUserSAMLConfigRequest() + + 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()) + } + }() + + request.Operate = helper.String("disable") + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCamClient().UpdateUserSAMLConfig(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 +} + +func (me *CamService) DescribeCamMfaFlagById(ctx context.Context, id uint64) (loginFlag *cam.LoginActionFlag, actionFlag *cam.LoginActionFlag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewDescribeSafeAuthFlagCollRequest() + request.SubUin = &id + 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.UseCamClient().DescribeSafeAuthFlagColl(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()) + + if response == nil || response.Response == nil || response.Response.ActionFlag == nil && response.Response.LoginFlag == nil { + return + } + + loginFlag = response.Response.LoginFlag + actionFlag = response.Response.ActionFlag + return +} + +func (me *CamService) DescribeCamAccessKeyById(ctx context.Context, targetUin uint64, accessKey string) (AccessKey *cam.AccessKey, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewListAccessKeysRequest() + request.TargetUin = &targetUin + + 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.UseCamClient().ListAccessKeys(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()) + + if response == nil || response.Response == nil || len(response.Response.AccessKeys) < 1 { + return + } + + for _, v := range response.Response.AccessKeys { + if *v.AccessKeyId == accessKey { + AccessKey = v + } + } + return +} + +func (me *CamService) DeleteCamAccessKeyById(ctx context.Context, uin, accessKeyId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewDeleteAccessKeyRequest() + request.AccessKeyId = &accessKeyId + request.TargetUin = helper.StrToUint64Point(uin) + 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.UseCamClient().DeleteAccessKey(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 +} + +func (me *CamService) DescribeCamUserPermissionBoundaryById(ctx context.Context, targetUin string) (UserPermissionBoundary *cam.GetUserPermissionBoundaryResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewGetUserPermissionBoundaryRequest() + request.TargetUin = helper.StrToInt64Point(targetUin) + + 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.UseCamClient().GetUserPermissionBoundary(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()) + + if response == nil { + return + } + + UserPermissionBoundary = response + return +} + +func (me *CamService) DeleteCamUserPermissionBoundaryById(ctx context.Context, targetUin string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewDeleteUserPermissionsBoundaryRequest() + request.TargetUin = helper.StrToInt64Point(targetUin) + + 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.UseCamClient().DeleteUserPermissionsBoundary(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 +} + +func (me *CamService) DescribeCamPolicyVersionById(ctx context.Context, policyId uint64, versionId uint64) (policyVersion *cam.PolicyVersionDetail, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewGetPolicyVersionRequest() + request.PolicyId = &policyId + request.VersionId = &versionId + + 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.UseCamClient().GetPolicyVersion(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()) + + if response == nil || response.Response == nil || response.Response.PolicyVersion == nil { + return + } + + policyVersion = response.Response.PolicyVersion + return +} + +func (me *CamService) DeleteCamPolicyVersionById(ctx context.Context, policyId uint64, versionId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewDeletePolicyVersionRequest() + request.PolicyId = &policyId + request.VersionId = []*uint64{helper.Uint64(versionId)} + + 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.UseCamClient().DeletePolicyVersion(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 +} + +func (me *CamService) DescribeCamListEntitiesForPolicyByFilter(ctx context.Context, param map[string]interface{}) (ListEntitiesForPolicy []*cam.AttachEntityOfPolicy, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewListEntitiesForPolicyRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "PolicyId" { + request.PolicyId = v.(*uint64) + } + if k == "Rp" { + request.Rp = v.(*uint64) + } + if k == "EntityFilter" { + request.EntityFilter = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) //to save in extension + result := make([]*cam.AttachEntityOfPolicy, 0) + for { + request.Page = &pageStart + request.Rp = &rp + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListEntitiesForPolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + result = append(result, response.Response.List...) + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + ListEntitiesForPolicy = result + return +} + +func (me *CamService) DescribeCamListAttachedUserPolicyByFilter(ctx context.Context, param map[string]interface{}) (ListAttachedUserPolicy []*cam.AttachedUserPolicy, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewListAttachedUserAllPoliciesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "TargetUin" { + request.TargetUin = v.(*uint64) + } + if k == "AttachType" { + request.AttachType = v.(*uint64) + } + if k == "StrategyType" { + request.StrategyType = v.(*uint64) + } + if k == "Keyword" { + request.Keyword = v.(*string) + } + } + + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) //to save in extension + result := make([]*cam.AttachedUserPolicy, 0) + for { + request.Page = &pageStart + request.Rp = &rp + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedUserAllPolicies(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()) + + if response == nil || len(response.Response.PolicyList) < 1 { + break + } + result = append(result, response.Response.PolicyList...) + if len(response.Response.PolicyList) < PAGE_ITEM { + break + } + + pageStart += 1 + } + ListAttachedUserPolicy = result + return +} + +func (me *CamService) DescribeCamTagRoleById(ctx context.Context, roleName, roleId string) (TagRole *cam.RoleInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewGetRoleRequest() + if roleName == "" { + request.RoleId = &roleId + } else { + request.RoleName = &roleName + } + 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.UseCamClient().GetRole(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()) + + if response == nil || response.Response == nil || response.Response.RoleInfo == nil { + return + } + TagRole = response.Response.RoleInfo + return +} + +func (me *CamService) DeleteCamTagRoleById(ctx context.Context, roleName, roleId string, keys []*string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewUntagRoleRequest() + if roleName == "" { + request.RoleId = &roleId + } else { + request.RoleName = &roleName + } + request.TagKeys = keys + 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.UseCamClient().UntagRole(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 +} + +func (me *CamService) DescribeCamRolePermissionBoundaryAttachmentById(ctx context.Context, roleId string, policyId string) (RolePermissionBoundaryAttachment *cam.GetRolePermissionBoundaryResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewGetRolePermissionBoundaryRequest() + request.RoleId = &roleId + + 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.UseCamClient().GetRolePermissionBoundary(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()) + if response == nil || response.Response == nil { + return + } + if *response.Response.PolicyId != helper.StrToInt64(policyId) { + return + } + RolePermissionBoundaryAttachment = response.Response + return +} + +func (me *CamService) DeleteCamRolePermissionBoundaryAttachmentById(ctx context.Context, roleId string, roleName string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewDeleteRolePermissionsBoundaryRequest() + if roleId == "" { + request.RoleName = &roleName + } else { + request.RoleId = &roleId + } + 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.UseCamClient().DeleteRolePermissionsBoundary(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 +} + +func (me *CamService) DescribeCamSecretLastUsedTimeByFilter(ctx context.Context, param map[string]interface{}) (SecretLastUsedTime []*cam.SecretIdLastUsed, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewGetSecurityLastUsedRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "SecretIdList" { + request.SecretIdList = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCamClient().GetSecurityLastUsed(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()) + + if response == nil || response.Response == nil || len(response.Response.SecretIdLastUsedRows) < 1 { + return + } + SecretLastUsedTime = append(SecretLastUsedTime, response.Response.SecretIdLastUsedRows...) + return +} + +func (me *CamService) DescribeCamPolicyGrantingServiceAccessByFilter(ctx context.Context, param map[string]interface{}) (PolicyGrantingServiceAccess []*cam.ListGrantServiceAccessNode, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewListPoliciesGrantingServiceAccessRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "TargetUin" { + request.TargetUin = v.(*uint64) + } + if k == "RoleId" { + request.RoleId = v.(*uint64) + } + if k == "GroupId" { + request.GroupId = v.(*uint64) + } + if k == "ServiceType" { + request.ServiceType = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCamClient().ListPoliciesGrantingServiceAccess(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()) + + if response == nil || response.Response == nil || len(response.Response.List) < 1 { + return + } + PolicyGrantingServiceAccess = response.Response.List + return +} + +func (me *CamService) DescribeCamSetPolicyVersionById(ctx context.Context, policyId, versionId string) (SetPolicyVersion *cam.PolicyVersionItem, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewListPolicyVersionsRequest() + request.PolicyId = helper.StrToUint64Point(policyId) + + 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.UseCamClient().ListPolicyVersions(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()) + + if response == nil || response.Response == nil || len(response.Response.Versions) < 1 { + return + } + for _, v := range response.Response.Versions { + if *v.IsDefaultVersion == int64(1) && *v.VersionId == helper.StrToUInt64(versionId) { + SetPolicyVersion = v + } + } + + return +} + +func (me *CamService) DescribeCamAccountSummaryByFilter(ctx context.Context) (AccountSummary *cam.GetAccountSummaryResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewGetAccountSummaryRequest() + ) + + 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.UseCamClient().GetAccountSummary(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()) + + if response == nil || response.Response == nil { + return + } + AccountSummary = response.Response + return +} + +func (me *CamService) DescribeCamGroupUserAccountByFilter(ctx context.Context, param map[string]interface{}) (GroupUserAccount []*cam.GroupInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewListGroupsForUserRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Uid" { + request.Uid = v.(*uint64) + } + if k == "SubUin" { + request.SubUin = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) //to save in extension + result := make([]*cam.GroupInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + response, err := me.client.UseCamClient().ListGroupsForUser(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()) + + if response == nil || len(response.Response.GroupInfo) < 1 { + break + } + result = append(result, response.Response.GroupInfo...) + if len(response.Response.GroupInfo) < PAGE_ITEM { + break + } + + pageStart += 1 + } + GroupUserAccount = result + return +} diff --git a/tencentcloud/services/cam/service_tencentcloud_tag.go b/tencentcloud/services/cam/service_tencentcloud_tag.go new file mode 100644 index 0000000000..09750a4a68 --- /dev/null +++ b/tencentcloud/services/cam/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package cam + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 1f55d09c0dcff75379bee2c43c71590e09260583 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Tue, 19 Dec 2023 16:47:05 +0800 Subject: [PATCH 02/31] refactor: migrate package tencentcloud/services/cat --- tencentcloud/provider.go | 9 +- .../cat}/data_source_tc_cat_metric_data.go | 23 +- .../data_source_tc_cat_metric_data_test.go | 10 +- .../cat}/data_source_tc_cat_node.go | 27 +- .../cat}/data_source_tc_cat_node_test.go | 10 +- .../cat}/data_source_tc_cat_probe_data.go | 23 +- .../data_source_tc_cat_probe_data_test.go | 10 +- tencentcloud/services/cat/extension_tags.go | 3 + .../cat}/resource_tc_cat_task_set.go | 93 ++-- .../cat}/resource_tc_cat_task_set_test.go | 8 +- .../services/cat/service_tencentcloud_cat.go | 345 +++++++++++++++ .../services/cat/service_tencentcloud_tag.go | 415 ++++++++++++++++++ 12 files changed, 880 insertions(+), 96 deletions(-) rename tencentcloud/{ => services/cat}/data_source_tc_cat_metric_data.go (84%) rename tencentcloud/{ => services/cat}/data_source_tc_cat_metric_data_test.go (86%) rename tencentcloud/{ => services/cat}/data_source_tc_cat_node.go (88%) rename tencentcloud/{ => services/cat}/data_source_tc_cat_node_test.go (85%) rename tencentcloud/{ => services/cat}/data_source_tc_cat_probe_data.go (92%) rename tencentcloud/{ => services/cat}/data_source_tc_cat_probe_data_test.go (71%) create mode 100644 tencentcloud/services/cat/extension_tags.go rename tencentcloud/{ => services/cat}/resource_tc_cat_task_set.go (78%) rename tencentcloud/{ => services/cat}/resource_tc_cat_task_set_test.go (96%) create mode 100644 tencentcloud/services/cat/service_tencentcloud_cat.go create mode 100644 tencentcloud/services/cat/service_tencentcloud_tag.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 24643052e6..cb76fef508 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cat" "encoding/json" "fmt" "io/ioutil" @@ -630,9 +631,9 @@ func Provider() *schema.Provider { "tencentcloud_mps_media_meta_data": dataSourceTencentCloudMpsMediaMetaData(), "tencentcloud_tdcpg_clusters": dataSourceTencentCloudTdcpgClusters(), "tencentcloud_tdcpg_instances": dataSourceTencentCloudTdcpgInstances(), - "tencentcloud_cat_probe_data": dataSourceTencentCloudCatProbeData(), - "tencentcloud_cat_node": dataSourceTencentCloudCatNode(), - "tencentcloud_cat_metric_data": dataSourceTencentCloudCatMetricData(), + "tencentcloud_cat_probe_data": cat.DataSourceTencentCloudCatProbeData(), + "tencentcloud_cat_node": cat.DataSourceTencentCloudCatNode(), + "tencentcloud_cat_metric_data": cat.DataSourceTencentCloudCatMetricData(), "tencentcloud_rum_project": dataSourceTencentCloudRumProject(), "tencentcloud_rum_offline_log_config": dataSourceTencentCloudRumOfflineLogConfig(), "tencentcloud_rum_whitelist": dataSourceTencentCloudRumWhitelist(), @@ -1478,7 +1479,7 @@ func Provider() *schema.Provider { "tencentcloud_dcdb_cancel_dcn_job_operation": resourceTencentCloudDcdbCancelDcnJobOperation(), "tencentcloud_dcdb_flush_binlog_operation": resourceTencentCloudDcdbFlushBinlogOperation(), "tencentcloud_dcdb_switch_db_instance_ha_operation": resourceTencentCloudDcdbSwitchDbInstanceHaOperation(), - "tencentcloud_cat_task_set": resourceTencentCloudCatTaskSet(), + "tencentcloud_cat_task_set": cat.ResourceTencentCloudCatTaskSet(), "tencentcloud_mariadb_dedicatedcluster_db_instance": resourceTencentCloudMariadbDedicatedclusterDbInstance(), "tencentcloud_mariadb_instance": resourceTencentCloudMariadbInstance(), "tencentcloud_mariadb_hour_db_instance": resourceTencentCloudMariadbHourDbInstance(), diff --git a/tencentcloud/data_source_tc_cat_metric_data.go b/tencentcloud/services/cat/data_source_tc_cat_metric_data.go similarity index 84% rename from tencentcloud/data_source_tc_cat_metric_data.go rename to tencentcloud/services/cat/data_source_tc_cat_metric_data.go index 79d163f676..358e9d7e5b 100644 --- a/tencentcloud/data_source_tc_cat_metric_data.go +++ b/tencentcloud/services/cat/data_source_tc_cat_metric_data.go @@ -1,16 +1,19 @@ -package tencentcloud +package cat import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat/v20180409" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCatMetricData() *schema.Resource { +func DataSourceTencentCloudCatMetricData() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCatMetricDataRead, Schema: map[string]*schema.Schema{ @@ -69,12 +72,12 @@ func dataSourceTencentCloudCatMetricData() *schema.Resource { } func dataSourceTencentCloudCatMetricDataRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cat_metric_data.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cat_metric_data.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("analyze_task_type"); ok { @@ -102,10 +105,10 @@ func dataSourceTencentCloudCatMetricDataRead(d *schema.ResourceData, meta interf paramMap["Filters"] = helper.InterfacesStringsPoint(filtersSet) } - service := CatService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var metric *cat.DescribeProbeMetricDataResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCatMetricDataByFilter(ctx, paramMap) if e != nil { if sdkError, ok := e.(*sdkErrors.TencentCloudSDKError); ok { @@ -113,7 +116,7 @@ func dataSourceTencentCloudCatMetricDataRead(d *schema.ResourceData, meta interf return resource.NonRetryableError(e) } } - return retryError(e) + return tccommon.RetryError(e) } metric = result return nil @@ -131,7 +134,7 @@ func dataSourceTencentCloudCatMetricDataRead(d *schema.ResourceData, meta interf d.SetId(helper.DataResourceIdsHash([]string{metricSet})) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), metricSet); e != nil { + if e := tccommon.WriteToFile(output.(string), metricSet); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cat_metric_data_test.go b/tencentcloud/services/cat/data_source_tc_cat_metric_data_test.go similarity index 86% rename from tencentcloud/data_source_tc_cat_metric_data_test.go rename to tencentcloud/services/cat/data_source_tc_cat_metric_data_test.go index a2827dc8ad..e925526d39 100644 --- a/tencentcloud/data_source_tc_cat_metric_data_test.go +++ b/tencentcloud/services/cat/data_source_tc_cat_metric_data_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cat_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCatMetricDataDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCatMetricDataDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cat_metric_data.metric_data"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cat_metric_data.metric_data"), resource.TestCheckResourceAttrSet("data.tencentcloud_cat_metric_data.metric_data", "metric_set"), ), }, diff --git a/tencentcloud/data_source_tc_cat_node.go b/tencentcloud/services/cat/data_source_tc_cat_node.go similarity index 88% rename from tencentcloud/data_source_tc_cat_node.go rename to tencentcloud/services/cat/data_source_tc_cat_node.go index b97587e8b9..2f5b5615d7 100644 --- a/tencentcloud/data_source_tc_cat_node.go +++ b/tencentcloud/services/cat/data_source_tc_cat_node.go @@ -1,16 +1,19 @@ -package tencentcloud +package cat import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat/v20180409" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCatNode() *schema.Resource { +func DataSourceTencentCloudCatNode() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCatNodeRead, Schema: map[string]*schema.Schema{ @@ -120,11 +123,11 @@ func dataSourceTencentCloudCatNode() *schema.Resource { } func dataSourceTencentCloudCatNodeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cat_node.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cat_node.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, _ := d.GetOk("node_type"); v != nil { @@ -147,13 +150,13 @@ func dataSourceTencentCloudCatNodeRead(d *schema.ResourceData, meta interface{}) paramMap["pay_mode"] = helper.IntInt64(v.(int)) } - catService := CatService{client: meta.(*TencentCloudClient).apiV3Conn} + catService := CatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var nodeSets []*cat.NodeDefine - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := catService.DescribeCatProbeNodeByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } nodeSets = results return nil @@ -164,10 +167,10 @@ func dataSourceTencentCloudCatNodeRead(d *schema.ResourceData, meta interface{}) } var nodeSetExt []*cat.NodeDefineExt - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := catService.DescribeCatNodeByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } nodeSetExt = results return nil @@ -234,7 +237,7 @@ func dataSourceTencentCloudCatNodeRead(d *schema.ResourceData, meta interface{}) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), nodeSetList); e != nil { + if e := tccommon.WriteToFile(output.(string), nodeSetList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cat_node_test.go b/tencentcloud/services/cat/data_source_tc_cat_node_test.go similarity index 85% rename from tencentcloud/data_source_tc_cat_node_test.go rename to tencentcloud/services/cat/data_source_tc_cat_node_test.go index 799a97e961..23f91c3929 100644 --- a/tencentcloud/data_source_tc_cat_node_test.go +++ b/tencentcloud/services/cat/data_source_tc_cat_node_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cat_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,13 +13,13 @@ func TestAccTencentCloudCatNodeDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccDataSourceCatNode, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cat_node.node"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cat_node.node"), resource.TestCheckResourceAttrSet("data.tencentcloud_cat_node.node", "node_define.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_cat_node.node", "node_define.0.city"), resource.TestCheckResourceAttrSet("data.tencentcloud_cat_node.node", "node_define.0.code"), diff --git a/tencentcloud/data_source_tc_cat_probe_data.go b/tencentcloud/services/cat/data_source_tc_cat_probe_data.go similarity index 92% rename from tencentcloud/data_source_tc_cat_probe_data.go rename to tencentcloud/services/cat/data_source_tc_cat_probe_data.go index 6165a3fc86..a666a7640b 100644 --- a/tencentcloud/data_source_tc_cat_probe_data.go +++ b/tencentcloud/services/cat/data_source_tc_cat_probe_data.go @@ -1,16 +1,19 @@ -package tencentcloud +package cat import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat/v20180409" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCatProbeData() *schema.Resource { +func DataSourceTencentCloudCatProbeData() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCatProbedataRead, Schema: map[string]*schema.Schema{ @@ -192,11 +195,11 @@ func dataSourceTencentCloudCatProbeData() *schema.Resource { } func dataSourceTencentCloudCatProbedataRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cat_probedata.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cat_probedata.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, _ := d.GetOk("begin_time"); v != nil { @@ -281,13 +284,13 @@ func dataSourceTencentCloudCatProbedataRead(d *schema.ResourceData, meta interfa paramMap["city"] = city } - catService := CatService{client: meta.(*TencentCloudClient).apiV3Conn} + catService := CatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var dataSets []*cat.DetailedSingleDataDefine - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := catService.DescribeCatProbeDataByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } dataSets = results return nil @@ -352,7 +355,7 @@ func dataSourceTencentCloudCatProbedataRead(d *schema.ResourceData, meta interfa d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), dataSetList); e != nil { + if e := tccommon.WriteToFile(output.(string), dataSetList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cat_probe_data_test.go b/tencentcloud/services/cat/data_source_tc_cat_probe_data_test.go similarity index 71% rename from tencentcloud/data_source_tc_cat_probe_data_test.go rename to tencentcloud/services/cat/data_source_tc_cat_probe_data_test.go index da387f76b8..bcb2ca6c86 100644 --- a/tencentcloud/data_source_tc_cat_probe_data_test.go +++ b/tencentcloud/services/cat/data_source_tc_cat_probe_data_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cat_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,13 +13,13 @@ func TestAccTencentCloudCatProbeDataDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccDataSourceCatProbeData, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cat_probe_data.probe_data"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cat_probe_data.probe_data"), ), }, }, diff --git a/tencentcloud/services/cat/extension_tags.go b/tencentcloud/services/cat/extension_tags.go new file mode 100644 index 0000000000..f948db2a87 --- /dev/null +++ b/tencentcloud/services/cat/extension_tags.go @@ -0,0 +1,3 @@ +package cat + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/resource_tc_cat_task_set.go b/tencentcloud/services/cat/resource_tc_cat_task_set.go similarity index 78% rename from tencentcloud/resource_tc_cat_task_set.go rename to tencentcloud/services/cat/resource_tc_cat_task_set.go index 6a12f1df87..fd93e576ab 100644 --- a/tencentcloud/resource_tc_cat_task_set.go +++ b/tencentcloud/services/cat/resource_tc_cat_task_set.go @@ -1,17 +1,20 @@ -package tencentcloud +package cat import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat/v20180409" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCatTaskSet() *schema.Resource { +func ResourceTencentCloudCatTaskSet() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudCatTaskSetRead, Create: resourceTencentCloudCatTaskSetCreate, @@ -109,10 +112,10 @@ func resourceTencentCloudCatTaskSet() *schema.Resource { } func resourceTencentCloudCatTaskSetCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cat_task_set.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cat_task_set.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cat.NewCreateProbeTasksRequest() @@ -162,10 +165,10 @@ func resourceTencentCloudCatTaskSetCreate(d *schema.ResourceData, meta interface request.Cron = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCatClient().CreateProbeTasks(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCatClient().CreateProbeTasks(request) if e != nil { - return retryError(e) + 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()) @@ -181,22 +184,22 @@ func resourceTencentCloudCatTaskSetCreate(d *schema.ResourceData, meta interface taskId = *response.Response.TaskIDs[0] - service := CatService{client: meta.(*TencentCloudClient).apiV3Conn} - ctx := context.WithValue(context.TODO(), logIdKey, logId) + service := CatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::cat:%s:uin/:TaskId/%s", region, taskId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } } - err = resource.Retry(1*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(1*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := service.DescribeCatTaskSet(ctx, taskId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if *instance.Status == 2 || *instance.Status == 10 { return nil @@ -216,13 +219,13 @@ func resourceTencentCloudCatTaskSetCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudCatTaskSetRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cat_task_set.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cat_task_set.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CatService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} taskId := d.Id() @@ -284,7 +287,7 @@ func resourceTencentCloudCatTaskSetRead(d *schema.ResourceData, meta interface{} _ = d.Set("status", taskSet.Status) } - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "cat", "TaskId", tcClient.Region, d.Id()) if err != nil { @@ -296,11 +299,11 @@ func resourceTencentCloudCatTaskSetRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudCatTaskSetUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cat_task_set.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cat_task_set.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cat.NewUpdateProbeTaskConfigurationListRequest() @@ -358,10 +361,10 @@ func resourceTencentCloudCatTaskSetUpdate(d *schema.ResourceData, meta interface requestTaskAttributes := cat.NewUpdateProbeTaskAttributesRequest() requestTaskAttributes.TaskId = &taskId requestTaskAttributes.Name = &v - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCatClient().UpdateProbeTaskAttributes(requestTaskAttributes) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCatClient().UpdateProbeTaskAttributes(requestTaskAttributes) if e != nil { - return retryError(e) + 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()) } @@ -374,10 +377,10 @@ func resourceTencentCloudCatTaskSetUpdate(d *schema.ResourceData, meta interface } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCatClient().UpdateProbeTaskConfigurationList(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCatClient().UpdateProbeTaskConfigurationList(request) if e != nil { - return retryError(e) + 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()) @@ -396,10 +399,10 @@ func resourceTencentCloudCatTaskSetUpdate(d *schema.ResourceData, meta interface if operate == "suspend" { requestSuspend := cat.NewSuspendProbeTaskRequest() requestSuspend.TaskIds = append(requestSuspend.TaskIds, &taskId) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCatClient().SuspendProbeTask(requestSuspend) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCatClient().SuspendProbeTask(requestSuspend) if e != nil { - return retryError(e) + 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()) } @@ -412,10 +415,10 @@ func resourceTencentCloudCatTaskSetUpdate(d *schema.ResourceData, meta interface } else if operate == "resume" { requestResume := cat.NewResumeProbeTaskRequest() requestResume.TaskIds = append(requestResume.TaskIds, &taskId) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCatClient().ResumeProbeTask(requestResume) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCatClient().ResumeProbeTask(requestResume) if e != nil { - return retryError(e) + 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()) } @@ -432,11 +435,11 @@ func resourceTencentCloudCatTaskSetUpdate(d *schema.ResourceData, meta interface } if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("cat", "TaskId", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("cat", "TaskId", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -446,13 +449,13 @@ func resourceTencentCloudCatTaskSetUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudCatTaskSetDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cat_task_set.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cat_task_set.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CatService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CatService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} taskId := d.Id() @@ -460,10 +463,10 @@ func resourceTencentCloudCatTaskSetDelete(d *schema.ResourceData, meta interface return err } - err := resource.Retry(7*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(7*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := service.DescribeCatTaskSet(ctx, taskId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if instance == nil { return nil diff --git a/tencentcloud/resource_tc_cat_task_set_test.go b/tencentcloud/services/cat/resource_tc_cat_task_set_test.go similarity index 96% rename from tencentcloud/resource_tc_cat_task_set_test.go rename to tencentcloud/services/cat/resource_tc_cat_task_set_test.go index af93f32005..475cf87852 100644 --- a/tencentcloud/resource_tc_cat_task_set_test.go +++ b/tencentcloud/services/cat/resource_tc_cat_task_set_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cat_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,8 +13,8 @@ func TestAccTencentCloudCatTaskSet_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCatTaskSet, diff --git a/tencentcloud/services/cat/service_tencentcloud_cat.go b/tencentcloud/services/cat/service_tencentcloud_cat.go new file mode 100644 index 0000000000..c2e3f88979 --- /dev/null +++ b/tencentcloud/services/cat/service_tencentcloud_cat.go @@ -0,0 +1,345 @@ +package cat + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + cat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat/v20180409" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +type CatService struct { + client *connectivity.TencentCloudClient +} + +func (me *CatService) DescribeCatTaskSet(ctx context.Context, taskId string) (taskSet *cat.ProbeTask, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cat.NewDescribeProbeTasksRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.TaskIDs = []*string{helper.String(taskId)} + ratelimit.Check(request.GetAction()) + + var offset int64 = 0 + var pageSize int64 = 100 + instances := make([]*cat.ProbeTask, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCatClient().DescribeProbeTasks(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.TaskSet) < 1 { + break + } + instances = append(instances, response.Response.TaskSet...) + if len(response.Response.TaskSet) < int(pageSize) { + break + } + offset += pageSize + } + + if len(instances) < 1 { + return + } + taskSet = instances[0] + return +} + +func (me *CatService) DeleteCatTaskSetById(ctx context.Context, taskId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cat.NewDeleteProbeTaskRequest() + + request.TaskIds = []*string{helper.String(taskId)} + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCatClient().DeleteProbeTask(request) + if err != nil { + errRet = err + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *CatService) DescribeCatProbeNodeByFilter(ctx context.Context, param map[string]interface{}) (node []*cat.NodeDefine, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cat.NewDescribeProbeNodesRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + for k, v := range param { + if k == "node_type" { + request.NodeType = v.(*int64) + } + + if k == "location" { + request.Location = v.(*int64) + } + + if k == "is_ipv6" { + request.IsIPv6 = v.(*bool) + } + + if k == "node_name" { + request.NodeName = v.(*string) + } + + if k == "pay_mode" { + request.PayMode = v.(*int64) + } + + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCatClient().DescribeProbeNodes(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + node = append(node, response.Response.NodeSet...) + + return +} + +// DescribeNodes interface is an alternative interface to DescribeProbeNodes, but it lacks the NodeDefineStatus field, so both interfaces are used at the same time. +func (me *CatService) DescribeCatNodeByFilter(ctx context.Context, param map[string]interface{}) (node []*cat.NodeDefineExt, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cat.NewDescribeNodesRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + for k, v := range param { + if k == "node_type" { + request.NodeType = v.(*int64) + } + + if k == "location" { + request.Location = v.(*int64) + } + + if k == "is_ipv6" { + request.IsIPv6 = v.(*bool) + } + + if k == "node_name" { + request.NodeName = v.(*string) + } + + if k == "pay_mode" { + request.PayMode = v.(*int64) + } + + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCatClient().DescribeNodes(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + node = append(node, response.Response.NodeSet...) + + return +} + +func (me *CatService) DescribeCatProbeDataByFilter(ctx context.Context, param map[string]interface{}) (probeData []*cat.DetailedSingleDataDefine, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cat.NewDescribeDetailedSingleProbeDataRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + for k, v := range param { + if k == "begin_time" { + request.BeginTime = v.(*uint64) + } + + if k == "end_time" { + request.EndTime = v.(*uint64) + } + + if k == "task_type" { + request.TaskType = v.(*string) + } + + if k == "sort_field" { + request.SortField = v.(*string) + } + + if k == "ascending" { + request.Ascending = v.(*bool) + } + + if k == "selected_fields" { + var selectedFields []*string + selectedFields = append(selectedFields, v.([]*string)...) + request.SelectedFields = selectedFields + } + + if k == "offset" { + request.Offset = v.(*int64) + } + + if k == "limit" { + request.Limit = v.(*int64) + } + + if k == "task_id" { + var taskId []*string + taskId = append(taskId, v.([]*string)...) + request.TaskID = taskId + } + + if k == "operators" { + var operators []*string + operators = append(operators, v.([]*string)...) + request.Operators = operators + } + + if k == "districts" { + var districts []*string + districts = append(districts, v.([]*string)...) + request.Districts = districts + } + + if k == "error_types" { + var errorTypes []*string + errorTypes = append(errorTypes, v.([]*string)...) + request.ErrorTypes = errorTypes + } + + if k == "city" { + var city []*string + city = append(city, v.([]*string)...) + request.City = city + } + + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCatClient().DescribeDetailedSingleProbeData(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + probeData = append(probeData, response.Response.DataSet...) + + return +} + +func (me *CatService) DescribeCatMetricDataByFilter(ctx context.Context, param map[string]interface{}) (metricData *cat.DescribeProbeMetricDataResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cat.NewDescribeProbeMetricDataRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AnalyzeTaskType" { + request.AnalyzeTaskType = v.(*string) + } + if k == "MetricType" { + request.MetricType = v.(*string) + } + if k == "Field" { + request.Field = v.(*string) + } + if k == "Filter" { + request.Filter = v.(*string) + } + if k == "GroupBy" { + request.GroupBy = v.(*string) + } + if k == "Filters" { + request.Filters = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCatClient().DescribeProbeMetricData(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()) + + if response == nil || response.Response == nil { + return + } + + metricData = response.Response + + return +} diff --git a/tencentcloud/services/cat/service_tencentcloud_tag.go b/tencentcloud/services/cat/service_tencentcloud_tag.go new file mode 100644 index 0000000000..457082cd45 --- /dev/null +++ b/tencentcloud/services/cat/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package cat + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 7a553bd33eaeb04e1c916fae95d9d70b9221bfd2 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Tue, 19 Dec 2023 17:04:19 +0800 Subject: [PATCH 03/31] refactor: migrate package tencentcloud/services/cbs --- tencentcloud/provider.go | 29 +- .../data_source_tc_cbs_snapshot_policies.go | 21 +- ...ta_source_tc_cbs_snapshot_policies_test.go | 8 +- .../cbs}/data_source_tc_cbs_snapshots.go | 23 +- .../cbs}/data_source_tc_cbs_snapshots_test.go | 10 +- .../cbs}/data_source_tc_cbs_storages.go | 23 +- .../cbs}/data_source_tc_cbs_storages_set.go | 19 +- .../cbs}/data_source_tc_cbs_storages_test.go | 18 +- tencentcloud/services/cbs/extension_cbs.go | 57 ++ tencentcloud/services/cbs/extension_cvm.go | 118 +++ tencentcloud/services/cbs/extension_tags.go | 3 + .../cbs}/resource_tc_cbs_disk_backup.go | 44 +- ...e_tc_cbs_disk_backup_rollback_operation.go | 34 +- ...cbs_disk_backup_rollback_operation_test.go | 10 +- .../cbs}/resource_tc_cbs_disk_backup_test.go | 25 +- .../cbs}/resource_tc_cbs_snapshot.go | 72 +- .../cbs}/resource_tc_cbs_snapshot_policy.go | 59 +- ...ource_tc_cbs_snapshot_policy_attachment.go | 50 +- ..._tc_cbs_snapshot_policy_attachment_test.go | 34 +- .../resource_tc_cbs_snapshot_policy_test.go | 26 +- ...source_tc_cbs_snapshot_share_permission.go | 47 +- ...e_tc_cbs_snapshot_share_permission_test.go | 8 +- .../cbs}/resource_tc_cbs_snapshot_test.go | 30 +- .../cbs}/resource_tc_cbs_storage.go | 123 +-- .../resource_tc_cbs_storage_attachment.go | 56 +- ...resource_tc_cbs_storage_attachment_test.go | 34 +- .../cbs}/resource_tc_cbs_storage_set.go | 45 +- .../resource_tc_cbs_storage_set_attachment.go | 40 +- .../cbs}/resource_tc_cbs_storage_test.go | 84 +- .../resource_tc_cbs_storage_testing_test.go | 8 +- .../services/cbs/service_tencentcloud_cbs.go | 867 ++++++++++++++++++ .../services/cbs/service_tencentcloud_tag.go | 415 +++++++++ 32 files changed, 1977 insertions(+), 463 deletions(-) rename tencentcloud/{ => services/cbs}/data_source_tc_cbs_snapshot_policies.go (87%) rename tencentcloud/{ => services/cbs}/data_source_tc_cbs_snapshot_policies_test.go (88%) rename tencentcloud/{ => services/cbs}/data_source_tc_cbs_snapshots.go (88%) rename tencentcloud/{ => services/cbs}/data_source_tc_cbs_snapshots_test.go (87%) rename tencentcloud/{ => services/cbs}/data_source_tc_cbs_storages.go (93%) rename tencentcloud/{ => services/cbs}/data_source_tc_cbs_storages_set.go (94%) rename tencentcloud/{ => services/cbs}/data_source_tc_cbs_storages_test.go (85%) create mode 100644 tencentcloud/services/cbs/extension_cbs.go create mode 100644 tencentcloud/services/cbs/extension_cvm.go create mode 100644 tencentcloud/services/cbs/extension_tags.go rename tencentcloud/{ => services/cbs}/resource_tc_cbs_disk_backup.go (68%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_disk_backup_rollback_operation.go (67%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_disk_backup_rollback_operation_test.go (74%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_disk_backup_test.go (65%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_snapshot.go (72%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_snapshot_policy.go (75%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_snapshot_policy_attachment.go (63%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_snapshot_policy_attachment_test.go (71%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_snapshot_policy_test.go (81%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_snapshot_share_permission.go (72%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_snapshot_share_permission_test.go (80%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_snapshot_test.go (72%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_storage.go (80%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_storage_attachment.go (71%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_storage_attachment_test.go (70%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_storage_set.go (83%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_storage_set_attachment.go (70%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_storage_test.go (78%) rename tencentcloud/{ => services/cbs}/resource_tc_cbs_storage_testing_test.go (91%) create mode 100644 tencentcloud/services/cbs/service_tencentcloud_cbs.go create mode 100644 tencentcloud/services/cbs/service_tencentcloud_tag.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index cb76fef508..15a5078a67 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cat" "encoding/json" "fmt" @@ -309,10 +310,10 @@ func Provider() *schema.Provider { "tencentcloud_as_scaling_configs": dataSourceTencentCloudAsScalingConfigs(), "tencentcloud_as_scaling_groups": dataSourceTencentCloudAsScalingGroups(), "tencentcloud_as_scaling_policies": dataSourceTencentCloudAsScalingPolicies(), - "tencentcloud_cbs_storages": dataSourceTencentCloudCbsStorages(), - "tencentcloud_cbs_storages_set": dataSourceTencentCloudCbsStoragesSet(), - "tencentcloud_cbs_snapshots": dataSourceTencentCloudCbsSnapshots(), - "tencentcloud_cbs_snapshot_policies": dataSourceTencentCloudCbsSnapshotPolicies(), + "tencentcloud_cbs_storages": cbs.DataSourceTencentCloudCbsStorages(), + "tencentcloud_cbs_storages_set": cbs.DataSourceTencentCloudCbsStoragesSet(), + "tencentcloud_cbs_snapshots": cbs.DataSourceTencentCloudCbsSnapshots(), + "tencentcloud_cbs_snapshot_policies": cbs.DataSourceTencentCloudCbsSnapshotPolicies(), "tencentcloud_clb_instances": dataSourceTencentCloudClbInstances(), "tencentcloud_clb_listeners": dataSourceTencentCloudClbListeners(), "tencentcloud_clb_listener_rules": dataSourceTencentCloudClbListenerRules(), @@ -903,13 +904,13 @@ func Provider() *schema.Provider { "tencentcloud_reserved_instance": resourceTencentCloudReservedInstance(), "tencentcloud_key_pair": resourceTencentCloudKeyPair(), "tencentcloud_placement_group": resourceTencentCloudPlacementGroup(), - "tencentcloud_cbs_snapshot": resourceTencentCloudCbsSnapshot(), - "tencentcloud_cbs_snapshot_policy": resourceTencentCloudCbsSnapshotPolicy(), - "tencentcloud_cbs_storage": resourceTencentCloudCbsStorage(), - "tencentcloud_cbs_storage_set": resourceTencentCloudCbsStorageSet(), - "tencentcloud_cbs_storage_attachment": resourceTencentCloudCbsStorageAttachment(), - "tencentcloud_cbs_storage_set_attachment": resourceTencentCloudCbsStorageSetAttachment(), - "tencentcloud_cbs_snapshot_policy_attachment": resourceTencentCloudCbsSnapshotPolicyAttachment(), + "tencentcloud_cbs_snapshot": cbs.ResourceTencentCloudCbsSnapshot(), + "tencentcloud_cbs_snapshot_policy": cbs.ResourceTencentCloudCbsSnapshotPolicy(), + "tencentcloud_cbs_storage": cbs.ResourceTencentCloudCbsStorage(), + "tencentcloud_cbs_storage_set": cbs.ResourceTencentCloudCbsStorageSet(), + "tencentcloud_cbs_storage_attachment": cbs.ResourceTencentCloudCbsStorageAttachment(), + "tencentcloud_cbs_storage_set_attachment": cbs.ResourceTencentCloudCbsStorageSetAttachment(), + "tencentcloud_cbs_snapshot_policy_attachment": cbs.ResourceTencentCloudCbsSnapshotPolicyAttachment(), "tencentcloud_vpc": resourceTencentCloudVpcInstance(), "tencentcloud_vpc_acl": resourceTencentCloudVpcACL(), "tencentcloud_vpc_acl_attachment": resourceTencentCloudVpcAclAttachment(), @@ -1687,9 +1688,9 @@ func Provider() *schema.Provider { "tencentcloud_mps_schedule": resourceTencentCloudMpsSchedule(), "tencentcloud_mps_enable_schedule_config": resourceTencentCloudMpsEnableScheduleConfig(), "tencentcloud_mps_process_media_operation": resourceTencentCloudMpsProcessMediaOperation(), - "tencentcloud_cbs_disk_backup": resourceTencentCloudCbsDiskBackup(), - "tencentcloud_cbs_snapshot_share_permission": resourceTencentCloudCbsSnapshotSharePermission(), - "tencentcloud_cbs_disk_backup_rollback_operation": resourceTencentCloudCbsDiskBackupRollbackOperation(), + "tencentcloud_cbs_disk_backup": cbs.ResourceTencentCloudCbsDiskBackup(), + "tencentcloud_cbs_snapshot_share_permission": cbs.ResourceTencentCloudCbsSnapshotSharePermission(), + "tencentcloud_cbs_disk_backup_rollback_operation": cbs.ResourceTencentCloudCbsDiskBackupRollbackOperation(), "tencentcloud_chdfs_access_group": resourceTencentCloudChdfsAccessGroup(), "tencentcloud_chdfs_access_rule": resourceTencentCloudChdfsAccessRule(), "tencentcloud_chdfs_file_system": resourceTencentCloudChdfsFileSystem(), diff --git a/tencentcloud/data_source_tc_cbs_snapshot_policies.go b/tencentcloud/services/cbs/data_source_tc_cbs_snapshot_policies.go similarity index 87% rename from tencentcloud/data_source_tc_cbs_snapshot_policies.go rename to tencentcloud/services/cbs/data_source_tc_cbs_snapshot_policies.go index 69594cf459..e50bc77861 100644 --- a/tencentcloud/data_source_tc_cbs_snapshot_policies.go +++ b/tencentcloud/services/cbs/data_source_tc_cbs_snapshot_policies.go @@ -1,16 +1,19 @@ -package tencentcloud +package cbs import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cbs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCbsSnapshotPolicies() *schema.Resource { +func DataSourceTencentCloudCbsSnapshotPolicies() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCbsSnapshotPoliciesRead, @@ -87,9 +90,9 @@ func dataSourceTencentCloudCbsSnapshotPolicies() *schema.Resource { } func dataSourceTencentCloudCbsSnapshotPoliciesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cbs_snapshot_policies.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_cbs_snapshot_policies.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var policyId string var policyName string @@ -100,14 +103,14 @@ func dataSourceTencentCloudCbsSnapshotPoliciesRead(d *schema.ResourceData, meta policyName = v.(string) } cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var policies []*cbs.AutoSnapshotPolicy var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { policies, errRet = cbsService.DescribeSnapshotPolicy(ctx, policyId, policyName) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -143,7 +146,7 @@ func dataSourceTencentCloudCbsSnapshotPoliciesRead(d *schema.ResourceData, meta output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err = writeToFile(output.(string), policyList); err != nil { + if err = tccommon.WriteToFile(output.(string), policyList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_cbs_snapshot_policies_test.go b/tencentcloud/services/cbs/data_source_tc_cbs_snapshot_policies_test.go similarity index 88% rename from tencentcloud/data_source_tc_cbs_snapshot_policies_test.go rename to tencentcloud/services/cbs/data_source_tc_cbs_snapshot_policies_test.go index f70bfa3cfc..8bc10033ad 100644 --- a/tencentcloud/data_source_tc_cbs_snapshot_policies_test.go +++ b/tencentcloud/services/cbs/data_source_tc_cbs_snapshot_policies_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cbs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ func TestAccTencentCloudCbsSnapshotPoliciesDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCbsSnapshotPolicyDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_cbs_snapshots.go b/tencentcloud/services/cbs/data_source_tc_cbs_snapshots.go similarity index 88% rename from tencentcloud/data_source_tc_cbs_snapshots.go rename to tencentcloud/services/cbs/data_source_tc_cbs_snapshots.go index 9be90e6a49..e8caa23fe1 100644 --- a/tencentcloud/data_source_tc_cbs_snapshots.go +++ b/tencentcloud/services/cbs/data_source_tc_cbs_snapshots.go @@ -1,15 +1,18 @@ -package tencentcloud +package cbs import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCbsSnapshots() *schema.Resource { +func DataSourceTencentCloudCbsSnapshots() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCbsSnapshotsRead, @@ -32,7 +35,7 @@ func dataSourceTencentCloudCbsSnapshots() *schema.Resource { "storage_usage": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CBS_STORAGE_USAGE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CBS_STORAGE_USAGE), Description: "Types of CBS which this snapshot created from, and available values include SYSTEM_DISK and DATA_DISK.", }, "project_id": { @@ -114,10 +117,10 @@ func dataSourceTencentCloudCbsSnapshots() *schema.Resource { } func dataSourceTencentCloudCbsSnapshotsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cbs_snapshots.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cbs_snapshots.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]string) if v, ok := d.GetOk("snapshot_id"); ok { @@ -140,13 +143,13 @@ func dataSourceTencentCloudCbsSnapshotsRead(d *schema.ResourceData, meta interfa } cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { snapshots, e := cbsService.DescribeSnapshotsByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } ids := make([]string, 0, len(snapshots)) snapshotList := make([]map[string]interface{}, 0, len(snapshots)) @@ -175,7 +178,7 @@ func dataSourceTencentCloudCbsSnapshotsRead(d *schema.ResourceData, meta interfa output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), snapshotList); e != nil { + if e := tccommon.WriteToFile(output.(string), snapshotList); e != nil { return resource.NonRetryableError(e) } } diff --git a/tencentcloud/data_source_tc_cbs_snapshots_test.go b/tencentcloud/services/cbs/data_source_tc_cbs_snapshots_test.go similarity index 87% rename from tencentcloud/data_source_tc_cbs_snapshots_test.go rename to tencentcloud/services/cbs/data_source_tc_cbs_snapshots_test.go index 95c0529dba..21fd6fb668 100644 --- a/tencentcloud/data_source_tc_cbs_snapshots_test.go +++ b/tencentcloud/services/cbs/data_source_tc_cbs_snapshots_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cbs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ func TestAccTencentCloudCbsSnapshotsDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCbsSnapshotDestroy, Steps: []resource.TestStep{ { @@ -37,7 +39,7 @@ const testAccCbsSnapshotsDataSource = ` resource "tencentcloud_cbs_storage" "storage" { availability_zone = "ap-guangzhou-3" storage_size = 50 - storage_type = "CLOUD_PREMIUM" + storage_type = "tcacctest.CLOUD_PREMIUM" storage_name = "tf-test-storage" } diff --git a/tencentcloud/data_source_tc_cbs_storages.go b/tencentcloud/services/cbs/data_source_tc_cbs_storages.go similarity index 93% rename from tencentcloud/data_source_tc_cbs_storages.go rename to tencentcloud/services/cbs/data_source_tc_cbs_storages.go index 00de37989b..bcd7ccc61e 100644 --- a/tencentcloud/data_source_tc_cbs_storages.go +++ b/tencentcloud/services/cbs/data_source_tc_cbs_storages.go @@ -1,16 +1,19 @@ -package tencentcloud +package cbs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCbsStorages() *schema.Resource { +func DataSourceTencentCloudCbsStorages() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCbsStoragesRead, @@ -38,7 +41,7 @@ func dataSourceTencentCloudCbsStorages() *schema.Resource { "storage_type": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CBS_STORAGE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CBS_STORAGE_TYPE), Description: "Filter by cloud disk media type (`CLOUD_BASIC`: HDD cloud disk | `CLOUD_PREMIUM`: Premium Cloud Storage | `CLOUD_SSD`: SSD cloud disk).", }, "storage_usage": { @@ -186,10 +189,10 @@ func dataSourceTencentCloudCbsStorages() *schema.Resource { } func dataSourceTencentCloudCbsStoragesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cbs_storages.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cbs_storages.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]interface{}) if v, ok := d.GetOk("storage_id"); ok { @@ -240,13 +243,13 @@ func dataSourceTencentCloudCbsStoragesRead(d *schema.ResourceData, meta interfac } cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { storages, e := cbsService.DescribeDisksByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } ids := make([]string, 0, len(storages)) storageList := make([]map[string]interface{}, 0, len(storages)) @@ -287,7 +290,7 @@ func dataSourceTencentCloudCbsStoragesRead(d *schema.ResourceData, meta interfac output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), storageList); e != nil { + if e := tccommon.WriteToFile(output.(string), storageList); e != nil { return resource.NonRetryableError(e) } } diff --git a/tencentcloud/data_source_tc_cbs_storages_set.go b/tencentcloud/services/cbs/data_source_tc_cbs_storages_set.go similarity index 94% rename from tencentcloud/data_source_tc_cbs_storages_set.go rename to tencentcloud/services/cbs/data_source_tc_cbs_storages_set.go index 50dff7c363..2d9f63b7ba 100644 --- a/tencentcloud/data_source_tc_cbs_storages_set.go +++ b/tencentcloud/services/cbs/data_source_tc_cbs_storages_set.go @@ -1,15 +1,18 @@ -package tencentcloud +package cbs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCbsStoragesSet() *schema.Resource { +func DataSourceTencentCloudCbsStoragesSet() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCbsStoragesSetRead, @@ -37,7 +40,7 @@ func dataSourceTencentCloudCbsStoragesSet() *schema.Resource { "storage_type": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CBS_STORAGE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CBS_STORAGE_TYPE), Description: "Filter by cloud disk media type (`CLOUD_BASIC`: HDD cloud disk | `CLOUD_PREMIUM`: Premium Cloud Storage | `CLOUD_SSD`: SSD cloud disk).", }, "storage_usage": { @@ -185,10 +188,10 @@ func dataSourceTencentCloudCbsStoragesSet() *schema.Resource { } func dataSourceTencentCloudCbsStoragesSetRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cbs_storages.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cbs_storages.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]interface{}) if v, ok := d.GetOk("storage_id"); ok { @@ -239,7 +242,7 @@ func dataSourceTencentCloudCbsStoragesSetRead(d *schema.ResourceData, meta inter } cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } storages, e := cbsService.DescribeDisksInParallelByFilter(ctx, params) @@ -285,7 +288,7 @@ func dataSourceTencentCloudCbsStoragesSetRead(d *schema.ResourceData, meta inter output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), storageList); e != nil { + if e := tccommon.WriteToFile(output.(string), storageList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cbs_storages_test.go b/tencentcloud/services/cbs/data_source_tc_cbs_storages_test.go similarity index 85% rename from tencentcloud/data_source_tc_cbs_storages_test.go rename to tencentcloud/services/cbs/data_source_tc_cbs_storages_test.go index c35d52b3e8..36c9564b16 100644 --- a/tencentcloud/data_source_tc_cbs_storages_test.go +++ b/tencentcloud/services/cbs/data_source_tc_cbs_storages_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cbs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ func TestAccTencentCloudCbsStoragesDataSourceId(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCbsStorageDestroy, Steps: []resource.TestStep{ { @@ -21,7 +23,7 @@ func TestAccTencentCloudCbsStoragesDataSourceId(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_cbs_storages.storages", "storage_list.#", "1"), resource.TestCheckResourceAttrSet("data.tencentcloud_cbs_storages.storages", "storage_list.0.storage_id"), resource.TestCheckResourceAttr("data.tencentcloud_cbs_storages.storages", "storage_list.0.storage_name", "tf-test-storage"), - resource.TestCheckResourceAttr("data.tencentcloud_cbs_storages.storages", "storage_list.0.storage_type", "CLOUD_PREMIUM"), + resource.TestCheckResourceAttr("data.tencentcloud_cbs_storages.storages", "storage_list.0.storage_type", "tcacctest.CLOUD_PREMIUM"), resource.TestCheckResourceAttr("data.tencentcloud_cbs_storages.storages", "storage_list.0.storage_size", "50"), resource.TestCheckResourceAttr("data.tencentcloud_cbs_storages.storages", "storage_list.0.availability_zone", "ap-guangzhou-3"), resource.TestCheckResourceAttr("data.tencentcloud_cbs_storages.storages", "storage_list.0.project_id", "0"), @@ -40,8 +42,8 @@ func TestAccTencentCloudCbsStoragesDataSourceNewParams(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCbsStorageDestroy, Steps: []resource.TestStep{ { @@ -56,7 +58,7 @@ func TestAccTencentCloudCbsStoragesDataSourceNewParams(t *testing.T) { const testAccCbsStoragesDataSource = ` resource "tencentcloud_cbs_storage" "storage" { - storage_type = "CLOUD_PREMIUM" + storage_type = "tcacctest.CLOUD_PREMIUM" storage_name = "tf-test-storage" storage_size = 50 availability_zone = "ap-guangzhou-3" @@ -72,7 +74,7 @@ data "tencentcloud_cbs_storages" "storages" { const testAccCbsStoragesDataSourceNewParams = ` data "tencentcloud_cbs_storages" "storages" { storage_name = "disk-foo" - charge_type = ["POSTPAID_BY_HOUR", "PREPAID"] + charge_type = ["tcacctest.POSTPAID_BY_HOUR", "PREPAID"] portable = true storage_state = ["ATTACHED"] instance_ips = ["10.0.0.2"] diff --git a/tencentcloud/services/cbs/extension_cbs.go b/tencentcloud/services/cbs/extension_cbs.go new file mode 100644 index 0000000000..6db1e0c632 --- /dev/null +++ b/tencentcloud/services/cbs/extension_cbs.go @@ -0,0 +1,57 @@ +package cbs + +const ( + CBS_STORAGE_TYPE_CLOUD_BASIC = "CLOUD_BASIC" + CBS_STORAGE_TYPE_CLOUD_PREMIUM = "CLOUD_PREMIUM" + CBS_STORAGE_TYPE_CLOUD_SSD = "CLOUD_SSD" + + CBS_STORAGE_USAGE_SYSTEM_DISK = "SYSTEM_DISK" + CBS_STORAGE_USAGE_DATA_DISK = "DATA_DISK" + + CBS_STORAGE_STATUS_UNATTACHED = "UNATTACHED" + CBS_STORAGE_STATUS_ATTACHING = "ATTACHING" + CBS_STORAGE_STATUS_ATTACHED = "ATTACHED" + CBS_STORAGE_STATUS_EXPANDING = "EXPANDING" + CBS_STORAGE_STATUS_ROLLBACKING = "ROLLBACKING" + CBS_STORAGE_STATUS_TORECYCLE = "TORECYCLE" + + CBS_SNAPSHOT_STATUS_NORMAL = "NORMAL" + CBS_SNAPSHOT_STATUS_CREATING = "CREATING" +) + +var CBS_STORAGE_TYPE = []string{ + CBS_STORAGE_TYPE_CLOUD_BASIC, + CBS_STORAGE_TYPE_CLOUD_PREMIUM, + CBS_STORAGE_TYPE_CLOUD_SSD, +} + +var CBS_STORAGE_USAGE = []string{ + CBS_STORAGE_USAGE_SYSTEM_DISK, + CBS_STORAGE_USAGE_DATA_DISK, +} + +const ( + CBS_PREPAID_RENEW_FLAG_NOTIFY_NOTIFY_AND_AUTO_RENEW = "NOTIFY_AND_AUTO_RENEW" + CBS_PREPAID_RENEW_FLAG_NOTIFY_AND_MANUAL_RENEW = "NOTIFY_AND_MANUAL_RENEW" + CBS_PREPAID_RENEW_FLAG_DISABLE_NOTIFY_AND_MANUAL_RENEW = "DISABLE_NOTIFY_AND_MANUAL_RENEW" + CBS_CHARGE_TYPE_PREPAID = "PREPAID" + CBS_CHARGE_TYPE_POSTPAID = "POSTPAID_BY_HOUR" +) + +var CBS_PREPAID_RENEW_FLAG = []string{ + CBS_PREPAID_RENEW_FLAG_NOTIFY_NOTIFY_AND_AUTO_RENEW, + CBS_PREPAID_RENEW_FLAG_NOTIFY_AND_MANUAL_RENEW, + CBS_PREPAID_RENEW_FLAG_DISABLE_NOTIFY_AND_MANUAL_RENEW, +} + +var CBS_CHARGE_TYPE = []string{ + CBS_CHARGE_TYPE_PREPAID, + CBS_CHARGE_TYPE_POSTPAID, +} + +var CBS_PREPAID_PERIOD = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36} + +const ( + SNAPSHOT_SHARE_PERMISSION_SHARE = "SHARE" + SNAPSHOT_SHARE_PERMISSION_CANCEL = "CANCEL" +) diff --git a/tencentcloud/services/cbs/extension_cvm.go b/tencentcloud/services/cbs/extension_cvm.go new file mode 100644 index 0000000000..26ff7e3296 --- /dev/null +++ b/tencentcloud/services/cbs/extension_cvm.go @@ -0,0 +1,118 @@ +package cbs + +const ( + CVM_CHARGE_TYPE_PREPAID = "PREPAID" + CVM_CHARGE_TYPE_POSTPAID = "POSTPAID_BY_HOUR" + CVM_CHARGE_TYPE_SPOTPAID = "SPOTPAID" + CVM_CHARGE_TYPE_CDHPAID = "CDHPAID" + + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PREPAID = "BANDWIDTH_PREPAID" + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_POSTPAID = "BANDWIDTH_POSTPAID_BY_HOUR" + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PACKAGE = "BANDWIDTH_PACKAGE" + CVM_INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID = "TRAFFIC_POSTPAID_BY_HOUR" + + CVM_STATUS_RUNNING = "RUNNING" + CVM_STATUS_STOPPED = "STOPPED" + CVM_STATUS_SHUTDOWN = "SHUTDOWN" + CVM_STATUS_TERMINATING = "TERMINATING" + CVM_STATUS_LAUNCH_FAILED = "LAUNCH_FAILED" + + CVM_LATEST_OPERATION_STATE_OPERATING = "OPERATING" + CVM_LATEST_OPERATION_STATE_SUCCESS = "SUCCESS" + CVM_LATEST_OPERATION_STATE_FAILED = "FAILED" + + CVM_PREPAID_RENEW_FLAG_NOTIFY_NOTIFY_AND_AUTO_RENEW = "NOTIFY_AND_AUTO_RENEW" + CVM_PREPAID_RENEW_FLAG_NOTIFY_AND_MANUAL_RENEW = "NOTIFY_AND_MANUAL_RENEW" + CVM_PREPAID_RENEW_FLAG_DISABLE_NOTIFY_AND_MANUAL_RENEW = "DISABLE_NOTIFY_AND_MANUAL_RENEW" + + CVM_DISK_TYPE_LOCAL_BASIC = "LOCAL_BASIC" + CVM_DISK_TYPE_LOCAL_SSD = "LOCAL_SSD" + CVM_DISK_TYPE_CLOUD_BASIC = "CLOUD_BASIC" + CVM_DISK_TYPE_CLOUD_SSD = "CLOUD_SSD" + CVM_DISK_TYPE_CLOUD_PREMIUM = "CLOUD_PREMIUM" + CVM_DISK_TYPE_CLOUD_BSSD = "CLOUD_BSSD" + CVM_DISK_TYPE_CLOUD_HSSD = "CLOUD_HSSD" + CVM_DISK_TYPE_CLOUD_TSSD = "CLOUD_TSSD" + + CVM_PLACEMENT_GROUP_TYPE_HOST = "HOST" + CVM_PLACEMENT_GROUP_TYPE_SW = "SW" + CVM_PLACEMENT_GROUP_TYPE_RACK = "RACK" + + ZONE_STATE_AVAILABLE = "AVAILABLE" + ZONE_STATE_UNAVAILABLE = "UNAVAILABLE" + + CVM_NOT_FOUND_ERROR = "InvalidInstanceId.NotFound" + KEY_PAIR_NOT_SUPPORT_ERROR = "InvalidParameterValue.KeyPairNotSupported" + KYE_PAIR_INVALID_ERROR = "InvalidKeyPair" + + CVM_SPOT_INSTANCE_TYPE_ONE_TIME = "ONE-TIME" + + CVM_MARKET_TYPE_SPOT = "spot" + + CVM_IMAGE_LOGIN = "TRUE" + CVM_IMAGE_LOGIN_NOT = "FALSE" + + // @Deprecated use cvm.INVALIDPARAMETERVALUE_ZONENOTSUPPORTED + CVM_ZONE_NOT_SUPPORT_ERROR = "InvalidParameterValue.ZoneNotSupported" + // @Deprecated use cvm.RESOURCEINSUFFICIENT_CLOUDDISKSOLDOUT instead + CVM_CLOUD_DISK_SOLD_OUT_ERROR = "ResourceInsufficient.CloudDiskSoldOut" + + CVM_STOP_MODE_KEEP_CHARGING = "KEEP_CHARGING" + CVM_STOP_MODE_STOP_CHARGING = "STOP_CHARGING" + CVM_SELL_STATUS = "SELL" + CVM_SOLD_OUT_STATUS = "SOLD_OUT" + MIDLINE = "-" + UNDERLINE = "_" + IMAGE_SHARE_PERMISSION_SHARE = "SHARE" + IMAGE_SHARE_PERMISSION_CANCEL = "CANCEL" +) + +// Only client error can cvm retry, others will directly returns +var CVM_RETRYABLE_ERROR = []string{ + // client + //"ClientError.NetworkError", + "ClientError.HttpStatusCodeError", +} + +var CVM_CHARGE_TYPE = []string{ + CVM_CHARGE_TYPE_PREPAID, + CVM_CHARGE_TYPE_POSTPAID, + CVM_CHARGE_TYPE_SPOTPAID, + CVM_CHARGE_TYPE_CDHPAID, +} + +var CVM_INTERNET_CHARGE_TYPE = []string{ + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PREPAID, + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_POSTPAID, + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PACKAGE, + CVM_INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID, +} + +var CVM_PREPAID_PERIOD = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36} + +var CVM_PREPAID_RENEW_FLAG = []string{ + CVM_PREPAID_RENEW_FLAG_NOTIFY_NOTIFY_AND_AUTO_RENEW, + CVM_PREPAID_RENEW_FLAG_NOTIFY_AND_MANUAL_RENEW, + CVM_PREPAID_RENEW_FLAG_DISABLE_NOTIFY_AND_MANUAL_RENEW, +} + +var CVM_DISK_TYPE = []string{ + CVM_DISK_TYPE_LOCAL_BASIC, + CVM_DISK_TYPE_LOCAL_SSD, + CVM_DISK_TYPE_CLOUD_BASIC, + CVM_DISK_TYPE_CLOUD_SSD, + CVM_DISK_TYPE_CLOUD_PREMIUM, + CVM_DISK_TYPE_CLOUD_BSSD, + CVM_DISK_TYPE_CLOUD_HSSD, + CVM_DISK_TYPE_CLOUD_TSSD, +} + +var CVM_PLACEMENT_GROUP_TYPE = []string{ + CVM_PLACEMENT_GROUP_TYPE_HOST, + CVM_PLACEMENT_GROUP_TYPE_SW, + CVM_PLACEMENT_GROUP_TYPE_RACK, +} + +var CVM_SPOT_INSTANCE_TYPE = []string{ + CVM_SPOT_INSTANCE_TYPE_ONE_TIME, +} diff --git a/tencentcloud/services/cbs/extension_tags.go b/tencentcloud/services/cbs/extension_tags.go new file mode 100644 index 0000000000..a4d3f9e690 --- /dev/null +++ b/tencentcloud/services/cbs/extension_tags.go @@ -0,0 +1,3 @@ +package cbs + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/resource_tc_cbs_disk_backup.go b/tencentcloud/services/cbs/resource_tc_cbs_disk_backup.go similarity index 68% rename from tencentcloud/resource_tc_cbs_disk_backup.go rename to tencentcloud/services/cbs/resource_tc_cbs_disk_backup.go index a5f3a62f00..d0107eb32e 100644 --- a/tencentcloud/resource_tc_cbs_disk_backup.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_disk_backup.go @@ -1,16 +1,18 @@ -package tencentcloud +package cbs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" ) -func resourceTencentCloudCbsDiskBackup() *schema.Resource { +func ResourceTencentCloudCbsDiskBackup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCbsDiskBackupCreate, Read: resourceTencentCloudCbsDiskBackupRead, @@ -37,11 +39,11 @@ func resourceTencentCloudCbsDiskBackup() *schema.Resource { } func resourceTencentCloudCbsDiskBackupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_disk_backup.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_disk_backup.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( diskId string @@ -55,16 +57,16 @@ func resourceTencentCloudCbsDiskBackupCreate(d *schema.ResourceData, meta interf diskBackupName = v.(string) } - service := CbsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CbsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} diskBackupId, err := service.CreateDiskBackup(ctx, diskId, diskBackupName) if err != nil { return nil } d.SetId(diskBackupId) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { diskBackup, e := service.DescribeCbsDiskBackupById(ctx, diskBackupId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if *diskBackup.DiskBackupState != "NORMAL" { return resource.RetryableError(fmt.Errorf("DiskBackupState not ready")) @@ -80,14 +82,14 @@ func resourceTencentCloudCbsDiskBackupCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudCbsDiskBackupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_disk_backup.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_disk_backup.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CbsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CbsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} diskBackupId := d.Id() @@ -114,23 +116,23 @@ func resourceTencentCloudCbsDiskBackupRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudCbsDiskBackupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_disk_backup.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_disk_backup.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CbsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CbsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} diskBackupId := d.Id() if err := service.DeleteCbsDiskBackupById(ctx, diskBackupId); err != nil { return err } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { diskBackup, e := service.DescribeCbsDiskBackupById(ctx, diskBackupId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if diskBackup == nil { return nil diff --git a/tencentcloud/resource_tc_cbs_disk_backup_rollback_operation.go b/tencentcloud/services/cbs/resource_tc_cbs_disk_backup_rollback_operation.go similarity index 67% rename from tencentcloud/resource_tc_cbs_disk_backup_rollback_operation.go rename to tencentcloud/services/cbs/resource_tc_cbs_disk_backup_rollback_operation.go index 5b40b8f945..94aa664112 100644 --- a/tencentcloud/resource_tc_cbs_disk_backup_rollback_operation.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_disk_backup_rollback_operation.go @@ -1,4 +1,4 @@ -package tencentcloud +package cbs import ( "context" @@ -6,12 +6,14 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" ) -func resourceTencentCloudCbsDiskBackupRollbackOperation() *schema.Resource { +func ResourceTencentCloudCbsDiskBackupRollbackOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCbsDiskBackupRollbackOperationCreate, Read: resourceTencentCloudCbsDiskBackupRollbackOperationRead, @@ -40,16 +42,16 @@ func resourceTencentCloudCbsDiskBackupRollbackOperation() *schema.Resource { } func resourceTencentCloudCbsDiskBackupRollbackOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_disk_backup_rollback_operation.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_disk_backup_rollback_operation.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) diskBackupId := d.Get("disk_backup_id").(string) diskId := d.Get("disk_id").(string) cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if err := cbsService.ApplyDiskBackup(ctx, diskBackupId, diskId); err != nil { @@ -57,10 +59,10 @@ func resourceTencentCloudCbsDiskBackupRollbackOperationCreate(d *schema.Resource } // deal with state sync delay time.Sleep(time.Second * 1) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { disk, e := cbsService.DescribeDiskById(ctx, diskId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if *disk.Rollbacking { return resource.RetryableError(errors.New("Disk still rollbacking")) @@ -71,22 +73,22 @@ func resourceTencentCloudCbsDiskBackupRollbackOperationCreate(d *schema.Resource return err } - d.SetId(diskBackupId + FILED_SP + diskId) + d.SetId(diskBackupId + tccommon.FILED_SP + diskId) return resourceTencentCloudCbsDiskBackupRollbackOperationRead(d, meta) } func resourceTencentCloudCbsDiskBackupRollbackOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_disk_backup_rollback_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_disk_backup_rollback_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -101,7 +103,7 @@ func resourceTencentCloudCbsDiskBackupRollbackOperationRead(d *schema.ResourceDa } func resourceTencentCloudCbsDiskBackupRollbackOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_disk_backup_rollback_operation.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_disk_backup_rollback_operation.delete")() return nil } diff --git a/tencentcloud/resource_tc_cbs_disk_backup_rollback_operation_test.go b/tencentcloud/services/cbs/resource_tc_cbs_disk_backup_rollback_operation_test.go similarity index 74% rename from tencentcloud/resource_tc_cbs_disk_backup_rollback_operation_test.go rename to tencentcloud/services/cbs/resource_tc_cbs_disk_backup_rollback_operation_test.go index 2750c57655..8aa6a04656 100644 --- a/tencentcloud/resource_tc_cbs_disk_backup_rollback_operation_test.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_disk_backup_rollback_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cbs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ func TestAccTencentCloudCbsDiskBackupRollbackOperationResource_basic(t *testing. t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCbsDiskBackupRollbackOperation, @@ -24,7 +26,7 @@ func TestAccTencentCloudCbsDiskBackupRollbackOperationResource_basic(t *testing. }) } -const testAccCbsDiskBackupRollbackOperation = CbsBackUp + ` +const testAccCbsDiskBackupRollbackOperation = tcacctest.CbsBackUp + ` resource "tencentcloud_cbs_disk_backup" "disk_backup" { disk_id = var.cbs_backup_disk_id disk_backup_name = "test-backup" diff --git a/tencentcloud/resource_tc_cbs_disk_backup_test.go b/tencentcloud/services/cbs/resource_tc_cbs_disk_backup_test.go similarity index 65% rename from tencentcloud/resource_tc_cbs_disk_backup_test.go rename to tencentcloud/services/cbs/resource_tc_cbs_disk_backup_test.go index 8167226106..5fcb3808f9 100644 --- a/tencentcloud/resource_tc_cbs_disk_backup_test.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_disk_backup_test.go @@ -1,12 +1,17 @@ -package tencentcloud +package cbs_test import ( "context" "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" cbs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312" + + localcbs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs" ) func init() { @@ -14,10 +19,10 @@ func init() { resource.AddTestSweepers("tencentcloud_cbs_disk_backup", &resource.Sweeper{ Name: "tencentcloud_cbs_disk_backup", F: func(r string) error { - logId := getLogId(contextNil) - cli, _ := sharedClientForRegion(r) + logId := tccommon.GetLogId(tccommon.ContextNil) + cli, _ := tcacctest.SharedClientForRegion(r) request := cbs.NewDescribeDiskBackupsRequest() - resp, err := cli.(*TencentCloudClient).apiV3Conn.UseCbsClient().DescribeDiskBackups(request) + resp, err := cli.(tccommon.ProviderMeta).GetAPIV3Conn().UseCbsClient().DescribeDiskBackups(request) if err != nil { return err } @@ -28,13 +33,13 @@ func init() { created = time.Now() } name := *diskBuckup.DiskBackupName - if isResourcePersist(name, &created) { + if tcacctest.IsResourcePersist(name, &created) { continue } buckupId := *diskBuckup.DiskBackupId - client := cli.(*TencentCloudClient).apiV3Conn - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CbsService{client} + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localcbs.NewCbsService(client) err = service.DeleteCbsDiskBackupById(ctx, buckupId) if err != nil { continue @@ -50,8 +55,8 @@ func TestAccTencentCloudCbsDiskBackupResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCbsDiskBackup, diff --git a/tencentcloud/resource_tc_cbs_snapshot.go b/tencentcloud/services/cbs/resource_tc_cbs_snapshot.go similarity index 72% rename from tencentcloud/resource_tc_cbs_snapshot.go rename to tencentcloud/services/cbs/resource_tc_cbs_snapshot.go index 14b77e99b3..0b9566a2dd 100644 --- a/tencentcloud/resource_tc_cbs_snapshot.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_snapshot.go @@ -1,10 +1,12 @@ -package tencentcloud +package cbs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -12,7 +14,7 @@ import ( cbs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312" ) -func resourceTencentCloudCbsSnapshot() *schema.Resource { +func ResourceTencentCloudCbsSnapshot() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCbsSnapshotCreate, Read: resourceTencentCloudCbsSnapshotRead, @@ -26,7 +28,7 @@ func resourceTencentCloudCbsSnapshot() *schema.Resource { "snapshot_name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(2, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(2, 60), Description: "Name of the snapshot.", }, "storage_id": { @@ -71,10 +73,10 @@ func resourceTencentCloudCbsSnapshot() *schema.Resource { } func resourceTencentCloudCbsSnapshotCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_snapshot.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_snapshot.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) storageId := d.Get("storage_id").(string) snapshotName := d.Get("snapshot_name").(string) @@ -85,15 +87,15 @@ func resourceTencentCloudCbsSnapshotCreate(d *schema.ResourceData, meta interfac tags = temp } cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } snapshotId := "" - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { var e error snapshotId, e = cbsService.CreateSnapshot(ctx, storageId, snapshotName, tags) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } d.SetId(snapshotId) return nil @@ -104,18 +106,18 @@ func resourceTencentCloudCbsSnapshotCreate(d *schema.ResourceData, meta interfac } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("cvm", "volume", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("cvm", "volume", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } } - err = resource.Retry(20*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(20*tccommon.ReadRetryTimeout, func() *resource.RetryError { snapshot, e := cbsService.DescribeSnapshotById(ctx, snapshotId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if snapshot == nil { return resource.RetryableError(fmt.Errorf("cbs snapshot is nil")) @@ -137,23 +139,23 @@ func resourceTencentCloudCbsSnapshotCreate(d *schema.ResourceData, meta interfac } func resourceTencentCloudCbsSnapshotRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_snapshot.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_snapshot.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) snapshotId := d.Id() cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var snapshot *cbs.Snapshot var e error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { snapshot, e = cbsService.DescribeSnapshotById(ctx, snapshotId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -173,7 +175,7 @@ func resourceTencentCloudCbsSnapshotRead(d *schema.ResourceData, meta interface{ _ = d.Set("snapshot_name", snapshot.SnapshotName) _ = d.Set("snapshot_status", snapshot.SnapshotState) - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "cvm", "volume", tcClient.Region, d.Id()) if err != nil { @@ -186,22 +188,22 @@ func resourceTencentCloudCbsSnapshotRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCbsSnapshotUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_snapshot.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_snapshot.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) snapshotId := d.Id() if d.HasChange("snapshot_name") { snapshotName := d.Get("snapshot_name").(string) cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := cbsService.ModifySnapshotName(ctx, snapshotId, snapshotName) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -216,9 +218,9 @@ func resourceTencentCloudCbsSnapshotUpdate(d *schema.ResourceData, meta interfac oldValue, newValue := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("cvm", "volume", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("cvm", "volume", tcClient.Region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -229,20 +231,20 @@ func resourceTencentCloudCbsSnapshotUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCloudCbsSnapshotDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_snapshot.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_snapshot.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) snapshotId := d.Id() cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := cbsService.DeleteSnapshot(ctx, snapshotId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cbs_snapshot_policy.go b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy.go similarity index 75% rename from tencentcloud/resource_tc_cbs_snapshot_policy.go rename to tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy.go index c332659c9c..c852974238 100644 --- a/tencentcloud/resource_tc_cbs_snapshot_policy.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy.go @@ -1,17 +1,20 @@ -package tencentcloud +package cbs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cbs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCbsSnapshotPolicy() *schema.Resource { +func ResourceTencentCloudCbsSnapshotPolicy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCbsSnapshotPolicyCreate, Read: resourceTencentCloudCbsSnapshotPolicyRead, @@ -25,7 +28,7 @@ func resourceTencentCloudCbsSnapshotPolicy() *schema.Resource { "snapshot_policy_name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(2, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(2, 60), Description: "Name of snapshot policy. The maximum length can not exceed 60 bytes.", }, "repeat_weekdays": { @@ -33,7 +36,7 @@ func resourceTencentCloudCbsSnapshotPolicy() *schema.Resource { Required: true, Elem: &schema.Schema{ Type: schema.TypeInt, - ValidateFunc: validateIntegerInRange(0, 6), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 6), }, Description: "Periodic snapshot is enabled. Valid values: [0, 1, 2, 3, 4, 5, 6]. 0 means Sunday, 1-6 means Monday to Saturday.", }, @@ -42,7 +45,7 @@ func resourceTencentCloudCbsSnapshotPolicy() *schema.Resource { Required: true, Elem: &schema.Schema{ Type: schema.TypeInt, - ValidateFunc: validateIntegerInRange(0, 23), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 23), }, Description: "Trigger times of periodic snapshot. Valid value ranges: (0~23). The 0 means 00:00, and so on.", }, @@ -57,9 +60,9 @@ func resourceTencentCloudCbsSnapshotPolicy() *schema.Resource { } func resourceTencentCloudCbsSnapshotPolicyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_snapshot_policy.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_snapshot_policy.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cbs.NewCreateAutoSnapshotPolicyRequest() request.AutoSnapshotPolicyName = helper.String(d.Get("snapshot_policy_name").(string)) @@ -82,12 +85,12 @@ func resourceTencentCloudCbsSnapshotPolicyCreate(d *schema.ResourceData, meta in request.RetentionDays = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseCbsClient().CreateAutoSnapshotPolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCbsClient().CreateAutoSnapshotPolicy(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } if response.Response.AutoSnapshotPolicyId == nil { return resource.NonRetryableError(fmt.Errorf("snapshot policy id is nil")) @@ -104,23 +107,23 @@ func resourceTencentCloudCbsSnapshotPolicyCreate(d *schema.ResourceData, meta in } func resourceTencentCloudCbsSnapshotPolicyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_snapshot_policy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_snapshot_policy.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) policyId := d.Id() cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var policy *cbs.AutoSnapshotPolicy var e error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { policy, e = cbsService.DescribeSnapshotPolicyById(ctx, policyId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -144,9 +147,9 @@ func resourceTencentCloudCbsSnapshotPolicyRead(d *schema.ResourceData, meta inte } func resourceTencentCloudCbsSnapshotPolicyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_snapshot_policy.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_snapshot_policy.update")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) policyId := d.Id() request := cbs.NewModifyAutoSnapshotPolicyAttributeRequest() @@ -173,12 +176,12 @@ func resourceTencentCloudCbsSnapshotPolicyUpdate(d *schema.ResourceData, meta in request.Policy = append(request.Policy, policy) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseCbsClient().ModifyAutoSnapshotPolicyAttribute(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCbsClient().ModifyAutoSnapshotPolicyAttribute(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -191,20 +194,20 @@ func resourceTencentCloudCbsSnapshotPolicyUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudCbsSnapshotPolicyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_snapshot_policy.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_snapshot_policy.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) policyId := d.Id() cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := cbsService.DeleteSnapshotPolicy(ctx, policyId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cbs_snapshot_policy_attachment.go b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy_attachment.go similarity index 63% rename from tencentcloud/resource_tc_cbs_snapshot_policy_attachment.go rename to tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy_attachment.go index 4645b7f7b8..7a98a4e065 100644 --- a/tencentcloud/resource_tc_cbs_snapshot_policy_attachment.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package cbs import ( "context" @@ -6,12 +6,14 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cbs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312" ) -func resourceTencentCloudCbsSnapshotPolicyAttachment() *schema.Resource { +func ResourceTencentCloudCbsSnapshotPolicyAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCbsSnapshotPolicyAttachmentCreate, Read: resourceTencentCloudCbsSnapshotPolicyAttachmentRead, @@ -35,19 +37,19 @@ func resourceTencentCloudCbsSnapshotPolicyAttachment() *schema.Resource { } func resourceTencentCloudCbsSnapshotPolicyAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_snapshot_policy_attachment.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_cbs_snapshot_policy_attachment.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) storageId := d.Get("storage_id").(string) policyId := d.Get("snapshot_policy_id").(string) cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := cbsService.AttachSnapshotPolicy(ctx, storageId, policyId) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -56,33 +58,33 @@ func resourceTencentCloudCbsSnapshotPolicyAttachmentCreate(d *schema.ResourceDat return err } - d.SetId(storageId + FILED_SP + policyId) + d.SetId(storageId + tccommon.FILED_SP + policyId) return resourceTencentCloudCbsSnapshotPolicyAttachmentRead(d, meta) } func resourceTencentCloudCbsSnapshotPolicyAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_snapshot_policy_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_snapshot_policy_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() - idSplit := strings.Split(id, FILED_SP) + idSplit := strings.Split(id, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("tencentcloud_cbs_snapshot_policy_attachment id is illegal: %s", id) } storageId := idSplit[0] policyId := idSplit[1] cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var policy *cbs.AutoSnapshotPolicy var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { policy, errRet = cbsService.DescribeAttachedSnapshotPolicy(ctx, storageId, policyId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -101,24 +103,24 @@ func resourceTencentCloudCbsSnapshotPolicyAttachmentRead(d *schema.ResourceData, } func resourceTencentCloudCbsSnapshotPolicyAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_snapshot_policy_attachment.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_cbs_snapshot_policy_attachment.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() - idSplit := strings.Split(id, FILED_SP) + idSplit := strings.Split(id, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("tencentcloud_cbs_snapshot_policy_attachment id is illegal: %s", id) } storageId := idSplit[0] policyId := idSplit[1] cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := cbsService.UnattachSnapshotPolicy(ctx, storageId, policyId) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) diff --git a/tencentcloud/resource_tc_cbs_snapshot_policy_attachment_test.go b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy_attachment_test.go similarity index 71% rename from tencentcloud/resource_tc_cbs_snapshot_policy_attachment_test.go rename to tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy_attachment_test.go index 0e18fa1970..c2fe5eb809 100644 --- a/tencentcloud/resource_tc_cbs_snapshot_policy_attachment_test.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy_attachment_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cbs_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcbs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs" + "context" "errors" "fmt" @@ -15,8 +19,8 @@ func TestAccTencentCloudCbsSnapshotPolicyAttachment(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCbsSnapshotPolicyAttachmentDestroy, Steps: []resource.TestStep{ { @@ -32,18 +36,16 @@ func TestAccTencentCloudCbsSnapshotPolicyAttachment(t *testing.T) { } func testAccCheckCbsSnapshotPolicyAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cbsService := CbsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cbsService := localcbs.NewCbsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cbs_snapshot_policy_attachment" { continue } id := rs.Primary.ID - idSplit := strings.Split(id, FILED_SP) + idSplit := strings.Split(id, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("tencentcloud_cbs_snapshot_policy_attachment id is illegal: %s", id) } @@ -63,8 +65,8 @@ func testAccCheckCbsSnapshotPolicyAttachmentDestroy(s *terraform.State) error { func testAccCheckCbsSnapshotPolicyAttachmentExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -74,15 +76,13 @@ func testAccCheckCbsSnapshotPolicyAttachmentExists(n string) resource.TestCheckF return errors.New("cbs snapshot policy attachment id is not set") } id := rs.Primary.ID - idSplit := strings.Split(id, FILED_SP) + idSplit := strings.Split(id, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("tencentcloud_cbs_snapshot_policy_attachment id is illegal: %s", id) } storageId := idSplit[0] policyId := idSplit[1] - cbsService := CbsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cbsService := localcbs.NewCbsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) policy, err := cbsService.DescribeAttachedSnapshotPolicy(ctx, storageId, policyId) if err != nil { return err @@ -94,11 +94,11 @@ func testAccCheckCbsSnapshotPolicyAttachmentExists(n string) resource.TestCheckF } } -const testAccCbsSnapshotPolicyAttachmentConfig = defaultVpcVariable + ` +const testAccCbsSnapshotPolicyAttachmentConfig = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_cbs_storage" "foo" { availability_zone = var.availability_zone storage_size = 100 - storage_type = "CLOUD_PREMIUM" + storage_type = "tcacctest.CLOUD_PREMIUM" storage_name = var.instance_name } diff --git a/tencentcloud/resource_tc_cbs_snapshot_policy_test.go b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy_test.go similarity index 81% rename from tencentcloud/resource_tc_cbs_snapshot_policy_test.go rename to tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy_test.go index ee80eac372..bf77a7e29e 100644 --- a/tencentcloud/resource_tc_cbs_snapshot_policy_test.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cbs_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcbs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs" + "context" "fmt" "testing" @@ -13,8 +17,8 @@ func TestAccTencentCloudCbsSnapshotPolicy(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCbsSnapshotPolicyDestroy, Steps: []resource.TestStep{ { @@ -52,12 +56,10 @@ func TestAccTencentCloudCbsSnapshotPolicy(t *testing.T) { } func testAccCheckCbsSnapshotPolicyDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cbsService := CbsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cbsService := localcbs.NewCbsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cbs_snapshot_policy" { continue @@ -76,8 +78,8 @@ func testAccCheckCbsSnapshotPolicyDestroy(s *terraform.State) error { func testAccCheckSnapshotPolicyExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -86,9 +88,7 @@ func testAccCheckSnapshotPolicyExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cbs snapshot policy id is not set") } - cbsService := CbsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cbsService := localcbs.NewCbsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) policy, err := cbsService.DescribeSnapshotPolicyById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_cbs_snapshot_share_permission.go b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_share_permission.go similarity index 72% rename from tencentcloud/resource_tc_cbs_snapshot_share_permission.go rename to tencentcloud/services/cbs/resource_tc_cbs_snapshot_share_permission.go index ff8aad4243..8b8c74d46c 100644 --- a/tencentcloud/resource_tc_cbs_snapshot_share_permission.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_share_permission.go @@ -1,13 +1,16 @@ -package tencentcloud +package cbs import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCbsSnapshotSharePermission() *schema.Resource { +func ResourceTencentCloudCbsSnapshotSharePermission() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCbsSnapshotSharePermissionCreate, Read: resourceTencentCloudCbsSnapshotSharePermissionRead, @@ -35,11 +38,11 @@ func resourceTencentCloudCbsSnapshotSharePermission() *schema.Resource { } func resourceTencentCloudCbsSnapshotSharePermissionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_snapshot_share_permission.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_snapshot_share_permission.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var snapshotId string var accountIdsSet []interface{} @@ -51,7 +54,7 @@ func resourceTencentCloudCbsSnapshotSharePermissionCreate(d *schema.ResourceData snapshotId = v.(string) } - service := CbsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CbsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} err := service.ModifySnapshotsSharePermission(ctx, snapshotId, SNAPSHOT_SHARE_PERMISSION_SHARE, helper.InterfacesStrings(accountIdsSet)) if err != nil { return err @@ -62,14 +65,14 @@ func resourceTencentCloudCbsSnapshotSharePermissionCreate(d *schema.ResourceData } func resourceTencentCloudCbsSnapshotSharePermissionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_snapshot_share_permission.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_snapshot_share_permission.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CbsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CbsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} snapshotId := d.Id() @@ -89,13 +92,13 @@ func resourceTencentCloudCbsSnapshotSharePermissionRead(d *schema.ResourceData, } func resourceTencentCloudCbsSnapshotSharePermissionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_snapshot_share_permission.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_snapshot_share_permission.update")() + defer tccommon.InconsistentCheck(d, meta)() snapshotId := d.Id() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CbsService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := CbsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if d.HasChange("account_ids") { old, new := d.GetChange("account_ids") oldSet := old.(*schema.Set) @@ -120,13 +123,13 @@ func resourceTencentCloudCbsSnapshotSharePermissionUpdate(d *schema.ResourceData } func resourceTencentCloudCbsSnapshotSharePermissionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_snapshot_share_permission.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_snapshot_share_permission.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CbsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CbsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} snapshotId := d.Id() snapshotSharePermissions, err := service.DescribeCbsSnapshotSharePermissionById(ctx, snapshotId) if err != nil { diff --git a/tencentcloud/resource_tc_cbs_snapshot_share_permission_test.go b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_share_permission_test.go similarity index 80% rename from tencentcloud/resource_tc_cbs_snapshot_share_permission_test.go rename to tencentcloud/services/cbs/resource_tc_cbs_snapshot_share_permission_test.go index d5e7b6e37f..4790fa10e4 100644 --- a/tencentcloud/resource_tc_cbs_snapshot_share_permission_test.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_share_permission_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cbs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCbsSnapshotSharePermissionResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCbsSnapshotSharePermission, diff --git a/tencentcloud/resource_tc_cbs_snapshot_test.go b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_test.go similarity index 72% rename from tencentcloud/resource_tc_cbs_snapshot_test.go rename to tencentcloud/services/cbs/resource_tc_cbs_snapshot_test.go index 92bd6727bc..dde8eec736 100644 --- a/tencentcloud/resource_tc_cbs_snapshot_test.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cbs_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcbs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs" + "context" "fmt" "testing" @@ -13,8 +17,8 @@ func TestAccTencentCloudCbsSnapshot(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCbsSnapshotDestroy, Steps: []resource.TestStep{ { @@ -41,12 +45,10 @@ func TestAccTencentCloudCbsSnapshot(t *testing.T) { } func testAccCheckCbsSnapshotDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cbsService := CbsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cbsService := localcbs.NewCbsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cbs_snapshot" { continue @@ -65,8 +67,8 @@ func testAccCheckCbsSnapshotDestroy(s *terraform.State) error { func testAccCheckSnapshotExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -75,9 +77,7 @@ func testAccCheckSnapshotExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cbs snapshot id is set") } - cbsService := CbsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cbsService := localcbs.NewCbsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) snapshot, err := cbsService.DescribeSnapshotById(ctx, rs.Primary.ID) if err != nil { return err @@ -93,7 +93,7 @@ const testAccCbsSnapshot = ` resource "tencentcloud_cbs_storage" "storage" { availability_zone = "ap-guangzhou-3" storage_size = 50 - storage_type = "CLOUD_PREMIUM" + storage_type = "tcacctest.CLOUD_PREMIUM" storage_name = "tf-test-storage" } @@ -107,7 +107,7 @@ const testAccCbsSnapshot_update = ` resource "tencentcloud_cbs_storage" "storage" { availability_zone = "ap-guangzhou-3" storage_size = 50 - storage_type = "CLOUD_PREMIUM" + storage_type = "tcacctest.CLOUD_PREMIUM" storage_name = "tf-test-storage" } diff --git a/tencentcloud/resource_tc_cbs_storage.go b/tencentcloud/services/cbs/resource_tc_cbs_storage.go similarity index 80% rename from tencentcloud/resource_tc_cbs_storage.go rename to tencentcloud/services/cbs/resource_tc_cbs_storage.go index ebdff290d9..4e6537fc18 100644 --- a/tencentcloud/resource_tc_cbs_storage.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_storage.go @@ -1,17 +1,20 @@ -package tencentcloud +package cbs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cbs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCbsStorage() *schema.Resource { +func ResourceTencentCloudCbsStorage() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCbsStorageCreate, Read: resourceTencentCloudCbsStorageRead, @@ -37,28 +40,28 @@ func resourceTencentCloudCbsStorage() *schema.Resource { Deprecated: "It has been deprecated from version 1.33.0. Set `prepaid_period` instead.", Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerInRange(1, 36), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 36), Description: "The purchased usage period of CBS. Valid values: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36].", }, "charge_type": { Type: schema.TypeString, Optional: true, Default: CBS_CHARGE_TYPE_POSTPAID, - ValidateFunc: validateAllowedStringValue(CBS_CHARGE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CBS_CHARGE_TYPE), Description: "The charge type of CBS instance. Valid values are `PREPAID` and `POSTPAID_BY_HOUR`. The default is `POSTPAID_BY_HOUR`.", }, "prepaid_period": { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateAllowedIntValue(CBS_PREPAID_PERIOD), + ValidateFunc: tccommon.ValidateAllowedIntValue(CBS_PREPAID_PERIOD), Description: "The tenancy (time unit is month) of the prepaid instance, NOTE: it only works when charge_type is set to `PREPAID`. Valid values are 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36.", }, "prepaid_renew_flag": { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateAllowedStringValue(CBS_PREPAID_RENEW_FLAG), + ValidateFunc: tccommon.ValidateAllowedStringValue(CBS_PREPAID_RENEW_FLAG), Description: "Auto Renewal flag. Value range: `NOTIFY_AND_AUTO_RENEW`: Notify expiry and renew automatically, `NOTIFY_AND_MANUAL_RENEW`: Notify expiry but do not renew automatically, `DISABLE_NOTIFY_AND_MANUAL_RENEW`: Neither notify expiry nor renew automatically. Default value range: `NOTIFY_AND_MANUAL_RENEW`: Notify expiry but do not renew automatically. NOTE: it only works when charge_type is set to `PREPAID`.", }, "availability_zone": { @@ -70,7 +73,7 @@ func resourceTencentCloudCbsStorage() *schema.Resource { "storage_name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(2, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(2, 60), Description: "Name of CBS. The maximum length can not exceed 60 bytes.", }, "snapshot_id": { @@ -130,12 +133,12 @@ func resourceTencentCloudCbsStorage() *schema.Resource { } func resourceTencentCloudCbsStorageCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_storage.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_storage.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } request := cbs.NewCreateDisksRequest() @@ -189,12 +192,12 @@ func resourceTencentCloudCbsStorageCreate(d *schema.ResourceData, meta interface } storageId := "" - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseCbsClient().CreateDisks(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCbsClient().CreateDisks(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e, InternalError) + return tccommon.RetryError(e, tccommon.InternalError) } if len(response.Response.DiskIdSet) < 1 { @@ -218,19 +221,19 @@ func resourceTencentCloudCbsStorageCreate(d *schema.ResourceData, meta interface } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("cvm", "volume", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("cvm", "volume", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } } // must wait for finishing creating disk - err = resource.Retry(10*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { storage, e := cbsService.DescribeDiskById(ctx, storageId) if e != nil { - return retryError(e, InternalError) + return tccommon.RetryError(e, tccommon.InternalError) } if storage == nil { return resource.RetryableError(fmt.Errorf("storage is still creating...")) @@ -245,23 +248,23 @@ func resourceTencentCloudCbsStorageCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudCbsStorageRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_storage.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_storage.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) storageId := d.Id() cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var storage *cbs.Disk var e error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { storage, e = cbsService.DescribeDiskById(ctx, storageId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -290,7 +293,7 @@ func resourceTencentCloudCbsStorageRead(d *schema.ResourceData, meta interface{} _ = d.Set("prepaid_renew_flag", storage.RenewFlag) } - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "cvm", "volume", tcClient.Region, d.Id()) if err != nil { @@ -303,10 +306,10 @@ func resourceTencentCloudCbsStorageRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudCbsStorageUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_storage.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_storage.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) //only support update prepaid_period when upgrade chargeType if d.HasChange("prepaid_period") && (!d.HasChange("charge_type") && d.Get("charge_type").(string) == CBS_CHARGE_TYPE_PREPAID) { @@ -317,7 +320,7 @@ func resourceTencentCloudCbsStorageUpdate(d *schema.ResourceData, meta interface } cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } d.Partial(true) @@ -337,10 +340,10 @@ func resourceTencentCloudCbsStorageUpdate(d *schema.ResourceData, meta interface } if changed { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := cbsService.ModifyDiskAttributes(ctx, storageId, storageName, projectId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -358,10 +361,10 @@ func resourceTencentCloudCbsStorageUpdate(d *schema.ResourceData, meta interface return fmt.Errorf("storage size must be greater than current storage size") } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := cbsService.ResizeDisk(ctx, storageId, newValue) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -370,10 +373,10 @@ func resourceTencentCloudCbsStorageUpdate(d *schema.ResourceData, meta interface return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { storage, e := cbsService.DescribeDiskById(ctx, storageId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if *storage.DiskState == CBS_STORAGE_STATUS_EXPANDING { @@ -393,10 +396,10 @@ func resourceTencentCloudCbsStorageUpdate(d *schema.ResourceData, meta interface if d.HasChange("snapshot_id") { snapshotId := d.Get("snapshot_id").(string) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := cbsService.ApplySnapshot(ctx, storageId, snapshotId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -405,10 +408,10 @@ func resourceTencentCloudCbsStorageUpdate(d *schema.ResourceData, meta interface return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { storage, e := cbsService.DescribeDiskById(ctx, storageId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if storage != nil && *storage.DiskState == CBS_STORAGE_STATUS_ROLLBACKING { return resource.RetryableError(fmt.Errorf("cbs storage status is %s", *storage.DiskState)) @@ -424,10 +427,10 @@ func resourceTencentCloudCbsStorageUpdate(d *schema.ResourceData, meta interface if d.HasChange("throughput_performance") { throughputPerformance := d.Get("throughput_performance").(int) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := cbsService.ModifyThroughputPerformance(ctx, storageId, throughputPerformance) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -451,9 +454,9 @@ func resourceTencentCloudCbsStorageUpdate(d *schema.ResourceData, meta interface oldValue, newValue := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("cvm", "volume", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("cvm", "volume", tcClient.Region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -474,10 +477,10 @@ func resourceTencentCloudCbsStorageUpdate(d *schema.ResourceData, meta interface } //check charge Type - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { storage, e := cbsService.DescribeDiskById(ctx, storageId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if storage != nil && (*storage.DiskState == CBS_STORAGE_STATUS_EXPANDING || *storage.DiskChargeType != CBS_CHARGE_TYPE_PREPAID) { return resource.RetryableError(fmt.Errorf("cbs storage status is %s, charget type is %s", *storage.DiskState, *storage.DiskChargeType)) @@ -505,10 +508,10 @@ func resourceTencentCloudCbsStorageUpdate(d *schema.ResourceData, meta interface return err } //check renew flag - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { storage, e := cbsService.DescribeDiskById(ctx, storageId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if storage != nil && (*storage.DiskState == CBS_STORAGE_STATUS_EXPANDING || *storage.RenewFlag != renewFlag) { return resource.RetryableError(fmt.Errorf("cbs storage status is %s, renew flag is %s", *storage.DiskState, *storage.RenewFlag)) @@ -529,23 +532,23 @@ func resourceTencentCloudCbsStorageUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudCbsStorageDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_storage.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_storage.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) storageId := d.Id() //check is force delete or not forceDelete := d.Get("force_delete").(bool) notExist := false cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := cbsService.DeleteDiskById(ctx, storageId) if e != nil { - return retryError(e, InternalError) + return tccommon.RetryError(e, tccommon.InternalError) } return nil }) @@ -555,10 +558,10 @@ func resourceTencentCloudCbsStorageDelete(d *schema.ResourceData, meta interface } //check exist - err = resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { storage, errRet := cbsService.DescribeDiskById(ctx, storageId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if storage == nil { notExist = true @@ -582,11 +585,11 @@ func resourceTencentCloudCbsStorageDelete(d *schema.ResourceData, meta interface //exist in recycle //delete again - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := cbsService.DeleteDiskById(ctx, storageId) //when state is terminating, do not delete but check exist if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil @@ -596,10 +599,10 @@ func resourceTencentCloudCbsStorageDelete(d *schema.ResourceData, meta interface } //describe and check not exist - err = resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { storage, errRet := cbsService.DescribeDiskById(ctx, storageId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if storage == nil { return nil diff --git a/tencentcloud/resource_tc_cbs_storage_attachment.go b/tencentcloud/services/cbs/resource_tc_cbs_storage_attachment.go similarity index 71% rename from tencentcloud/resource_tc_cbs_storage_attachment.go rename to tencentcloud/services/cbs/resource_tc_cbs_storage_attachment.go index 9780ea1ada..d1592d52bd 100644 --- a/tencentcloud/resource_tc_cbs_storage_attachment.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_storage_attachment.go @@ -1,16 +1,18 @@ -package tencentcloud +package cbs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cbs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312" ) -func resourceTencentCloudCbsStorageAttachment() *schema.Resource { +func ResourceTencentCloudCbsStorageAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCbsStorageAttachmentCreate, Read: resourceTencentCloudCbsStorageAttachmentRead, @@ -37,22 +39,22 @@ func resourceTencentCloudCbsStorageAttachment() *schema.Resource { } func resourceTencentCloudCbsStorageAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_storage_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_storage_attachment.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) storageId := d.Get("storage_id").(string) instanceId := d.Get("instance_id").(string) cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := cbsService.AttachDisk(ctx, storageId, instanceId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -63,10 +65,10 @@ func resourceTencentCloudCbsStorageAttachmentCreate(d *schema.ResourceData, meta d.SetId(storageId) - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { storage, e := cbsService.DescribeDiskById(ctx, storageId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if storage == nil { return resource.NonRetryableError(fmt.Errorf("cbs storage is nil")) @@ -89,23 +91,23 @@ func resourceTencentCloudCbsStorageAttachmentCreate(d *schema.ResourceData, meta } func resourceTencentCloudCbsStorageAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_storage_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_storage_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) storageId := d.Id() cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var storage *cbs.Disk var e error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { storage, e = cbsService.DescribeDiskById(ctx, storageId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -125,21 +127,21 @@ func resourceTencentCloudCbsStorageAttachmentRead(d *schema.ResourceData, meta i } func resourceTencentCloudCbsStorageAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_storage_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_storage_attachment.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) storageId := d.Id() cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } instanceId := "" - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { storage, e := cbsService.DescribeDiskById(ctx, storageId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if storage == nil || !*storage.Attached { log.Printf("[DEBUG]%s disk id %s is not attached", logId, storageId) @@ -157,10 +159,10 @@ func resourceTencentCloudCbsStorageAttachmentDelete(d *schema.ResourceData, meta return nil } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := cbsService.DetachDisk(ctx, storageId, instanceId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -169,10 +171,10 @@ func resourceTencentCloudCbsStorageAttachmentDelete(d *schema.ResourceData, meta return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { storage, e := cbsService.DescribeDiskById(ctx, storageId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if storage == nil || !*storage.Attached { return nil diff --git a/tencentcloud/resource_tc_cbs_storage_attachment_test.go b/tencentcloud/services/cbs/resource_tc_cbs_storage_attachment_test.go similarity index 70% rename from tencentcloud/resource_tc_cbs_storage_attachment_test.go rename to tencentcloud/services/cbs/resource_tc_cbs_storage_attachment_test.go index b7f2501aee..58befd3053 100644 --- a/tencentcloud/resource_tc_cbs_storage_attachment_test.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_storage_attachment_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cbs_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcbs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs" + "context" "fmt" "testing" @@ -13,8 +17,8 @@ func TestAccTencentCloudCbsStorageAttachment(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCsbStorageAttachmentDestroy, Steps: []resource.TestStep{ { @@ -35,12 +39,10 @@ func TestAccTencentCloudCbsStorageAttachment(t *testing.T) { } func testAccCheckCsbStorageAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cbsService := CbsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cbsService := localcbs.NewCbsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cbs_storage_attachment" { continue @@ -63,8 +65,8 @@ func testAccCheckCsbStorageAttachmentDestroy(s *terraform.State) error { func testAccCheckCbsStorageAttachmentExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -73,9 +75,7 @@ func testAccCheckCbsStorageAttachmentExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cbs storage attachment id is not set") } - cbsService := CbsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cbsService := localcbs.NewCbsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) storage, err := cbsService.DescribeDiskById(ctx, rs.Primary.ID) if err != nil { return err @@ -87,21 +87,21 @@ func testAccCheckCbsStorageAttachmentExists(n string) resource.TestCheckFunc { } } -const testAccCbsStorageAttachmentConfig = defaultInstanceVariable + defaultAzVariable + ` +const testAccCbsStorageAttachmentConfig = tcacctest.DefaultInstanceVariable + tcacctest.DefaultAzVariable + ` resource "tencentcloud_instance" "test_cbs_attach" { instance_name = "test-cbs-attach-cvm" availability_zone = var.default_az image_id = data.tencentcloud_images.default.images.0.image_id - system_disk_type = "CLOUD_PREMIUM" + system_disk_type = "tcacctest.CLOUD_PREMIUM" instance_type = data.tencentcloud_instance_types.default.instance_types.0.instance_type } resource "tencentcloud_cbs_storage" "foo" { availability_zone = var.default_az storage_size = 100 - storage_type = "CLOUD_PREMIUM" + storage_type = "tcacctest.CLOUD_PREMIUM" storage_name = "test-cbs-attachment" - charge_type = "POSTPAID_BY_HOUR" + charge_type = "tcacctest.POSTPAID_BY_HOUR" } resource "tencentcloud_cbs_storage_attachment" "foo" { diff --git a/tencentcloud/resource_tc_cbs_storage_set.go b/tencentcloud/services/cbs/resource_tc_cbs_storage_set.go similarity index 83% rename from tencentcloud/resource_tc_cbs_storage_set.go rename to tencentcloud/services/cbs/resource_tc_cbs_storage_set.go index 867d7f8714..229d81f610 100644 --- a/tencentcloud/resource_tc_cbs_storage_set.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_storage_set.go @@ -1,4 +1,4 @@ -package tencentcloud +package cbs import ( "context" @@ -7,15 +7,18 @@ import ( "strconv" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cbs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCbsStorageSet() *schema.Resource { +func ResourceTencentCloudCbsStorageSet() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCbsStorageSetCreate, Read: resourceTencentCloudCbsStorageSetRead, @@ -44,7 +47,7 @@ func resourceTencentCloudCbsStorageSet() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CBS_CHARGE_TYPE_POSTPAID, - ValidateFunc: validateAllowedStringValue(CBS_CHARGE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CBS_CHARGE_TYPE), Description: "The charge type of CBS instance. Only support `POSTPAID_BY_HOUR`.", }, "availability_zone": { @@ -56,7 +59,7 @@ func resourceTencentCloudCbsStorageSet() *schema.Resource { "storage_name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(2, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(2, 60), Description: "Name of CBS. The maximum length can not exceed 60 bytes.", }, "snapshot_id": { @@ -107,9 +110,9 @@ func resourceTencentCloudCbsStorageSet() *schema.Resource { } func resourceTencentCloudCbsStorageSetCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_storage_set.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_storage_set.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var diskCount int @@ -143,14 +146,14 @@ func resourceTencentCloudCbsStorageSetCreate(d *schema.ResourceData, meta interf request.DiskChargeType = &chargeType storageIds := make([]*string, 0) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseCbsClient().CreateDisks(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCbsClient().CreateDisks(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) ee, ok := e.(*sdkErrors.TencentCloudSDKError) - if ok && IsContains(CVM_RETRYABLE_ERROR, ee.Code) { + if ok && tccommon.IsContains(CVM_RETRYABLE_ERROR, ee.Code) { time.Sleep(1 * time.Second) // 需要重试的话,等待1s进行重试 return resource.RetryableError(fmt.Errorf("cbs create error: %s, retrying", e.Error())) } @@ -177,15 +180,15 @@ func resourceTencentCloudCbsStorageSetCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudCbsStorageSetRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_storage_set.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_storage_set.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) storageId := d.Id() cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var storageSet []*cbs.Disk @@ -218,30 +221,30 @@ func resourceTencentCloudCbsStorageSetRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudCbsStorageSetUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_storage_set.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_storage_set.update")() return fmt.Errorf("`tencentcloud_cbs_storage_set` do not support change now.") } func resourceTencentCloudCbsStorageSetDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_storage_set.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_storage_set.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) storageId := d.Id() cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := cbsService.DeleteDiskSetByIds(ctx, storageId) if e != nil { log.Printf("[CRITAL][first delete]%s api[%s] fail, reason[%s]\n", logId, "delete", e.Error()) ee, ok := e.(*sdkErrors.TencentCloudSDKError) - if ok && IsContains(CVM_RETRYABLE_ERROR, ee.Code) { + if ok && tccommon.IsContains(CVM_RETRYABLE_ERROR, ee.Code) { time.Sleep(1 * time.Second) // 需要重试的话,等待1s进行重试 return resource.RetryableError(fmt.Errorf("[first delete]cvm delete error: %s, retrying", ee.Error())) } diff --git a/tencentcloud/resource_tc_cbs_storage_set_attachment.go b/tencentcloud/services/cbs/resource_tc_cbs_storage_set_attachment.go similarity index 70% rename from tencentcloud/resource_tc_cbs_storage_set_attachment.go rename to tencentcloud/services/cbs/resource_tc_cbs_storage_set_attachment.go index 376b50296c..dc402ede29 100644 --- a/tencentcloud/resource_tc_cbs_storage_set_attachment.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_storage_set_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package cbs import ( "context" @@ -6,6 +6,8 @@ import ( "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -13,7 +15,7 @@ import ( cbs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312" ) -func resourceTencentCloudCbsStorageSetAttachment() *schema.Resource { +func ResourceTencentCloudCbsStorageSetAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCbsStorageSetAttachmentCreate, Read: resourceTencentCloudCbsStorageSetAttachmentRead, @@ -40,23 +42,23 @@ func resourceTencentCloudCbsStorageSetAttachment() *schema.Resource { } func resourceTencentCloudCbsStorageSetAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_storage_set_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_storage_set_attachment.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) storageId := d.Get("storage_id").(string) instanceId := d.Get("instance_id").(string) cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := cbsService.AttachDisk(ctx, storageId, instanceId) if e != nil { ee, ok := e.(*sdkErrors.TencentCloudSDKError) - if ok && IsContains(CVM_RETRYABLE_ERROR, ee.Code) { + if ok && tccommon.IsContains(CVM_RETRYABLE_ERROR, ee.Code) { time.Sleep(1 * time.Second) // 需要重试的话,等待1s进行重试 return resource.RetryableError(fmt.Errorf("cbs attach error: %s, retrying", ee.Error())) } @@ -75,15 +77,15 @@ func resourceTencentCloudCbsStorageSetAttachmentCreate(d *schema.ResourceData, m } func resourceTencentCloudCbsStorageSetAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_storage_set_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_storage_set_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) storageId := d.Id() cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var storage *cbs.Disk @@ -105,25 +107,25 @@ func resourceTencentCloudCbsStorageSetAttachmentRead(d *schema.ResourceData, met } func resourceTencentCloudCbsStorageSetAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cbs_storage_set_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cbs_storage_set_attachment.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } storageId := d.Id() instanceId := d.Get("instance_id").(string) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := cbsService.DetachDisk(ctx, storageId, instanceId) if errRet != nil { log.Printf("[CRITAL][detach disk]%s api[%s] fail, reason[%s]\n", logId, "detach", errRet.Error()) e, ok := errRet.(*sdkErrors.TencentCloudSDKError) - if ok && IsContains(CVM_RETRYABLE_ERROR, e.Code) { + if ok && tccommon.IsContains(CVM_RETRYABLE_ERROR, e.Code) { time.Sleep(1 * time.Second) // 需要重试的话,等待1s进行重试 return resource.RetryableError(fmt.Errorf("[detach]disk detach error: %s, retrying", e.Error())) } diff --git a/tencentcloud/resource_tc_cbs_storage_test.go b/tencentcloud/services/cbs/resource_tc_cbs_storage_test.go similarity index 78% rename from tencentcloud/resource_tc_cbs_storage_test.go rename to tencentcloud/services/cbs/resource_tc_cbs_storage_test.go index 59fd5ec3f0..b3abd00362 100644 --- a/tencentcloud/resource_tc_cbs_storage_test.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_storage_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cbs_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcbs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs" + "context" "fmt" "testing" @@ -15,12 +19,12 @@ func init() { resource.AddTestSweepers("tencentcloud_cbs_storage", &resource.Sweeper{ Name: "tencentcloud_cbs_storage", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() - service := CbsService{client} + service := localcbs.NewCbsService(client) disks, err := service.DescribeDisksByFilter(ctx, nil) @@ -39,10 +43,10 @@ func init() { if err != nil { created = time.Now() } - if isResourcePersist(name, &created) { + if tcacctest.IsResourcePersist(name, &created) { continue } - if *disk.DiskState == CBS_STORAGE_STATUS_ATTACHED { + if *disk.DiskState == localcbs.CBS_STORAGE_STATUS_ATTACHED { continue } err = service.DeleteDiskById(ctx, id) @@ -61,8 +65,8 @@ func TestAccTencentCloudCbsStorageResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCbsStorageDestroy, Steps: []resource.TestStep{ { @@ -70,7 +74,7 @@ func TestAccTencentCloudCbsStorageResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckStorageExists("tencentcloud_cbs_storage.storage_basic"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_basic", "storage_name", "tf-storage-basic"), - resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_basic", "storage_type", "CLOUD_PREMIUM"), + resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_basic", "storage_type", "tcacctest.CLOUD_PREMIUM"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_basic", "storage_size", "50"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_basic", "availability_zone", "ap-guangzhou-3"), ), @@ -89,8 +93,8 @@ func TestAccTencentCloudCbsStorageResource_full(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCbsStorageDestroy, Steps: []resource.TestStep{ { @@ -98,7 +102,7 @@ func TestAccTencentCloudCbsStorageResource_full(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckStorageExists("tencentcloud_cbs_storage.storage_full"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_full", "storage_name", "tf-storage-full"), - resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_full", "storage_type", "CLOUD_PREMIUM"), + resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_full", "storage_type", "tcacctest.CLOUD_PREMIUM"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_full", "storage_size", "50"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_full", "availability_zone", "ap-guangzhou-3"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_full", "project_id", "0"), @@ -127,8 +131,8 @@ func TestAccTencentCloudCbsStorageResource_full(t *testing.T) { func TestAccTencentCloudCbsStorageResource_prepaid(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCbsStorageDestroy, Steps: []resource.TestStep{ { @@ -137,7 +141,7 @@ func TestAccTencentCloudCbsStorageResource_prepaid(t *testing.T) { testAccCheckStorageExists("tencentcloud_cbs_storage.storage_prepaid"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "storage_name", "tf-storage-prepaid"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "charge_type", "PREPAID"), - resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "prepaid_renew_flag", "NOTIFY_AND_AUTO_RENEW"), + resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "prepaid_renew_flag", "tcacctest.NOTIFY_AND_AUTO_RENEW"), ), }, { @@ -146,7 +150,7 @@ func TestAccTencentCloudCbsStorageResource_prepaid(t *testing.T) { testAccCheckStorageExists("tencentcloud_cbs_storage.storage_prepaid"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "storage_name", "tf-storage-prepaid"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "charge_type", "PREPAID"), - resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "prepaid_renew_flag", "NOTIFY_AND_MANUAL_RENEW"), + resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "prepaid_renew_flag", "tcacctest.NOTIFY_AND_MANUAL_RENEW"), ), }, }, @@ -156,8 +160,8 @@ func TestAccTencentCloudCbsStorageResource_prepaid(t *testing.T) { func TestAccTencentCloudCbsStorageResource_upgrade(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCbsStorageDestroy, Steps: []resource.TestStep{ { @@ -165,7 +169,7 @@ func TestAccTencentCloudCbsStorageResource_upgrade(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckStorageExists("tencentcloud_cbs_storage.storage_upgrade"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_upgrade", "storage_name", "tf-storage-upgrade"), - resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_upgrade", "charge_type", "POSTPAID_BY_HOUR"), + resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_upgrade", "charge_type", "tcacctest.POSTPAID_BY_HOUR"), ), }, { @@ -185,12 +189,10 @@ func TestAccTencentCloudCbsStorageResource_upgrade(t *testing.T) { } func testAccCheckCbsStorageDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cbsService := CbsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cbsService := localcbs.NewCbsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cbs_storage" { continue @@ -209,8 +211,8 @@ func testAccCheckCbsStorageDestroy(s *terraform.State) error { func testAccCheckStorageExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -219,9 +221,7 @@ func testAccCheckStorageExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cbs storage id is not set") } - cbsService := CbsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cbsService := localcbs.NewCbsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) storage, err := cbsService.DescribeDiskById(ctx, rs.Primary.ID) if err != nil { return err @@ -235,7 +235,7 @@ func testAccCheckStorageExists(n string) resource.TestCheckFunc { const testAccCbsStorage_basic = ` resource "tencentcloud_cbs_storage" "storage_basic" { - storage_type = "CLOUD_PREMIUM" + storage_type = "tcacctest.CLOUD_PREMIUM" storage_name = "tf-storage-basic" storage_size = 50 availability_zone = "ap-guangzhou-3" @@ -244,7 +244,7 @@ resource "tencentcloud_cbs_storage" "storage_basic" { const testAccCbsStorage_full = ` resource "tencentcloud_cbs_storage" "storage_full" { - storage_type = "CLOUD_PREMIUM" + storage_type = "tcacctest.CLOUD_PREMIUM" storage_name = "tf-storage-full" storage_size = 50 availability_zone = "ap-guangzhou-3" @@ -257,7 +257,7 @@ resource "tencentcloud_cbs_storage" "storage_full" { ` const testAccCbsStorage_update = ` resource "tencentcloud_cbs_storage" "storage_full" { - storage_type = "CLOUD_PREMIUM" + storage_type = "tcacctest.CLOUD_PREMIUM" storage_name = "tf-storage-update" storage_size = 60 availability_zone = "ap-guangzhou-3" @@ -272,12 +272,12 @@ resource "tencentcloud_cbs_storage" "storage_full" { const testAccCbsStorage_prepaid = ` resource "tencentcloud_cbs_storage" "storage_prepaid" { - storage_type = "CLOUD_PREMIUM" + storage_type = "tcacctest.CLOUD_PREMIUM" storage_name = "tf-storage-prepaid" storage_size = 50 availability_zone = "ap-guangzhou-3" charge_type = "PREPAID" - prepaid_renew_flag = "NOTIFY_AND_AUTO_RENEW" + prepaid_renew_flag = "tcacctest.NOTIFY_AND_AUTO_RENEW" prepaid_period = 1 project_id = 0 encrypt = false @@ -289,11 +289,11 @@ resource "tencentcloud_cbs_storage" "storage_prepaid" { ` const testAccCbsStorage_prepaidupdate = ` resource "tencentcloud_cbs_storage" "storage_prepaid" { - storage_type = "CLOUD_PREMIUM" + storage_type = "tcacctest.CLOUD_PREMIUM" storage_name = "tf-storage-prepaid" storage_size = 50 charge_type = "PREPAID" - prepaid_renew_flag = "NOTIFY_AND_MANUAL_RENEW" + prepaid_renew_flag = "tcacctest.NOTIFY_AND_MANUAL_RENEW" prepaid_period = 1 availability_zone = "ap-guangzhou-3" project_id = 0 @@ -307,22 +307,22 @@ resource "tencentcloud_cbs_storage" "storage_prepaid" { const testAccCbsStorage_upgrade = ` resource "tencentcloud_cbs_storage" "storage_upgrade" { - storage_type = "CLOUD_PREMIUM" + storage_type = "tcacctest.CLOUD_PREMIUM" storage_name = "tf-storage-upgrade" storage_size = 50 availability_zone = "ap-guangzhou-3" - charge_type = "POSTPAID_BY_HOUR" + charge_type = "tcacctest.POSTPAID_BY_HOUR" } ` const testAccCbsStorage_upgradeupdate = ` resource "tencentcloud_cbs_storage" "storage_upgrade" { - storage_type = "CLOUD_PREMIUM" + storage_type = "tcacctest.CLOUD_PREMIUM" storage_name = "tf-storage-upgrade" storage_size = 50 availability_zone = "ap-guangzhou-3" charge_type = "PREPAID" - prepaid_renew_flag = "NOTIFY_AND_MANUAL_RENEW" + prepaid_renew_flag = "tcacctest.NOTIFY_AND_MANUAL_RENEW" prepaid_period = 1 force_delete = true } diff --git a/tencentcloud/resource_tc_cbs_storage_testing_test.go b/tencentcloud/services/cbs/resource_tc_cbs_storage_testing_test.go similarity index 91% rename from tencentcloud/resource_tc_cbs_storage_testing_test.go rename to tencentcloud/services/cbs/resource_tc_cbs_storage_testing_test.go index 015d35e976..69d415ffe5 100644 --- a/tencentcloud/resource_tc_cbs_storage_testing_test.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_storage_testing_test.go @@ -1,17 +1,19 @@ -package tencentcloud +package cbs_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudTestingCbsStorageResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCbsStorageDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/services/cbs/service_tencentcloud_cbs.go b/tencentcloud/services/cbs/service_tencentcloud_cbs.go new file mode 100644 index 0000000000..7584545e1e --- /dev/null +++ b/tencentcloud/services/cbs/service_tencentcloud_cbs.go @@ -0,0 +1,867 @@ +package cbs + +import ( + "context" + "log" + "sync" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + cbs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +func NewCbsService(client *connectivity.TencentCloudClient) CbsService { + return CbsService{client: client} +} + +type CbsService struct { + client *connectivity.TencentCloudClient +} + +func (me *CbsService) DescribeDiskSetByIds(ctx context.Context, diskSetIds string) (disks []*cbs.Disk, errRet error) { + + diskSet, err := helper.StrToStrList(diskSetIds) + if err != nil { + return + } + + disks, err = me.DescribeDiskList(ctx, helper.StringsStringsPoint(diskSet)) + if err != nil { + errRet = err + return + } + + if len(disks) < 1 { + return + } + + return +} + +func (me *CbsService) DescribeDiskById(ctx context.Context, diskId string) (disk *cbs.Disk, errRet error) { + disks, err := me.DescribeDiskList(ctx, []*string{&diskId}) + if err != nil { + errRet = err + return + } + if len(disks) > 0 { + disk = disks[0] + } + return +} + +func (me *CbsService) DescribeDiskList(ctx context.Context, diskIds []*string) (disk []*cbs.Disk, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cbs.NewDescribeDisksRequest() + request.DiskIds = diskIds + request.Limit = helper.IntUint64(100) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().DescribeDisks(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.DiskSet) > 0 { + disk = response.Response.DiskSet + } + return +} + +func (me *CbsService) DescribeDisksByFilter(ctx context.Context, params map[string]interface{}) (disks []*cbs.Disk, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cbs.NewDescribeDisksRequest() + request.Filters = make([]*cbs.Filter, 0, len(params)) + for k, v := range params { + filter := &cbs.Filter{ + Name: helper.String(k), + } + switch v := v.(type) { + case string: + filter.Values = []*string{helper.String(v)} + case []*string: + filter.Values = v + } + request.Filters = append(request.Filters, filter) + } + + offset := 0 + pageSize := 100 + disks = make([]*cbs.Disk, 0) + for { + request.Offset = helper.IntUint64(offset) + request.Limit = helper.IntUint64(pageSize) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().DescribeDisks(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.DiskSet) < 1 { + break + } + + disks = append(disks, response.Response.DiskSet...) + + if len(response.Response.DiskSet) < pageSize { + break + } + offset += pageSize + } + return +} + +func (me *CbsService) DescribeDisksInParallelByFilter(ctx context.Context, params map[string]interface{}) (disks []*cbs.Disk, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cbs.NewDescribeDisksRequest() + + request.Filters = make([]*cbs.Filter, 0, len(params)) + for k, v := range params { + filter := &cbs.Filter{ + Name: helper.String(k), + } + switch v := v.(type) { + case string: + filter.Values = []*string{helper.String(v)} + case []*string: + filter.Values = v + } + request.Filters = append(request.Filters, filter) + } + response, err := me.client.UseCbsClient().DescribeDisks(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + + if response == nil || len(response.Response.DiskSet) < 1 { + return + } + + total := response.Response.TotalCount + + var limit = 100 + num := int(*total) / limit + g := tccommon.NewGoRoutine(num + 1) + wg := sync.WaitGroup{} + + var diskSetList = make([]interface{}, num+1) + + for i := 0; i <= num; i++ { + wg.Add(1) + value := i + goFunc := func() { + offset := value * limit + request := cbs.NewDescribeDisksRequest() + request.Filters = make([]*cbs.Filter, 0, len(params)) + for k, v := range params { + filter := &cbs.Filter{ + Name: helper.String(k), + } + switch v := v.(type) { + case string: + filter.Values = []*string{helper.String(v)} + case []*string: + filter.Values = v + } + request.Filters = append(request.Filters, filter) + } + + request.Offset = helper.IntUint64(offset) + request.Limit = helper.IntUint64(limit) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().DescribeDisks(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + diskSetList[value] = response.Response.DiskSet + + wg.Done() + } + g.Run(goFunc) + } + wg.Wait() + + for _, v := range diskSetList { + disks = append(disks, v.([]*cbs.Disk)...) + } + + return +} + +func (me *CbsService) ModifyDiskAttributes(ctx context.Context, diskId, diskName string, projectId int) error { + logId := tccommon.GetLogId(ctx) + request := cbs.NewModifyDiskAttributesRequest() + request.DiskIds = []*string{&diskId} + if diskName != "" { + request.DiskName = &diskName + } + if projectId >= 0 { + request.ProjectId = helper.IntUint64(projectId) + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().ModifyDiskAttributes(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CbsService) DeleteDiskSetByIds(ctx context.Context, diskSetIds string) error { + logId := tccommon.GetLogId(ctx) + request := cbs.NewTerminateDisksRequest() + + diskSet, err := helper.StrToStrList(diskSetIds) + if err != nil { + return err + } + + request.DiskIds = helper.StringsStringsPoint(diskSet) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().TerminateDisks(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CbsService) DeleteDiskById(ctx context.Context, diskId string) error { + logId := tccommon.GetLogId(ctx) + request := cbs.NewTerminateDisksRequest() + request.DiskIds = []*string{&diskId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().TerminateDisks(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CbsService) ResizeDisk(ctx context.Context, diskId string, diskSize int) error { + logId := tccommon.GetLogId(ctx) + request := cbs.NewResizeDiskRequest() + request.DiskId = &diskId + request.DiskSize = helper.IntUint64(diskSize) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().ResizeDisk(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CbsService) ModifyThroughputPerformance(ctx context.Context, diskId string, throughputPerformance int) error { + logId := tccommon.GetLogId(ctx) + request := cbs.NewModifyDiskExtraPerformanceRequest() + request.DiskId = &diskId + request.ThroughputPerformance = helper.IntUint64(throughputPerformance) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().ModifyDiskExtraPerformance(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CbsService) ApplySnapshot(ctx context.Context, diskId, snapshotId string) error { + logId := tccommon.GetLogId(ctx) + request := cbs.NewApplySnapshotRequest() + request.DiskId = &diskId + request.SnapshotId = &snapshotId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().ApplySnapshot(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CbsService) AttachDisk(ctx context.Context, diskId, instanceId string) error { + logId := tccommon.GetLogId(ctx) + request := cbs.NewAttachDisksRequest() + request.DiskIds = []*string{&diskId} + request.InstanceId = &instanceId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().AttachDisks(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CbsService) DetachDisk(ctx context.Context, diskId, instanceId string) error { + logId := tccommon.GetLogId(ctx) + request := cbs.NewDetachDisksRequest() + request.DiskIds = []*string{&diskId} + request.InstanceId = &instanceId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().DetachDisks(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CbsService) CreateSnapshot(ctx context.Context, diskId, snapshotName string, tags map[string]string) (snapshotId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cbs.NewCreateSnapshotRequest() + request.DiskId = &diskId + request.SnapshotName = &snapshotName + if len(tags) > 0 { + for tagKey, tagValue := range tags { + tag := cbs.Tag{ + Key: helper.String(tagKey), + Value: helper.String(tagValue), + } + request.Tags = append(request.Tags, &tag) + } + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().CreateSnapshot(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + snapshotId = *response.Response.SnapshotId + return +} + +func (me *CbsService) DescribeSnapshotById(ctx context.Context, snapshotId string) (snapshot *cbs.Snapshot, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cbs.NewDescribeSnapshotsRequest() + request.SnapshotIds = []*string{&snapshotId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().DescribeSnapshots(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.SnapshotSet) > 0 { + snapshot = response.Response.SnapshotSet[0] + } + return +} + +func (me *CbsService) DescribeSnapshotByIds(ctx context.Context, snapshotIdsParam []*string) (snapshots []*cbs.Snapshot, errRet error) { + if len(snapshotIdsParam) == 0 { + return + } + + var ( + logId = tccommon.GetLogId(ctx) + request = cbs.NewDescribeSnapshotsRequest() + err error + response *cbs.DescribeSnapshotsResponse + offset, pageSize uint64 = 0, 100 + ) + request.SnapshotIds = snapshotIdsParam + + for { + request.Offset = &offset + request.Limit = &pageSize + + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err = me.client.UseCbsClient().DescribeSnapshots(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + + snapshots = append(snapshots, response.Response.SnapshotSet...) + if len(response.Response.SnapshotSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *CbsService) DescribeSnapshotsByFilter(ctx context.Context, params map[string]string) (snapshots []*cbs.Snapshot, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cbs.NewDescribeSnapshotsRequest() + request.Filters = make([]*cbs.Filter, 0, len(params)) + for k, v := range params { + filter := &cbs.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, filter) + } + + offset := 0 + pageSize := 100 + for { + request.Offset = helper.IntUint64(offset) + request.Limit = helper.IntUint64(pageSize) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().DescribeSnapshots(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.SnapshotSet) < 1 { + break + } + + snapshots = append(snapshots, response.Response.SnapshotSet...) + + if len(response.Response.SnapshotSet) < pageSize { + break + } + offset += pageSize + } + return +} + +func (me *CbsService) ModifySnapshotName(ctx context.Context, snapshotId, snapshotName string) error { + logId := tccommon.GetLogId(ctx) + request := cbs.NewModifySnapshotAttributeRequest() + request.SnapshotId = &snapshotId + request.SnapshotName = &snapshotName + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().ModifySnapshotAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CbsService) DeleteSnapshot(ctx context.Context, snapshotId string) error { + logId := tccommon.GetLogId(ctx) + request := cbs.NewDeleteSnapshotsRequest() + request.SnapshotIds = []*string{&snapshotId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().DeleteSnapshots(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CbsService) DescribeSnapshotPolicyById(ctx context.Context, policyId string) (policy *cbs.AutoSnapshotPolicy, errRet error) { + logId := tccommon.GetLogId(tccommon.ContextNil) + request := cbs.NewDescribeAutoSnapshotPoliciesRequest() + request.AutoSnapshotPolicyIds = []*string{&policyId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().DescribeAutoSnapshotPolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.AutoSnapshotPolicySet) > 0 { + policy = response.Response.AutoSnapshotPolicySet[0] + } + return +} + +func (me *CbsService) DescribeSnapshotPolicy(ctx context.Context, policyId, policyName string) (policies []*cbs.AutoSnapshotPolicy, errRet error) { + logId := tccommon.GetLogId(tccommon.ContextNil) + request := cbs.NewDescribeAutoSnapshotPoliciesRequest() + request.Filters = make([]*cbs.Filter, 0) + if policyId != "" { + filter := cbs.Filter{ + Name: helper.String("auto-snapshot-policy-id"), + Values: []*string{&policyId}, + } + request.Filters = append(request.Filters, &filter) + } + if policyName != "" { + filter := cbs.Filter{ + Name: helper.String("auto-snapshot-policy-name"), + Values: []*string{&policyName}, + } + request.Filters = append(request.Filters, &filter) + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().DescribeAutoSnapshotPolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + policies = response.Response.AutoSnapshotPolicySet + return +} + +func (me *CbsService) DeleteSnapshotPolicy(ctx context.Context, policyId string) error { + logId := tccommon.GetLogId(ctx) + request := cbs.NewDeleteAutoSnapshotPoliciesRequest() + request.AutoSnapshotPolicyIds = []*string{&policyId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().DeleteAutoSnapshotPolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CbsService) AttachSnapshotPolicy(ctx context.Context, diskId, policyId string) error { + logId := tccommon.GetLogId(ctx) + request := cbs.NewBindAutoSnapshotPolicyRequest() + request.AutoSnapshotPolicyId = &policyId + request.DiskIds = []*string{&diskId} + ratelimit.Check(request.GetAction()) + _, err := me.client.UseCbsClient().BindAutoSnapshotPolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *CbsService) DescribeAttachedSnapshotPolicy(ctx context.Context, diskId, policyId string) (policy *cbs.AutoSnapshotPolicy, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cbs.NewDescribeDiskAssociatedAutoSnapshotPolicyRequest() + request.DiskId = &diskId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCbsClient().DescribeDiskAssociatedAutoSnapshotPolicy(request) + if err != nil { + errRet = err + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } + for i, item := range response.Response.AutoSnapshotPolicySet { + if *item.AutoSnapshotPolicyId == policyId { + policy = response.Response.AutoSnapshotPolicySet[i] + break + } + } + return +} + +func (me *CbsService) UnattachSnapshotPolicy(ctx context.Context, diskId, policyId string) error { + logId := tccommon.GetLogId(ctx) + request := cbs.NewUnbindAutoSnapshotPolicyRequest() + request.AutoSnapshotPolicyId = &policyId + request.DiskIds = []*string{&diskId} + ratelimit.Check(request.GetAction()) + _, err := me.client.UseCbsClient().UnbindAutoSnapshotPolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *CbsService) ModifyDiskChargeType(ctx context.Context, storageId string, chargeType string, renewFlag string, period int) error { + logId := tccommon.GetLogId(ctx) + request := cbs.NewModifyDisksChargeTypeRequest() + request.DiskIds = []*string{&storageId} + request.DiskChargePrepaid = &cbs.DiskChargePrepaid{Period: helper.IntUint64(period), RenewFlag: &renewFlag} + ratelimit.Check(request.GetAction()) + _, err := me.client.UseCbsClient().ModifyDisksChargeType(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *CbsService) ModifyDisksRenewFlag(ctx context.Context, storageId string, renewFlag string) error { + logId := tccommon.GetLogId(ctx) + request := cbs.NewModifyDisksRenewFlagRequest() + request.DiskIds = []*string{&storageId} + request.RenewFlag = &renewFlag + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseCbsClient().ModifyDisksRenewFlag(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *CbsService) DescribeCbsDiskBackupById(ctx context.Context, diskBackupId string) (DiskBackup *cbs.DiskBackup, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cbs.NewDescribeDiskBackupsRequest() + request.DiskBackupIds = []*string{&diskBackupId} + + 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.UseCbsClient().DescribeDiskBackups(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()) + + if len(response.Response.DiskBackupSet) < 1 { + return + } + + DiskBackup = response.Response.DiskBackupSet[0] + return +} + +func (me *CbsService) DeleteCbsDiskBackupById(ctx context.Context, diskBackupId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cbs.NewDeleteDiskBackupsRequest() + request.DiskBackupIds = []*string{&diskBackupId} + + 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.UseCbsClient().DeleteDiskBackups(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 +} + +func (me *CbsService) ModifyDiskBackupQuota(ctx context.Context, diskId string, diskBackupQuota int) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := cbs.NewModifyDiskBackupQuotaRequest() + 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()) + } + }() + + request.DiskId = helper.String(diskId) + request.DiskBackupQuota = helper.IntUint64(diskBackupQuota) + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCbsClient().ModifyDiskBackupQuota(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 +} + +func (me *CbsService) CreateDiskBackup(ctx context.Context, diskId, diskBackupName string) (diskBackupId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cbs.NewCreateDiskBackupRequest() + 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()) + } + }() + request.DiskId = helper.String(diskId) + request.DiskBackupName = helper.String(diskBackupName) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, e := me.client.UseCbsClient().CreateDiskBackup(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()) + } + diskBackupId = *result.Response.DiskBackupId + return nil + }) + if err != nil { + errRet = err + log.Printf("[CRITAL]%s create cbs DiskBackup failed, reason:%+v", logId, err) + return + } + return +} + +func (me *CbsService) DescribeCbsSnapshotSharePermissionById(ctx context.Context, snapshotId string) (snapshotSharePermissions []*cbs.SharePermission, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cbs.NewDescribeSnapshotSharePermissionRequest() + request.SnapshotId = &snapshotId + + 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.UseCbsClient().DescribeSnapshotSharePermission(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()) + + snapshotSharePermissions = response.Response.SharePermissionSet + return +} + +func (me *CbsService) ModifySnapshotsSharePermission(ctx context.Context, snapshotId, permission string, accountIds []string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := cbs.NewModifySnapshotsSharePermissionRequest() + + 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()) + } + }() + request.SnapshotIds = []*string{&snapshotId} + request.Permission = helper.String(permission) + request.AccountIds = helper.StringsStringsPoint(accountIds) + ratelimit.Check(request.GetAction()) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseCbsClient().ModifySnapshotsSharePermission(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 create cbs SnapshotSharePermission failed, reason:%+v", logId, err) + return err + } + return +} + +func (me *CbsService) ApplyDiskBackup(ctx context.Context, diskBackupId, diskId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := cbs.NewApplyDiskBackupRequest() + + 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()) + } + }() + request.DiskBackupId = helper.String(diskBackupId) + request.DiskId = helper.String(diskId) + ratelimit.Check(request.GetAction()) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseCbsClient().ApplyDiskBackup(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 ApplyDiskBackup failed, reason:%+v", logId, err) + return err + } + return +} diff --git a/tencentcloud/services/cbs/service_tencentcloud_tag.go b/tencentcloud/services/cbs/service_tencentcloud_tag.go new file mode 100644 index 0000000000..bc4b9d6f47 --- /dev/null +++ b/tencentcloud/services/cbs/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package cbs + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 7dfe2ca5631f4ed5e8133896669f03dfdb8da7b4 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Tue, 19 Dec 2023 17:23:19 +0800 Subject: [PATCH 04/31] refactor: migrate package tencentcloud/services/ccn --- tencentcloud/provider.go | 27 +- .../data_source_tc_ccn_bandwidth_limits.go | 16 +- ...ata_source_tc_ccn_bandwidth_limits_test.go | 18 +- ...a_source_tc_ccn_cross_border_compliance.go | 23 +- ...rce_tc_ccn_cross_border_compliance_test.go | 10 +- ...source_tc_ccn_cross_border_flow_monitor.go | 23 +- ...e_tc_ccn_cross_border_flow_monitor_test.go | 10 +- ...cn_cross_border_region_bandwidth_limits.go | 23 +- ...oss_border_region_bandwidth_limits_test.go | 10 +- .../ccn}/data_source_tc_ccn_instances.go | 16 +- .../ccn}/data_source_tc_ccn_instances_test.go | 12 +- .../data_source_tc_ccn_tenant_instances.go | 23 +- ...ata_source_tc_ccn_tenant_instances_test.go | 10 +- tencentcloud/services/ccn/extension_cnn.go | 16 + .../services/ccn/extension_security_group.go | 3 + tencentcloud/services/ccn/extension_tags.go | 3 + tencentcloud/services/ccn/extension_vpc.go | 327 + .../{ => services/ccn}/resource_tc_ccn.go | 75 +- .../ccn}/resource_tc_ccn_attachment.go | 69 +- .../ccn}/resource_tc_ccn_attachment_test.go | 22 +- .../ccn}/resource_tc_ccn_bandwidth_limit.go | 48 +- .../resource_tc_ccn_bandwidth_limit_test.go | 24 +- ...resource_tc_ccn_instances_accept_attach.go | 27 +- ...resource_tc_ccn_instances_reject_attach.go | 27 +- .../resource_tc_ccn_instances_reset_attach.go | 27 +- .../ccn}/resource_tc_ccn_routes.go | 48 +- .../ccn}/resource_tc_ccn_routes_test.go | 8 +- .../ccn}/resource_tc_ccn_test.go | 49 +- .../services/ccn/service_tencentcloud_ccn.go | 700 ++ .../services/ccn/service_tencentcloud_tag.go | 415 + .../services/ccn/service_tencentcloud_vpc.go | 8075 +++++++++++++++++ 31 files changed, 9892 insertions(+), 292 deletions(-) rename tencentcloud/{ => services/ccn}/data_source_tc_ccn_bandwidth_limits.go (80%) rename tencentcloud/{ => services/ccn}/data_source_tc_ccn_bandwidth_limits_test.go (85%) rename tencentcloud/{ => services/ccn}/data_source_tc_ccn_cross_border_compliance.go (88%) rename tencentcloud/{ => services/ccn}/data_source_tc_ccn_cross_border_compliance_test.go (66%) rename tencentcloud/{ => services/ccn}/data_source_tc_ccn_cross_border_flow_monitor.go (87%) rename tencentcloud/{ => services/ccn}/data_source_tc_ccn_cross_border_flow_monitor_test.go (67%) rename tencentcloud/{ => services/ccn}/data_source_tc_ccn_cross_border_region_bandwidth_limits.go (91%) rename tencentcloud/{ => services/ccn}/data_source_tc_ccn_cross_border_region_bandwidth_limits_test.go (66%) rename tencentcloud/{ => services/ccn}/data_source_tc_ccn_instances.go (92%) rename tencentcloud/{ => services/ccn}/data_source_tc_ccn_instances_test.go (88%) rename tencentcloud/{ => services/ccn}/data_source_tc_ccn_tenant_instances.go (77%) rename tencentcloud/{ => services/ccn}/data_source_tc_ccn_tenant_instances_test.go (62%) create mode 100644 tencentcloud/services/ccn/extension_cnn.go create mode 100644 tencentcloud/services/ccn/extension_security_group.go create mode 100644 tencentcloud/services/ccn/extension_tags.go create mode 100644 tencentcloud/services/ccn/extension_vpc.go rename tencentcloud/{ => services/ccn}/resource_tc_ccn.go (71%) rename tencentcloud/{ => services/ccn}/resource_tc_ccn_attachment.go (78%) rename tencentcloud/{ => services/ccn}/resource_tc_ccn_attachment_test.go (83%) rename tencentcloud/{ => services/ccn}/resource_tc_ccn_bandwidth_limit.go (71%) rename tencentcloud/{ => services/ccn}/resource_tc_ccn_bandwidth_limit_test.go (85%) rename tencentcloud/{ => services/ccn}/resource_tc_ccn_instances_accept_attach.go (81%) rename tencentcloud/{ => services/ccn}/resource_tc_ccn_instances_reject_attach.go (81%) rename tencentcloud/{ => services/ccn}/resource_tc_ccn_instances_reset_attach.go (81%) rename tencentcloud/{ => services/ccn}/resource_tc_ccn_routes.go (69%) rename tencentcloud/{ => services/ccn}/resource_tc_ccn_routes_test.go (86%) rename tencentcloud/{ => services/ccn}/resource_tc_ccn_test.go (77%) create mode 100644 tencentcloud/services/ccn/service_tencentcloud_ccn.go create mode 100644 tencentcloud/services/ccn/service_tencentcloud_tag.go create mode 100644 tencentcloud/services/ccn/service_tencentcloud_vpc.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 15a5078a67..9998ce37cd 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ccn" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cat" "encoding/json" @@ -233,12 +234,12 @@ func Provider() *schema.Provider { "tencentcloud_vpn_default_health_check_ip": dataSourceTencentCloudVpnDefaultHealthCheckIp(), "tencentcloud_ha_vips": dataSourceTencentCloudHaVips(), "tencentcloud_ha_vip_eip_attachments": dataSourceTencentCloudHaVipEipAttachments(), - "tencentcloud_ccn_instances": dataSourceTencentCloudCcnInstances(), - "tencentcloud_ccn_bandwidth_limits": dataSourceTencentCloudCcnBandwidthLimits(), - "tencentcloud_ccn_cross_border_compliance": dataSourceTencentCloudCcnCrossBorderCompliance(), - "tencentcloud_ccn_tenant_instances": dataSourceTencentCloudCcnTenantInstance(), - "tencentcloud_ccn_cross_border_flow_monitor": dataSourceTencentCloudCcnCrossBorderFlowMonitor(), - "tencentcloud_ccn_cross_border_region_bandwidth_limits": dataSourceTencentCloudCcnCrossBorderRegionBandwidthLimits(), + "tencentcloud_ccn_instances": ccn.DataSourceTencentCloudCcnInstances(), + "tencentcloud_ccn_bandwidth_limits": ccn.DataSourceTencentCloudCcnBandwidthLimits(), + "tencentcloud_ccn_cross_border_compliance": ccn.DataSourceTencentCloudCcnCrossBorderCompliance(), + "tencentcloud_ccn_tenant_instances": ccn.DataSourceTencentCloudCcnTenantInstance(), + "tencentcloud_ccn_cross_border_flow_monitor": ccn.DataSourceTencentCloudCcnCrossBorderFlowMonitor(), + "tencentcloud_ccn_cross_border_region_bandwidth_limits": ccn.DataSourceTencentCloudCcnCrossBorderRegionBandwidthLimits(), "tencentcloud_dc_instances": dataSourceTencentCloudDcInstances(), "tencentcloud_dc_access_points": dataSourceTencentCloudDcAccessPoints(), "tencentcloud_dc_internet_address_quota": dataSourceTencentCloudDcInternetAddressQuota(), @@ -962,13 +963,13 @@ func Provider() *schema.Provider { "tencentcloud_eni": resourceTencentCloudEni(), "tencentcloud_eni_attachment": resourceTencentCloudEniAttachment(), "tencentcloud_eni_sg_attachment": resourceTencentCloudEniSgAttachment(), - "tencentcloud_ccn": resourceTencentCloudCcn(), - "tencentcloud_ccn_attachment": resourceTencentCloudCcnAttachment(), - "tencentcloud_ccn_bandwidth_limit": resourceTencentCloudCcnBandwidthLimit(), - "tencentcloud_ccn_routes": resourceTencentCloudCcnRoutes(), - "tencentcloud_ccn_instances_accept_attach": resourceTencentCloudCcnInstancesAcceptAttach(), - "tencentcloud_ccn_instances_reject_attach": resourceTencentCloudCcnInstancesRejectAttach(), - "tencentcloud_ccn_instances_reset_attach": resourceTencentCloudCcnInstancesResetAttach(), + "tencentcloud_ccn": ccn.ResourceTencentCloudCcn(), + "tencentcloud_ccn_attachment": ccn.ResourceTencentCloudCcnAttachment(), + "tencentcloud_ccn_bandwidth_limit": ccn.ResourceTencentCloudCcnBandwidthLimit(), + "tencentcloud_ccn_routes": ccn.ResourceTencentCloudCcnRoutes(), + "tencentcloud_ccn_instances_accept_attach": ccn.ResourceTencentCloudCcnInstancesAcceptAttach(), + "tencentcloud_ccn_instances_reject_attach": ccn.ResourceTencentCloudCcnInstancesRejectAttach(), + "tencentcloud_ccn_instances_reset_attach": ccn.ResourceTencentCloudCcnInstancesResetAttach(), "tencentcloud_dc_instance": resourceTencentCloudDcInstance(), "tencentcloud_dcx": resourceTencentCloudDcxInstance(), "tencentcloud_dcx_extra_config": resourceTencentCloudDcxExtraConfig(), diff --git a/tencentcloud/data_source_tc_ccn_bandwidth_limits.go b/tencentcloud/services/ccn/data_source_tc_ccn_bandwidth_limits.go similarity index 80% rename from tencentcloud/data_source_tc_ccn_bandwidth_limits.go rename to tencentcloud/services/ccn/data_source_tc_ccn_bandwidth_limits.go index 90b75db3fe..4a89404be2 100644 --- a/tencentcloud/data_source_tc_ccn_bandwidth_limits.go +++ b/tencentcloud/services/ccn/data_source_tc_ccn_bandwidth_limits.go @@ -1,13 +1,15 @@ -package tencentcloud +package ccn import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func dataSourceTencentCloudCcnBandwidthLimits() *schema.Resource { +func DataSourceTencentCloudCcnBandwidthLimits() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCcnBandwidthLimitsRead, @@ -52,12 +54,12 @@ func dataSourceTencentCloudCcnBandwidthLimits() *schema.Resource { } func dataSourceTencentCloudCcnBandwidthLimitsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ccn_bandwidth_limit.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_ccn_bandwidth_limit.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( ccnId = d.Get("ccn_id").(string) @@ -85,7 +87,7 @@ func dataSourceTencentCloudCcnBandwidthLimitsRead(d *schema.ResourceData, meta i d.SetId(ccnId) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), infoList); err != nil { + if err := tccommon.WriteToFile(output.(string), infoList); err != nil { log.Printf("[CRITAL]%s output file[%s] fail, reason[%s]\n", logId, output.(string), err.Error()) return err diff --git a/tencentcloud/data_source_tc_ccn_bandwidth_limits_test.go b/tencentcloud/services/ccn/data_source_tc_ccn_bandwidth_limits_test.go similarity index 85% rename from tencentcloud/data_source_tc_ccn_bandwidth_limits_test.go rename to tencentcloud/services/ccn/data_source_tc_ccn_bandwidth_limits_test.go index 869d6d789b..33dbf82445 100644 --- a/tencentcloud/data_source_tc_ccn_bandwidth_limits_test.go +++ b/tencentcloud/services/ccn/data_source_tc_ccn_bandwidth_limits_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ccn_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,14 +12,14 @@ func TestAccDataSourceTencentCloudCcnV3BandwidthLimitsOuter(t *testing.T) { t.Parallel() keyName := "data.tencentcloud_ccn_bandwidth_limits.limit" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: TestAccDataSourceTencentCloudCcnOuterBandwidthLimits, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(keyName), + tcacctest.AccCheckTencentCloudDataSourceID(keyName), resource.TestCheckResourceAttrSet(keyName, "ccn_id"), resource.TestCheckResourceAttr(keyName, "limits.#", "1"), resource.TestCheckResourceAttr(keyName, "limits.0.region", "ap-shanghai"), @@ -32,14 +34,14 @@ func TestAccDataSourceTencentCloudCcnV3BandwidthLimitsInter(t *testing.T) { t.Parallel() keyName := "data.tencentcloud_ccn_bandwidth_limits.limit" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: TestAccDataSourceTencentCloudCcnInterBandwidthLimits, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(keyName), + tcacctest.AccCheckTencentCloudDataSourceID(keyName), resource.TestCheckResourceAttrSet(keyName, "ccn_id"), resource.TestCheckResourceAttr(keyName, "limits.#", "1"), resource.TestCheckResourceAttr(keyName, "limits.0.region", "ap-shanghai"), @@ -86,7 +88,7 @@ resource tencentcloud_ccn main { name = "ci-temp-test-ccn" description = "ci-temp-test-ccn-des" qos = "AG" - bandwidth_limit_type = "INTER_REGION_LIMIT" + bandwidth_limit_type = "tcacctest.INTER_REGION_LIMIT" } resource tencentcloud_ccn_bandwidth_limit limit1 { diff --git a/tencentcloud/data_source_tc_ccn_cross_border_compliance.go b/tencentcloud/services/ccn/data_source_tc_ccn_cross_border_compliance.go similarity index 88% rename from tencentcloud/data_source_tc_ccn_cross_border_compliance.go rename to tencentcloud/services/ccn/data_source_tc_ccn_cross_border_compliance.go index 6b3bc1e9cd..cbe4f68c22 100644 --- a/tencentcloud/data_source_tc_ccn_cross_border_compliance.go +++ b/tencentcloud/services/ccn/data_source_tc_ccn_cross_border_compliance.go @@ -1,15 +1,18 @@ -package tencentcloud +package ccn import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCcnCrossBorderCompliance() *schema.Resource { +func DataSourceTencentCloudCcnCrossBorderCompliance() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCcnCrossBorderComplianceRead, Schema: map[string]*schema.Schema{ @@ -119,12 +122,12 @@ func dataSourceTencentCloudCcnCrossBorderCompliance() *schema.Resource { } func dataSourceTencentCloudCcnCrossBorderComplianceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ccn_cross_border_compliance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ccn_cross_border_compliance.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("service_provider"); ok { @@ -191,14 +194,14 @@ func dataSourceTencentCloudCcnCrossBorderComplianceRead(d *schema.ResourceData, paramMap["state"] = helper.String(v.(string)) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var crossBorderComplianceSet []*vpc.CrossBorderCompliance - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCcnCrossBorderComplianceByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } crossBorderComplianceSet = result return nil @@ -213,7 +216,7 @@ func dataSourceTencentCloudCcnCrossBorderComplianceRead(d *schema.ResourceData, d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ccn_cross_border_compliance_test.go b/tencentcloud/services/ccn/data_source_tc_ccn_cross_border_compliance_test.go similarity index 66% rename from tencentcloud/data_source_tc_ccn_cross_border_compliance_test.go rename to tencentcloud/services/ccn/data_source_tc_ccn_cross_border_compliance_test.go index 4d95300140..31509dff53 100644 --- a/tencentcloud/data_source_tc_ccn_cross_border_compliance_test.go +++ b/tencentcloud/services/ccn/data_source_tc_ccn_cross_border_compliance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ccn_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCcnCrossBorderComplianceDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCcnCrossBorderComplianceDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ccn_cross_border_compliance.cross_border_compliance")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ccn_cross_border_compliance.cross_border_compliance")), }, }, }) diff --git a/tencentcloud/data_source_tc_ccn_cross_border_flow_monitor.go b/tencentcloud/services/ccn/data_source_tc_ccn_cross_border_flow_monitor.go similarity index 87% rename from tencentcloud/data_source_tc_ccn_cross_border_flow_monitor.go rename to tencentcloud/services/ccn/data_source_tc_ccn_cross_border_flow_monitor.go index c5a023f7ac..209fc45549 100644 --- a/tencentcloud/data_source_tc_ccn_cross_border_flow_monitor.go +++ b/tencentcloud/services/ccn/data_source_tc_ccn_cross_border_flow_monitor.go @@ -1,15 +1,18 @@ -package tencentcloud +package ccn import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCcnCrossBorderFlowMonitor() *schema.Resource { +func DataSourceTencentCloudCcnCrossBorderFlowMonitor() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudVpcCrossBorderFlowMonitorRead, Schema: map[string]*schema.Schema{ @@ -107,12 +110,12 @@ func dataSourceTencentCloudCcnCrossBorderFlowMonitor() *schema.Resource { } func dataSourceTencentCloudVpcCrossBorderFlowMonitorRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ccn_cross_border_flow_monitor.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ccn_cross_border_flow_monitor.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ccnId string paramMap := make(map[string]interface{}) @@ -145,14 +148,14 @@ func dataSourceTencentCloudVpcCrossBorderFlowMonitorRead(d *schema.ResourceData, paramMap["end_time"] = helper.String(v.(string)) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var crossBorderFlowMonitorData []*vpc.CrossBorderFlowMonitorData - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCcnCrossBorderFlowMonitorByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } crossBorderFlowMonitorData = result return nil @@ -192,7 +195,7 @@ func dataSourceTencentCloudVpcCrossBorderFlowMonitorRead(d *schema.ResourceData, d.SetId(ccnId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ccn_cross_border_flow_monitor_test.go b/tencentcloud/services/ccn/data_source_tc_ccn_cross_border_flow_monitor_test.go similarity index 67% rename from tencentcloud/data_source_tc_ccn_cross_border_flow_monitor_test.go rename to tencentcloud/services/ccn/data_source_tc_ccn_cross_border_flow_monitor_test.go index 9e5ce81f4b..e680280e65 100644 --- a/tencentcloud/data_source_tc_ccn_cross_border_flow_monitor_test.go +++ b/tencentcloud/services/ccn/data_source_tc_ccn_cross_border_flow_monitor_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ccn_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudNeedFixCcnCrossBorderFlowMonitorDataSource_basic(t *test t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCcnCrossBorderFlowMonitorDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ccn_cross_border_flow_monitor.cross_border_flow_monitor")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ccn_cross_border_flow_monitor.cross_border_flow_monitor")), }, }, }) diff --git a/tencentcloud/data_source_tc_ccn_cross_border_region_bandwidth_limits.go b/tencentcloud/services/ccn/data_source_tc_ccn_cross_border_region_bandwidth_limits.go similarity index 91% rename from tencentcloud/data_source_tc_ccn_cross_border_region_bandwidth_limits.go rename to tencentcloud/services/ccn/data_source_tc_ccn_cross_border_region_bandwidth_limits.go index 7ca0dace0d..119dd88c12 100644 --- a/tencentcloud/data_source_tc_ccn_cross_border_region_bandwidth_limits.go +++ b/tencentcloud/services/ccn/data_source_tc_ccn_cross_border_region_bandwidth_limits.go @@ -1,15 +1,18 @@ -package tencentcloud +package ccn import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCcnCrossBorderRegionBandwidthLimits() *schema.Resource { +func DataSourceTencentCloudCcnCrossBorderRegionBandwidthLimits() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCcnCrossBorderRegionBandwidthLimitsRead, Schema: map[string]*schema.Schema{ @@ -135,12 +138,12 @@ func dataSourceTencentCloudCcnCrossBorderRegionBandwidthLimits() *schema.Resourc } func dataSourceTencentCloudCcnCrossBorderRegionBandwidthLimitsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ccn_cross_border_region_bandwidth_limits.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ccn_cross_border_region_bandwidth_limits.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("filters"); ok { @@ -163,14 +166,14 @@ func dataSourceTencentCloudCcnCrossBorderRegionBandwidthLimitsRead(d *schema.Res paramMap["filters"] = tmpSet } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ccnBandwidthSet []*vpc.CcnBandwidth - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeVpcCcnRegionBandwidthLimitsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } ccnBandwidthSet = result return nil @@ -258,7 +261,7 @@ func dataSourceTencentCloudCcnCrossBorderRegionBandwidthLimitsRead(d *schema.Res d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ccn_cross_border_region_bandwidth_limits_test.go b/tencentcloud/services/ccn/data_source_tc_ccn_cross_border_region_bandwidth_limits_test.go similarity index 66% rename from tencentcloud/data_source_tc_ccn_cross_border_region_bandwidth_limits_test.go rename to tencentcloud/services/ccn/data_source_tc_ccn_cross_border_region_bandwidth_limits_test.go index 73e30b658a..306b657c59 100644 --- a/tencentcloud/data_source_tc_ccn_cross_border_region_bandwidth_limits_test.go +++ b/tencentcloud/services/ccn/data_source_tc_ccn_cross_border_region_bandwidth_limits_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ccn_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudNeedFixCcnCrossBorderRegionBandwidthLimitsDataSource_bas t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCcnCrossBorderRegionBandwidthLimitsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ccn_cross_border_region_bandwidth_limits.ccn_region_bandwidth_limits")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ccn_cross_border_region_bandwidth_limits.ccn_region_bandwidth_limits")), }, }, }) diff --git a/tencentcloud/data_source_tc_ccn_instances.go b/tencentcloud/services/ccn/data_source_tc_ccn_instances.go similarity index 92% rename from tencentcloud/data_source_tc_ccn_instances.go rename to tencentcloud/services/ccn/data_source_tc_ccn_instances.go index a3f5e13f52..aa19a8e941 100644 --- a/tencentcloud/data_source_tc_ccn_instances.go +++ b/tencentcloud/services/ccn/data_source_tc_ccn_instances.go @@ -1,4 +1,4 @@ -package tencentcloud +package ccn import ( "context" @@ -7,10 +7,12 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func dataSourceTencentCloudCcnInstances() *schema.Resource { +func DataSourceTencentCloudCcnInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCcnInstancesRead, @@ -128,12 +130,12 @@ func dataSourceTencentCloudCcnInstances() *schema.Resource { } func dataSourceTencentCloudCcnInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ccn_instances.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_ccn_instances.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( ccnId = "" @@ -207,7 +209,7 @@ func dataSourceTencentCloudCcnInstancesRead(d *schema.ResourceData, meta interfa d.SetId(fmt.Sprintf("%x", m.Sum(nil))) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), infoList); err != nil { + if err := tccommon.WriteToFile(output.(string), infoList); err != nil { log.Printf("[CRITAL]%s output file[%s] fail, reason[%s]\n", logId, output.(string), err.Error()) return err diff --git a/tencentcloud/data_source_tc_ccn_instances_test.go b/tencentcloud/services/ccn/data_source_tc_ccn_instances_test.go similarity index 88% rename from tencentcloud/data_source_tc_ccn_instances_test.go rename to tencentcloud/services/ccn/data_source_tc_ccn_instances_test.go index 7d57832a56..a211280c5b 100644 --- a/tencentcloud/data_source_tc_ccn_instances_test.go +++ b/tencentcloud/services/ccn/data_source_tc_ccn_instances_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ccn_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,15 +13,15 @@ func TestAccDataSourceTencentCloudCcnV3InstancesBasic(t *testing.T) { keyName := "data.tencentcloud_ccn_instances.name_instances" keyId := "data.tencentcloud_ccn_instances.id_instances" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: TestAccDataSourceTencentCloudCcnInstances, Check: resource.ComposeTestCheckFunc( //id filter - testAccCheckTencentCloudDataSourceID(keyId), + tcacctest.AccCheckTencentCloudDataSourceID(keyId), resource.TestCheckResourceAttr(keyId, "instance_list.#", "1"), resource.TestCheckResourceAttr(keyId, "instance_list.0.name", "ci-temp-test-ccn"), resource.TestCheckResourceAttr(keyId, "instance_list.0.description", "ci-temp-test-ccn-des"), @@ -32,7 +34,7 @@ func TestAccDataSourceTencentCloudCcnV3InstancesBasic(t *testing.T) { resource.TestCheckResourceAttrSet(keyId, "instance_list.0.create_time"), //name filter ,Every VPC with a "guagua_vpc_instance_test" name will be found - testAccCheckTencentCloudDataSourceID(keyName), + tcacctest.AccCheckTencentCloudDataSourceID(keyName), resource.TestCheckResourceAttrSet(keyName, "instance_list.#"), resource.TestCheckResourceAttrSet(keyName, "instance_list.0.name"), resource.TestCheckResourceAttrSet(keyName, "instance_list.0.description"), diff --git a/tencentcloud/data_source_tc_ccn_tenant_instances.go b/tencentcloud/services/ccn/data_source_tc_ccn_tenant_instances.go similarity index 77% rename from tencentcloud/data_source_tc_ccn_tenant_instances.go rename to tencentcloud/services/ccn/data_source_tc_ccn_tenant_instances.go index 988bce461b..cfe9014f51 100644 --- a/tencentcloud/data_source_tc_ccn_tenant_instances.go +++ b/tencentcloud/services/ccn/data_source_tc_ccn_tenant_instances.go @@ -1,15 +1,18 @@ -package tencentcloud +package ccn import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCcnTenantInstance() *schema.Resource { +func DataSourceTencentCloudCcnTenantInstance() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudTenantCcnRead, Schema: map[string]*schema.Schema{ @@ -50,12 +53,12 @@ func dataSourceTencentCloudCcnTenantInstance() *schema.Resource { } func dataSourceTencentCloudTenantCcnRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_tenant_ccn.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_tenant_ccn.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) @@ -73,14 +76,14 @@ func dataSourceTencentCloudTenantCcnRead(d *schema.ResourceData, meta interface{ valuesSet := v.(*schema.Set).List() paramMap["is-security-lock"] = helper.InterfacesStringsPoint(valuesSet) } - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ccnSet []*vpc.CcnInstanceInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeTenantCcnByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } ccnSet = result return nil @@ -95,7 +98,7 @@ func dataSourceTencentCloudTenantCcnRead(d *schema.ResourceData, meta interface{ d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ccn_tenant_instances_test.go b/tencentcloud/services/ccn/data_source_tc_ccn_tenant_instances_test.go similarity index 62% rename from tencentcloud/data_source_tc_ccn_tenant_instances_test.go rename to tencentcloud/services/ccn/data_source_tc_ccn_tenant_instances_test.go index 4f9ef91bb9..c39203e2c6 100644 --- a/tencentcloud/data_source_tc_ccn_tenant_instances_test.go +++ b/tencentcloud/services/ccn/data_source_tc_ccn_tenant_instances_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ccn_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudNeedFixCcnTenantInstancesDataSource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCcnTenantInstancesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("tencentcloud_ccn_tenant_instances.tenant_ccn")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("tencentcloud_ccn_tenant_instances.tenant_ccn")), }, }, }) diff --git a/tencentcloud/services/ccn/extension_cnn.go b/tencentcloud/services/ccn/extension_cnn.go new file mode 100644 index 0000000000..b82ff7dbdd --- /dev/null +++ b/tencentcloud/services/ccn/extension_cnn.go @@ -0,0 +1,16 @@ +package ccn + +const CNN_QOS_PT = "PT" +const CNN_QOS_AU = "AU" +const CNN_QOS_AG = "AG" + +const CNN_INSTANCE_TYPE_VPC = "VPC" +const CNN_INSTANCE_TYPE_DIRECTCONNECT = "DIRECTCONNECT" +const CNN_INSTANCE_TYPE_BMVPC = "BMVPC" +const CNN_INSTANCE_TYPE_VPNGW = "VPNGW" + +const PREPAID = "PREPAID" +const POSTPAID = "POSTPAID" + +const OuterRegionLimit = "OUTER_REGION_LIMIT" +const InterRegionLimit = "INTER_REGION_LIMIT" diff --git a/tencentcloud/services/ccn/extension_security_group.go b/tencentcloud/services/ccn/extension_security_group.go new file mode 100644 index 0000000000..8050e7f908 --- /dev/null +++ b/tencentcloud/services/ccn/extension_security_group.go @@ -0,0 +1,3 @@ +package ccn + +const DESCRIBE_SECURITY_GROUP_LIMIT = 50 diff --git a/tencentcloud/services/ccn/extension_tags.go b/tencentcloud/services/ccn/extension_tags.go new file mode 100644 index 0000000000..9a4e5f734d --- /dev/null +++ b/tencentcloud/services/ccn/extension_tags.go @@ -0,0 +1,3 @@ +package ccn + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/ccn/extension_vpc.go b/tencentcloud/services/ccn/extension_vpc.go new file mode 100644 index 0000000000..7f5fe3de07 --- /dev/null +++ b/tencentcloud/services/ccn/extension_vpc.go @@ -0,0 +1,327 @@ +package ccn + +/* +all gate way types +https://cloud.tencent.com/document/api/215/15824#Route +*/ +const GATE_WAY_TYPE_CVM = "CVM" +const GATE_WAY_TYPE_VPN = "VPN" +const GATE_WAY_TYPE_DIRECTCONNECT = "DIRECTCONNECT" +const GATE_WAY_TYPE_PEERCONNECTION = "PEERCONNECTION" +const GATE_WAY_TYPE_SSLVPN = "SSLVPN" +const GATE_WAY_TYPE_HAVIP = "HAVIP" +const GATE_WAY_TYPE_NAT = "NAT" +const GATE_WAY_TYPE_NORMAL_CVM = "NORMAL_CVM" +const GATE_WAY_TYPE_EIP = "EIP" +const GATE_WAY_TYPE_CCN = "CCN" +const GATE_WAY_TYPE_LOCAL_GATEWAY = "LOCAL_GATEWAY" + +var ALL_GATE_WAY_TYPES = []string{ + GATE_WAY_TYPE_CVM, + GATE_WAY_TYPE_VPN, + GATE_WAY_TYPE_DIRECTCONNECT, + GATE_WAY_TYPE_PEERCONNECTION, + GATE_WAY_TYPE_SSLVPN, + GATE_WAY_TYPE_HAVIP, + GATE_WAY_TYPE_NAT, + GATE_WAY_TYPE_NORMAL_CVM, + GATE_WAY_TYPE_EIP, + GATE_WAY_TYPE_CCN, + GATE_WAY_TYPE_LOCAL_GATEWAY, +} + +const VPC_SERVICE_TYPE = "vpc" + +/* +EIP +*/ +const ( + EIP_STATUS_CREATING = "CREATING" + EIP_STATUS_BINDING = "BINDING" + EIP_STATUS_BIND = "BIND" + EIP_STATUS_UNBINDING = "UNBINDING" + EIP_STATUS_UNBIND = "UNBIND" + EIP_STATUS_OFFLINING = "OFFLINING" + EIP_STATUS_BIND_ENI = "BIND_ENI" + + EIP_TYPE_EIP = "EIP" + EIP_TYPE_ANYCAST = "AnycastEIP" + EIP_TYPE_HIGH_QUALITY = "HighQualityEIP" + EIP_TYPE_ANTI_DDOS = "AntiDDoSEIP" + + EIP_ANYCAST_ZONE_GLOBAL = "ANYCAST_ZONE_GLOBAL" + EIP_ANYCAST_ZONE_OVERSEAS = "ANYCAST_ZONE_OVERSEAS" + + EIP_INTERNET_PROVIDER_BGP = "BGP" + EIP_INTERNET_PROVIDER_CMCC = "CMCC" + EIP_INTERNET_PROVIDER_CTCC = "CTCC" + EIP_INTERNET_PROVIDER_CUCC = "CUCC" + + EIP_RESOURCE_TYPE = "eip" + + EIP_TASK_STATUS_SUCCESS = "SUCCESS" + EIP_TASK_STATUS_RUNNING = "RUNNING" + EIP_TASK_STATUS_FAILED = "FAILED" +) + +var EIP_INTERNET_PROVIDER = []string{ + EIP_INTERNET_PROVIDER_BGP, + EIP_INTERNET_PROVIDER_CMCC, + EIP_INTERNET_PROVIDER_CTCC, + EIP_INTERNET_PROVIDER_CUCC, +} + +var EIP_TYPE = []string{ + EIP_TYPE_EIP, + EIP_TYPE_ANYCAST, + EIP_TYPE_HIGH_QUALITY, + EIP_TYPE_ANTI_DDOS, +} + +var EIP_ANYCAST_ZONE = []string{ + EIP_ANYCAST_ZONE_GLOBAL, + EIP_ANYCAST_ZONE_OVERSEAS, +} + +var EIP_AVAILABLE_PERIOD = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36} + +// ENI +const ( + ENI_DESCRIBE_LIMIT = 100 +) + +const ( + ENI_STATE_PENDING = "PENDING" + ENI_STATE_AVAILABLE = "AVAILABLE" + ENI_STATE_ATTACHING = "ATTACHING" + ENI_STATE_DETACHING = "DETACHING" + ENI_STATE_DELETING = "DELETING" +) + +const ( + ENI_IP_PENDING = "PENDING" + ENI_IP_AVAILABLE = "AVAILABLE" + ENI_IP_ATTACHING = "ATTACHING" + ENI_IP_DETACHING = "DETACHING" + ENI_IP_DELETING = "DELETING" +) + +/* +NAT +*/ + +const ( + NAT_DESCRIBE_LIMIT = 100 + NAT_EIP_MAX_LIMIT = 10 +) + +const ( + NAT_FAILED_STATE = "FAILED" +) + +const ( + NAT_GATEWAY_TYPE_SUBNET = "SUBNET" + NAT_GATEWAY_TYPE_NETWORK_INTERFACE = "NETWORKINTERFACE" +) + +/* +VPN +*/ + +const ( + VPN_DESCRIBE_LIMIT = 100 +) + +const ( + VPN_TASK_STATUS_SUCCESS = "SUCCESS" + VPN_TASK_STATUS_RUNNING = "RUNNING" + VPN_TASK_STATUS_FAILED = "FAILED" +) + +const ( + VPN_STATE_PENDING = "PENDING" + VPN_STATE_DELETING = "DELETING" + VPN_STATE_AVAILABLE = "AVAILABLE" +) + +var VPN_STATE = []string{ + VPN_STATE_PENDING, + VPN_STATE_DELETING, + VPN_STATE_AVAILABLE, +} + +const ( + VPN_PERIOD_PREPAID_RENEW_FLAG_AUTO_NOTIFY = "NOTIFY_AND_AUTO_RENEW" + VPN_PERIOD_PREPAID_RENEW_FLAG_NOT = "NOTIFY_AND_MANUAL_RENEW" +) + +var VPN_PERIOD_PREPAID_RENEW_FLAG = []string{ + VPN_PERIOD_PREPAID_RENEW_FLAG_AUTO_NOTIFY, + VPN_PERIOD_PREPAID_RENEW_FLAG_NOT, +} + +const ( + VPN_CHARGE_TYPE_PREPAID = "PREPAID" + VPN_CHARGE_TYPE_POSTPAID_BY_HOUR = "POSTPAID_BY_HOUR" +) + +var VPN_CHARGE_TYPE = []string{ + VPN_CHARGE_TYPE_PREPAID, + VPN_CHARGE_TYPE_POSTPAID_BY_HOUR, +} + +const ( + VPN_PURCHASE_PLAN_PRE_POST = "PREPAID_TO_POSTPAID" +) + +var VPN_PURCHASE_PLAN = []string{ + VPN_PURCHASE_PLAN_PRE_POST, +} + +const ( + VPN_RESTRICT_STATE_NORMAL = "NORMAL" + VPN_RESTRICT_STATE_ISOLATE = "PRETECIVELY_ISOLATED" +) + +var VPN_RESTRICT_STATE = []string{ + VPN_RESTRICT_STATE_NORMAL, + VPN_RESTRICT_STATE_ISOLATE, +} + +const ( + VPN_IKE_PROPO_ENCRY_ALGORITHM_3DESCBC = "3DES-CBC" + VPN_IKE_PROPO_ENCRY_ALGORITHM_AESCBC128 = "AES-CBC-128" + VPN_IKE_PROPO_ENCRY_ALGORITHM_AESCBC192 = "AES-CBS-192`" + VPN_IKE_PROPO_ENCRY_ALGORITHM_AESCBC256 = "AES-CBC-256" + VPN_IKE_PROPO_ENCRY_ALGORITHM_DESCBC = "DES-CBC" +) + +var VPN_IKE_PROPO_ENCRY_ALGORITHM = []string{ + VPN_IKE_PROPO_ENCRY_ALGORITHM_3DESCBC, + VPN_IKE_PROPO_ENCRY_ALGORITHM_AESCBC128, + VPN_IKE_PROPO_ENCRY_ALGORITHM_AESCBC192, + VPN_IKE_PROPO_ENCRY_ALGORITHM_AESCBC256, + VPN_IKE_PROPO_ENCRY_ALGORITHM_DESCBC, +} + +const ( + VPN_IKE_PROPO_AUTHEN_ALGORITHM_SHA = "SHA" + VPN_IKE_PROPO_AUTHEN_ALGORITHM_MD5 = "MD5" + VPN_IKE_PROPO_AUTHEN_ALGORITHM_SHA256 = "SHA-256" +) + +var VPN_IKE_PROPO_AUTHEN_ALGORITHM = []string{ + VPN_IKE_PROPO_AUTHEN_ALGORITHM_SHA, + VPN_IKE_PROPO_AUTHEN_ALGORITHM_MD5, + VPN_IKE_PROPO_AUTHEN_ALGORITHM_SHA256, +} + +const ( + VPN_IPSEC_INTEGRITY_ALGORITHM_SHA1 = "SHA1" + VPN_IPSEC_INTEGRITY_ALGORITHM_MD5 = "MD5" + VPN_IPSEC_INTEGRITY_ALGORITHM_SHA256 = "SHA-256" +) + +var VPN_IPSEC_INTEGRITY_ALGORITHM = []string{ + VPN_IPSEC_INTEGRITY_ALGORITHM_SHA1, + VPN_IPSEC_INTEGRITY_ALGORITHM_MD5, + VPN_IPSEC_INTEGRITY_ALGORITHM_SHA256, +} + +const ( + VPN_IKE_EXCHANGE_MODE_AGGRESSIVE = "AGGRESSIVE" + VPN_IKE_EXCHANGE_MODE_MAIN = "MAIN" +) + +var VPN_IKE_EXCHANGE_MODE = []string{ + VPN_IKE_EXCHANGE_MODE_AGGRESSIVE, + VPN_IKE_EXCHANGE_MODE_MAIN, +} + +const ( + VPN_IKE_IDENTITY_ADDRESS = "ADDRESS" + VPN_IKE_IDENTITY_FQDN = "FQDN" +) + +var VPN_IKE_IDENTITY = []string{ + VPN_IKE_IDENTITY_ADDRESS, + VPN_IKE_IDENTITY_FQDN, +} + +const ( + VPN_IKE_DH_GROUP_NAME_GROUP1 = "GROUP1" + VPN_IKE_DH_GROUP_NAME_GROUP2 = "GROUP2" + VPN_IKE_DH_GROUP_NAME_GROUP5 = "GROUP5" + VPN_IKE_DH_GROUP_NAME_GROUP14 = "GROUP14" + VPN_IKE_DH_GROUP_NAME_GROUP24 = "GROUP24" +) + +var VPN_IKE_DH_GROUP_NAME = []string{ + VPN_IKE_DH_GROUP_NAME_GROUP1, + VPN_IKE_DH_GROUP_NAME_GROUP2, + VPN_IKE_DH_GROUP_NAME_GROUP5, + VPN_IKE_DH_GROUP_NAME_GROUP14, + VPN_IKE_DH_GROUP_NAME_GROUP24, +} + +const ( + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP1 = "DH-GROUP1" + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP2 = "DH-GROUP2" + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP5 = "DH-GROUP5" + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP14 = "DH-GROUP14" + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP24 = "DH-GROUP24" + VPN_IPSEC_PFS_DH_GROUP_NAME_NULL = "NULL" +) + +var VPN_IPSEC_PFS_DH_GROUP_NAME = []string{ + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP1, + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP2, + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP5, + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP14, + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP24, + VPN_IPSEC_PFS_DH_GROUP_NAME_NULL, +} + +const ( + VPN_IPSEC_ENCRY_ALGORITHM_3DESCBC = "3DES-CBC" + VPN_IPSEC_ENCRY_ALGORITHM_AESCBC128 = "AES-CBC-128" + VPN_IPSEC_ENCRY_ALGORITHM_AESCBC192 = "AES-CBS-192`" + VPN_IPSEC_ENCRY_ALGORITHM_AESCBC256 = "AES-CBC-256" + VPN_IPSEC_ENCRY_ALGORITHM_DESCBC = "DES-CBC" + VPN_IPSEC_ENCRY_ALGORITHM_NULL = "NULL" +) + +var VPN_IPSEC_ENCRY_ALGORITHM = []string{ + VPN_IPSEC_ENCRY_ALGORITHM_3DESCBC, + VPN_IPSEC_ENCRY_ALGORITHM_AESCBC128, + VPN_IPSEC_ENCRY_ALGORITHM_AESCBC192, + VPN_IPSEC_ENCRY_ALGORITHM_AESCBC256, + VPN_IPSEC_ENCRY_ALGORITHM_DESCBC, + VPN_IPSEC_ENCRY_ALGORITHM_NULL, +} + +/* +HAVIP +*/ + +const ( + HAVIP_DESCRIBE_LIMIT = 100 +) + +/* +COMMON +*/ +const ( + VPCNotFound = "ResourceNotFound" + VPCUnsupportedOperation = "UnsupportedOperation" +) + +const ( + DPD_ACTION_CLEAR = "clear" + DPD_ACTION_RESTART = "restart" +) + +var DPD_ACTIONS = []string{ + DPD_ACTION_CLEAR, + DPD_ACTION_RESTART, +} diff --git a/tencentcloud/resource_tc_ccn.go b/tencentcloud/services/ccn/resource_tc_ccn.go similarity index 71% rename from tencentcloud/resource_tc_ccn.go rename to tencentcloud/services/ccn/resource_tc_ccn.go index 28da30021a..00ceb1ce3c 100644 --- a/tencentcloud/resource_tc_ccn.go +++ b/tencentcloud/services/ccn/resource_tc_ccn.go @@ -1,16 +1,19 @@ -package tencentcloud +package ccn import ( "context" "fmt" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCcn() *schema.Resource { +func ResourceTencentCloudCcn() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCcnCreate, Read: resourceTencentCloudCcnRead, @@ -24,13 +27,13 @@ func resourceTencentCloudCcn() *schema.Resource { "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of the CCN to be queried, and maximum length does not exceed 60 bytes.", }, "description": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(0, 100), + ValidateFunc: tccommon.ValidateStringLengthInRange(0, 100), Description: "Description of CCN, and maximum length does not exceed 100 bytes.", }, "qos": { @@ -38,7 +41,7 @@ func resourceTencentCloudCcn() *schema.Resource { Optional: true, ForceNew: true, Default: CNN_QOS_AU, - ValidateFunc: validateAllowedStringValue([]string{CNN_QOS_PT, CNN_QOS_AU, CNN_QOS_AG}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{CNN_QOS_PT, CNN_QOS_AU, CNN_QOS_AG}), Description: "Service quality of CCN. Valid values: `PT`, `AU`, `AG`. The default is `AU`.", }, "charge_type": { @@ -46,7 +49,7 @@ func resourceTencentCloudCcn() *schema.Resource { Optional: true, ForceNew: true, Default: POSTPAID, - ValidateFunc: validateAllowedStringValue([]string{POSTPAID, PREPAID}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{POSTPAID, PREPAID}), Description: "Billing mode. Valid values: `PREPAID`, `POSTPAID`. " + "`PREPAID` means prepaid, which means annual and monthly subscription, " + "`POSTPAID` means post-payment, which means billing by volume. " + @@ -57,7 +60,7 @@ func resourceTencentCloudCcn() *schema.Resource { Type: schema.TypeString, Optional: true, Default: OuterRegionLimit, - ValidateFunc: validateAllowedStringValue([]string{OuterRegionLimit, InterRegionLimit}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{OuterRegionLimit, InterRegionLimit}), Description: "The speed limit type. Valid values: `INTER_REGION_LIMIT`, `OUTER_REGION_LIMIT`. " + "`OUTER_REGION_LIMIT` represents the regional export speed limit, " + "`INTER_REGION_LIMIT` is the inter-regional speed limit. " + @@ -89,12 +92,12 @@ func resourceTencentCloudCcn() *schema.Resource { } func resourceTencentCloudCcnCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn.create")() + defer tccommon.LogElapsed("resource.tencentcloud_ccn.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( name = d.Get("name").(string) @@ -113,9 +116,9 @@ func resourceTencentCloudCcnCreate(d *schema.ResourceData, meta interface{}) err d.SetId(info.ccnId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("vpc", "ccn", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("vpc", "ccn", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -125,17 +128,17 @@ func resourceTencentCloudCcnCreate(d *schema.ResourceData, meta interface{}) err } func resourceTencentCloudCcnRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ccn.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, e := service.DescribeCcn(ctx, d.Id()) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if has == 0 { @@ -157,7 +160,7 @@ func resourceTencentCloudCcnRead(d *schema.ResourceData, meta interface{}) error if err != nil { return err } - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "vpc", "ccn", tcClient.Region, d.Id()) if err != nil { @@ -169,12 +172,12 @@ func resourceTencentCloudCcnRead(d *schema.ResourceData, meta interface{}) error } func resourceTencentCloudCcnUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn.update")() + defer tccommon.LogElapsed("resource.tencentcloud_ccn.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( name = "" @@ -205,9 +208,9 @@ func resourceTencentCloudCcnUpdate(d *schema.ResourceData, meta interface{}) err // modify band width limit type if d.HasChange("bandwidth_limit_type") { _, news := d.GetChange("bandwidth_limit_type") - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err := service.ModifyCcnRegionBandwidthLimitsType(ctx, d.Id(), news.(string)); err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }); err != nil { @@ -220,9 +223,9 @@ func resourceTencentCloudCcnUpdate(d *schema.ResourceData, meta interface{}) err oldValue, newValue := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("vpc", "ccn", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("vpc", "ccn", tcClient.Region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -234,16 +237,16 @@ func resourceTencentCloudCcnUpdate(d *schema.ResourceData, meta interface{}) err } func resourceTencentCloudCcnDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_ccn.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, e := service.DescribeCcn(ctx, d.Id()) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if has == 0 { d.SetId("") @@ -259,7 +262,7 @@ func resourceTencentCloudCcnDelete(d *schema.ResourceData, meta interface{}) err return err } - return resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + return resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err := service.DescribeCcn(ctx, d.Id()) if err != nil { return resource.RetryableError(err) diff --git a/tencentcloud/resource_tc_ccn_attachment.go b/tencentcloud/services/ccn/resource_tc_ccn_attachment.go similarity index 78% rename from tencentcloud/resource_tc_ccn_attachment.go rename to tencentcloud/services/ccn/resource_tc_ccn_attachment.go index 7998ebd4cf..cf4bf8a83e 100644 --- a/tencentcloud/resource_tc_ccn_attachment.go +++ b/tencentcloud/services/ccn/resource_tc_ccn_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package ccn import ( "context" @@ -7,14 +7,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudCcnAttachment() *schema.Resource { +func ResourceTencentCloudCcnAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCcnAttachmentCreate, Read: resourceTencentCloudCcnAttachmentRead, @@ -31,7 +34,7 @@ func resourceTencentCloudCcnAttachment() *schema.Resource { "instance_type": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue([]string{CNN_INSTANCE_TYPE_VPC, CNN_INSTANCE_TYPE_DIRECTCONNECT, CNN_INSTANCE_TYPE_BMVPC, CNN_INSTANCE_TYPE_VPNGW}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{CNN_INSTANCE_TYPE_VPC, CNN_INSTANCE_TYPE_DIRECTCONNECT, CNN_INSTANCE_TYPE_BMVPC, CNN_INSTANCE_TYPE_VPNGW}), ForceNew: true, Description: "Type of attached instance network, and available values include `VPC`, `DIRECTCONNECT`, `BMVPC` and `VPNGW`. Note: `VPNGW` type is only for whitelist customer now.", }, @@ -91,12 +94,12 @@ func resourceTencentCloudCcnAttachment() *schema.Resource { } func resourceTencentCloudCcnAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_attachment.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( ccnId = d.Get("ccn_id").(string) @@ -145,13 +148,13 @@ func resourceTencentCloudCcnAttachmentCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudCcnAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if v, ok := d.GetOk("ccn_uin"); ok { ccnUin := v.(string) @@ -160,10 +163,10 @@ func resourceTencentCloudCcnAttachmentRead(d *schema.ResourceData, meta interfac instanceRegion := d.Get("instance_region").(string) instanceId := d.Get("instance_id").(string) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { infos, e := service.DescribeCcnAttachmentsByInstance(ctx, instanceType, instanceId, instanceRegion) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if len(infos) == 0 { @@ -200,10 +203,10 @@ func resourceTencentCloudCcnAttachmentRead(d *schema.ResourceData, meta interfac instanceId = d.Get("instance_id").(string) onlineHas = true ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, e := service.DescribeCcn(ctx, ccnId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if has == 0 { @@ -219,10 +222,10 @@ func resourceTencentCloudCcnAttachmentRead(d *schema.ResourceData, meta interfac if !onlineHas { return nil } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, e := service.DescribeCcnAttachedInstance(ctx, ccnId, instanceRegion, instanceType, instanceId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if has == 0 { d.SetId("") @@ -239,13 +242,13 @@ func resourceTencentCloudCcnAttachmentRead(d *schema.ResourceData, meta interfac return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { request := vpc.NewDescribeCcnRoutesRequest() request.CcnId = &ccnId - response, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DescribeCcnRoutes(request) + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeCcnRoutes(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } routeIds := make([]string, 0) if response != nil && response.Response != nil && len(response.Response.RouteSet) > 0 { @@ -266,8 +269,8 @@ func resourceTencentCloudCcnAttachmentRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudCcnAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_attachment.create")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_ccn_attachment.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) if d.HasChange("description") { var ( @@ -289,13 +292,13 @@ func resourceTencentCloudCcnAttachmentUpdate(d *schema.ResourceData, meta interf request.Instances = []*vpc.CcnInstance{&ccnInstance} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, err := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ModifyCcnAttachedInstancesAttribute(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyCcnAttachedInstancesAttribute(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) - return retryError(err) + return tccommon.RetryError(err) } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) @@ -309,12 +312,12 @@ func resourceTencentCloudCcnAttachmentUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudCcnAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_attachment.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( ccnId = d.Get("ccn_id").(string) @@ -322,10 +325,10 @@ func resourceTencentCloudCcnAttachmentDelete(d *schema.ResourceData, meta interf instanceRegion = d.Get("instance_region").(string) instanceId = d.Get("instance_id").(string) ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, e := service.DescribeCcn(ctx, ccnId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if has == 0 { return nil @@ -339,7 +342,7 @@ func resourceTencentCloudCcnAttachmentDelete(d *schema.ResourceData, meta interf return err } - return resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + return resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err := service.DescribeCcnAttachedInstance(ctx, ccnId, instanceRegion, instanceType, instanceId) if err != nil { return resource.RetryableError(err) diff --git a/tencentcloud/resource_tc_ccn_attachment_test.go b/tencentcloud/services/ccn/resource_tc_ccn_attachment_test.go similarity index 83% rename from tencentcloud/resource_tc_ccn_attachment_test.go rename to tencentcloud/services/ccn/resource_tc_ccn_attachment_test.go index 3e4f03cbf3..5cd1dcbc24 100644 --- a/tencentcloud/resource_tc_ccn_attachment_test.go +++ b/tencentcloud/services/ccn/resource_tc_ccn_attachment_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ccn_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localccn "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ccn" + "context" "fmt" "testing" @@ -15,8 +19,8 @@ func TestAccTencentCloudCcnAttachmentResource(t *testing.T) { keyName := "tencentcloud_ccn_attachment.attachment" keyNameVpngw := "tencentcloud_ccn_attachment.vpngw_ccn_attachment" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCcnAttachmentDestroy, Steps: []resource.TestStep{ { @@ -52,15 +56,15 @@ func TestAccTencentCloudCcnAttachmentResource(t *testing.T) { func testAccCheckCcnAttachmentExists(r string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[r] if !ok { return fmt.Errorf("resource %s is not found", r) } - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := localccn.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeCcnAttachedInstance(ctx, rs.Primary.Attributes["ccn_id"], @@ -80,10 +84,10 @@ func testAccCheckCcnAttachmentExists(r string) resource.TestCheckFunc { func testAccCheckCcnAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := localccn.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ccn_attachment" { continue diff --git a/tencentcloud/resource_tc_ccn_bandwidth_limit.go b/tencentcloud/services/ccn/resource_tc_ccn_bandwidth_limit.go similarity index 71% rename from tencentcloud/resource_tc_ccn_bandwidth_limit.go rename to tencentcloud/services/ccn/resource_tc_ccn_bandwidth_limit.go index a0afbd9d49..50107e62cc 100644 --- a/tencentcloud/resource_tc_ccn_bandwidth_limit.go +++ b/tencentcloud/services/ccn/resource_tc_ccn_bandwidth_limit.go @@ -1,14 +1,16 @@ -package tencentcloud +package ccn import ( "context" "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudCcnBandwidthLimit() *schema.Resource { +func ResourceTencentCloudCcnBandwidthLimit() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCcnBandwidthLimitCreate, Read: resourceTencentCloudCcnBandwidthLimitRead, @@ -46,12 +48,12 @@ func resourceTencentCloudCcnBandwidthLimit() *schema.Resource { } func resourceTencentCloudCcnBandwidthLimitCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_bandwidth_limit.create")() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_bandwidth_limit.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( ccnId = d.Get("ccn_id").(string) @@ -85,12 +87,12 @@ func resourceTencentCloudCcnBandwidthLimitCreate(d *schema.ResourceData, meta in } func resourceTencentCloudCcnBandwidthLimitUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_bandwidth_limit.update")() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_bandwidth_limit.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( ccnId = d.Get("ccn_id").(string) @@ -117,13 +119,13 @@ func resourceTencentCloudCcnBandwidthLimitUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudCcnBandwidthLimitRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_bandwidth_limit.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_bandwidth_limit.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( ccnId = d.Get("ccn_id").(string) @@ -132,10 +134,10 @@ func resourceTencentCloudCcnBandwidthLimitRead(d *schema.ResourceData, meta inte onlineHas = true info CcnBasicInfo ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { infoTmp, has, e := service.DescribeCcn(ctx, ccnId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if has == 0 { @@ -152,10 +154,10 @@ func resourceTencentCloudCcnBandwidthLimitRead(d *schema.ResourceData, meta inte if !onlineHas { return nil } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { bandwidth, e := service.GetCcnRegionBandwidthLimit(ctx, ccnId, region, dstRegion, info.bandWithLimitType) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } _ = d.Set("bandwidth_limit", bandwidth) _ = d.Set("dst_region", dstRegion) @@ -168,7 +170,7 @@ func resourceTencentCloudCcnBandwidthLimitRead(d *schema.ResourceData, meta inte } func resourceTencentCloudCcnBandwidthLimitDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_bandwidth_limit.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_bandwidth_limit.delete")() var ( ccnId = d.Get("ccn_id").(string) @@ -177,10 +179,10 @@ func resourceTencentCloudCcnBandwidthLimitDelete(d *schema.ResourceData, meta in limit int64 ) - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if v, ok := d.GetOk("dst_region"); ok { dstRegion = v.(string) diff --git a/tencentcloud/resource_tc_ccn_bandwidth_limit_test.go b/tencentcloud/services/ccn/resource_tc_ccn_bandwidth_limit_test.go similarity index 85% rename from tencentcloud/resource_tc_ccn_bandwidth_limit_test.go rename to tencentcloud/services/ccn/resource_tc_ccn_bandwidth_limit_test.go index 31c71cf1e9..4d9e32c7a1 100644 --- a/tencentcloud/resource_tc_ccn_bandwidth_limit_test.go +++ b/tencentcloud/services/ccn/resource_tc_ccn_bandwidth_limit_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ccn_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localccn "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ccn" + "context" "fmt" "testing" @@ -14,8 +18,8 @@ const keyNameLimit1 = "tencentcloud_ccn_bandwidth_limit.limit1" func TestAccTencentCloudCcnV3BandwidthLimitOuter(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCcnBandwidthLimitDestroy, Steps: []resource.TestStep{ { @@ -43,8 +47,8 @@ func TestAccTencentCloudCcnV3BandwidthLimitOuter(t *testing.T) { func TestAccTencentCloudCcnV3BandwidthLimitInter(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCcnBandwidthLimitDestroy, Steps: []resource.TestStep{ { @@ -77,15 +81,15 @@ func testAccCheckCcnBandwidthLimitDestroy(s *terraform.State) error { func testAccCheckCcnBandwidthLimitExists(r string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[r] if !ok { return fmt.Errorf("resource %s is not found", r) } - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := localccn.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) ccnID := rs.Primary.Attributes["ccn_id"] info, has, err := service.DescribeCcn(ctx, ccnID) if err != nil { @@ -98,7 +102,7 @@ func testAccCheckCcnBandwidthLimitExists(r string) resource.TestCheckFunc { ccnID, rs.Primary.Attributes["region"], rs.Primary.Attributes["dst_region"], - info.bandWithLimitType) + info.BandWithLimitType()) if err != nil { return err @@ -147,7 +151,7 @@ resource tencentcloud_ccn main { name = "ci-temp-test-ccn" description = "ci-temp-test-ccn-des" qos = "AG" - bandwidth_limit_type = "INTER_REGION_LIMIT" + bandwidth_limit_type = "tcacctest.INTER_REGION_LIMIT" } ` diff --git a/tencentcloud/resource_tc_ccn_instances_accept_attach.go b/tencentcloud/services/ccn/resource_tc_ccn_instances_accept_attach.go similarity index 81% rename from tencentcloud/resource_tc_ccn_instances_accept_attach.go rename to tencentcloud/services/ccn/resource_tc_ccn_instances_accept_attach.go index b57c5d0987..6aaa2652c7 100644 --- a/tencentcloud/resource_tc_ccn_instances_accept_attach.go +++ b/tencentcloud/services/ccn/resource_tc_ccn_instances_accept_attach.go @@ -1,16 +1,19 @@ -package tencentcloud +package ccn import ( "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCcnInstancesAcceptAttach() *schema.Resource { +func ResourceTencentCloudCcnInstancesAcceptAttach() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCcnInstancesAcceptAttachCreate, Read: resourceTencentCloudCcnInstancesAcceptAttachRead, @@ -66,10 +69,10 @@ func resourceTencentCloudCcnInstancesAcceptAttach() *schema.Resource { } func resourceTencentCloudCcnInstancesAcceptAttachCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_instances_accept_attach.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_instances_accept_attach.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = vpc.NewAcceptAttachCcnInstancesRequest() @@ -106,10 +109,10 @@ func resourceTencentCloudCcnInstancesAcceptAttachCreate(d *schema.ResourceData, } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AcceptAttachCcnInstances(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AcceptAttachCcnInstances(request) if e != nil { - return retryError(e) + 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()) } @@ -125,15 +128,15 @@ func resourceTencentCloudCcnInstancesAcceptAttachCreate(d *schema.ResourceData, } func resourceTencentCloudCcnInstancesAcceptAttachRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_instances_accept_attach.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_instances_accept_attach.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCcnInstancesAcceptAttachDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_instances_accept_attach.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_instances_accept_attach.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_ccn_instances_reject_attach.go b/tencentcloud/services/ccn/resource_tc_ccn_instances_reject_attach.go similarity index 81% rename from tencentcloud/resource_tc_ccn_instances_reject_attach.go rename to tencentcloud/services/ccn/resource_tc_ccn_instances_reject_attach.go index 9a8491ccb6..ddec6954cb 100644 --- a/tencentcloud/resource_tc_ccn_instances_reject_attach.go +++ b/tencentcloud/services/ccn/resource_tc_ccn_instances_reject_attach.go @@ -1,16 +1,19 @@ -package tencentcloud +package ccn import ( "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCcnInstancesRejectAttach() *schema.Resource { +func ResourceTencentCloudCcnInstancesRejectAttach() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCcnInstancesRejectAttachCreate, Read: resourceTencentCloudCcnInstancesRejectAttachRead, @@ -66,10 +69,10 @@ func resourceTencentCloudCcnInstancesRejectAttach() *schema.Resource { } func resourceTencentCloudCcnInstancesRejectAttachCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_instances_reject_attach.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_instances_reject_attach.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = vpc.NewRejectAttachCcnInstancesRequest() @@ -106,10 +109,10 @@ func resourceTencentCloudCcnInstancesRejectAttachCreate(d *schema.ResourceData, } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().RejectAttachCcnInstances(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().RejectAttachCcnInstances(request) if e != nil { - return retryError(e) + 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()) } @@ -125,15 +128,15 @@ func resourceTencentCloudCcnInstancesRejectAttachCreate(d *schema.ResourceData, } func resourceTencentCloudCcnInstancesRejectAttachRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_instances_reject_attach.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_instances_reject_attach.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCcnInstancesRejectAttachDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_instances_reject_attach.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_instances_reject_attach.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_ccn_instances_reset_attach.go b/tencentcloud/services/ccn/resource_tc_ccn_instances_reset_attach.go similarity index 81% rename from tencentcloud/resource_tc_ccn_instances_reset_attach.go rename to tencentcloud/services/ccn/resource_tc_ccn_instances_reset_attach.go index 24f3c80fad..dc5f6c8e32 100644 --- a/tencentcloud/resource_tc_ccn_instances_reset_attach.go +++ b/tencentcloud/services/ccn/resource_tc_ccn_instances_reset_attach.go @@ -1,16 +1,19 @@ -package tencentcloud +package ccn import ( "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCcnInstancesResetAttach() *schema.Resource { +func ResourceTencentCloudCcnInstancesResetAttach() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCcnInstancesResetAttachCreate, Read: resourceTencentCloudCcnInstancesResetAttachRead, @@ -70,10 +73,10 @@ func resourceTencentCloudCcnInstancesResetAttach() *schema.Resource { } func resourceTencentCloudCcnInstancesResetAttachCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_ccn_instances_reset_attach.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_ccn_instances_reset_attach.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = vpc.NewResetAttachCcnInstancesRequest() @@ -114,10 +117,10 @@ func resourceTencentCloudCcnInstancesResetAttachCreate(d *schema.ResourceData, m } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ResetAttachCcnInstances(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ResetAttachCcnInstances(request) if e != nil { - return retryError(e) + 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()) } @@ -133,15 +136,15 @@ func resourceTencentCloudCcnInstancesResetAttachCreate(d *schema.ResourceData, m } func resourceTencentCloudCcnInstancesResetAttachRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_instances_reset_attach.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_instances_reset_attach.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCcnInstancesResetAttachDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloudccn_instances_reset_attach.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloudccn_instances_reset_attach.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_ccn_routes.go b/tencentcloud/services/ccn/resource_tc_ccn_routes.go similarity index 69% rename from tencentcloud/resource_tc_ccn_routes.go rename to tencentcloud/services/ccn/resource_tc_ccn_routes.go index f81851ad15..0fe709424a 100644 --- a/tencentcloud/resource_tc_ccn_routes.go +++ b/tencentcloud/services/ccn/resource_tc_ccn_routes.go @@ -1,4 +1,4 @@ -package tencentcloud +package ccn import ( "context" @@ -6,12 +6,14 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" ) -func resourceTencentCloudCcnRoutes() *schema.Resource { +func ResourceTencentCloudCcnRoutes() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCcnRoutesCreate, Read: resourceTencentCloudCcnRoutesRead, @@ -45,28 +47,28 @@ func resourceTencentCloudCcnRoutes() *schema.Resource { } func resourceTencentCloudCcnRoutesCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_routes.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_routes.create")() + defer tccommon.InconsistentCheck(d, meta)() ccnId := d.Get("ccn_id").(string) routeId := d.Get("route_id").(string) - d.SetId(ccnId + FILED_SP + routeId) + d.SetId(ccnId + tccommon.FILED_SP + routeId) return resourceTencentCloudCcnRoutesUpdate(d, meta) } func resourceTencentCloudCcnRoutesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_routes.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_routes.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -99,12 +101,12 @@ func resourceTencentCloudCcnRoutesRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudCcnRoutesUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_routes.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_routes.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -121,10 +123,10 @@ func resourceTencentCloudCcnRoutesUpdate(d *schema.ResourceData, meta interface{ request.CcnId = &ccnId request.RouteIds = []*string{&routeId} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().EnableCcnRoutes(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().EnableCcnRoutes(request) if e != nil { - return retryError(e) + 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()) } @@ -142,10 +144,10 @@ func resourceTencentCloudCcnRoutesUpdate(d *schema.ResourceData, meta interface{ request.CcnId = &ccnId request.RouteIds = []*string{&routeId} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DisableCcnRoutes(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DisableCcnRoutes(request) if e != nil { - return retryError(e) + 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()) } @@ -162,8 +164,8 @@ func resourceTencentCloudCcnRoutesUpdate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCcnRoutesDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ccn_routes.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ccn_routes.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_ccn_routes_test.go b/tencentcloud/services/ccn/resource_tc_ccn_routes_test.go similarity index 86% rename from tencentcloud/resource_tc_ccn_routes_test.go rename to tencentcloud/services/ccn/resource_tc_ccn_routes_test.go index ecad5b17bf..4cc6c50555 100644 --- a/tencentcloud/resource_tc_ccn_routes_test.go +++ b/tencentcloud/services/ccn/resource_tc_ccn_routes_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ccn_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCcnRoutesResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccVpcCcnRoutes, diff --git a/tencentcloud/resource_tc_ccn_test.go b/tencentcloud/services/ccn/resource_tc_ccn_test.go similarity index 77% rename from tencentcloud/resource_tc_ccn_test.go rename to tencentcloud/services/ccn/resource_tc_ccn_test.go index 74ea018e0b..8b970e5cdc 100644 --- a/tencentcloud/resource_tc_ccn_test.go +++ b/tencentcloud/services/ccn/resource_tc_ccn_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package ccn_test import ( "context" @@ -8,8 +8,13 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + localccn "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ccn" ) func init() { @@ -20,18 +25,16 @@ func init() { } func testSweepCcnInstance(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - sharedClient, err := sharedClientForRegion(region) + sharedClient, err := tcacctest.SharedClientForRegion(region) if err != nil { return fmt.Errorf("getting tencentcloud client error: %s", err.Error()) } - client := sharedClient.(*TencentCloudClient) + client := sharedClient.(tccommon.ProviderMeta) - vpcService := VpcService{ - client: client.apiV3Conn, - } + vpcService := localccn.NewVpcService(client.GetAPIV3Conn()) instances, err := vpcService.DescribeCcns(ctx, "", "") if err != nil { @@ -39,21 +42,21 @@ func testSweepCcnInstance(region string) error { } for _, v := range instances { - instanceId := v.ccnId - instanceName := v.name + instanceId := v.CcnId() + instanceName := v.Name() now := time.Now() - createTime := stringTotime(v.createTime) + createTime := tccommon.StringToTime(v.CreateTime()) interval := now.Sub(createTime).Minutes() if instanceName != "" { - if strings.HasPrefix(instanceName, keepResource) || strings.HasPrefix(instanceName, defaultResource) { + if strings.HasPrefix(instanceName, tcacctest.KeepResource) || strings.HasPrefix(instanceName, tcacctest.DefaultResource) { continue } } // less than 30 minute, not delete - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } @@ -68,8 +71,8 @@ func TestAccTencentCloudCcnV3Basic(t *testing.T) { t.Parallel() keyName := "tencentcloud_ccn.main" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCcnDestroy, Steps: []resource.TestStep{ { @@ -122,8 +125,8 @@ func TestAccTencentCloudCcnV3Update(t *testing.T) { keyName := "tencentcloud_ccn.main" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCcnDestroy, Steps: []resource.TestStep{ { @@ -156,15 +159,15 @@ func TestAccTencentCloudCcnV3Update(t *testing.T) { func testAccCheckCcnExists(r string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[r] if !ok { return fmt.Errorf("resource %s is not found", r) } - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := localccn.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeCcn(ctx, rs.Primary.ID) if err != nil { @@ -178,10 +181,10 @@ func testAccCheckCcnExists(r string) resource.TestCheckFunc { } func testAccCheckCcnDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := localccn.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ccn" { continue diff --git a/tencentcloud/services/ccn/service_tencentcloud_ccn.go b/tencentcloud/services/ccn/service_tencentcloud_ccn.go new file mode 100644 index 0000000000..d1584437ce --- /dev/null +++ b/tencentcloud/services/ccn/service_tencentcloud_ccn.go @@ -0,0 +1,700 @@ +package ccn + +import ( + "context" + "fmt" + "log" + "strings" + + vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +// Ccn basic information +type CcnBasicInfo struct { + ccnId string + name string + description string + state string + qos string + chargeType string + bandWithLimitType string + instanceCount int64 + createTime string +} + +func (info CcnBasicInfo) CcnId() string { + return info.ccnId +} + +func (info CcnBasicInfo) Name() string { + return info.name +} + +func (info CcnBasicInfo) BandWithLimitType() string { + return info.bandWithLimitType +} + +func (info CcnBasicInfo) CreateTime() string { + return info.createTime +} + +type CcnAttachedInstanceInfo struct { + ccnId string + instanceType string + instanceRegion string + instanceId string + state string + attachedTime string + cidrBlock []string + description string +} + +type CcnBandwidthLimit struct { + region string + limit int64 +} + +func (me *VpcService) DescribeCcn(ctx context.Context, ccnId string) (info CcnBasicInfo, has int, errRet error) { + infos, err := me.DescribeCcns(ctx, ccnId, "") + if err != nil { + errRet = err + return + } + has = len(infos) + if has > 0 { + info = infos[0] + } + return +} + +func (me *VpcService) DescribeCcns(ctx context.Context, ccnId, name string) (infos []CcnBasicInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeCcnsRequest() + 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()) + } + }() + + infos = make([]CcnBasicInfo, 0, 100) + + var offset uint64 = 0 + var limit uint64 = 100 + var total = -1 + var has = map[string]bool{} + + var filters []*vpc.Filter + if ccnId != "" { + filters = me.fillFilter(filters, "ccn-id", ccnId) + } + if name != "" { + filters = me.fillFilter(filters, "ccn-name", name) + } + if len(filters) > 0 { + request.Filters = filters + } + +getMoreData: + + if total >= 0 && int(offset) >= total { + return + } + request.Limit = &limit + request.Offset = &offset + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeCcns(request) + + if err != nil { + errRet = err + responseStr := "" + if response != nil { + responseStr = response.ToJsonString() + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + responseStr, + errRet.Error()) + return + } + + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + response.ToJsonString()) + + if total < 0 { + total = int(*response.Response.TotalCount) + } + + if len(response.Response.CcnSet) > 0 { + offset += limit + } else { + //get empty ,we're done + return + } + for _, item := range response.Response.CcnSet { + var basicInfo CcnBasicInfo + + basicInfo.ccnId = *item.CcnId + basicInfo.name = *item.CcnName + basicInfo.createTime = *item.CreateTime + basicInfo.description = *item.CcnDescription + basicInfo.instanceCount = int64(*item.InstanceCount) + basicInfo.qos = *item.QosLevel + basicInfo.state = *item.State + basicInfo.chargeType = *item.InstanceChargeType + basicInfo.bandWithLimitType = *item.BandwidthLimitType + + if has[basicInfo.ccnId] { + errRet = fmt.Errorf("get repeated ccn_id[%s] when doing DescribeCcns", basicInfo.ccnId) + return + } + has[basicInfo.ccnId] = true + infos = append(infos, basicInfo) + } + goto getMoreData + +} + +func (me *VpcService) DescribeCcnRegionBandwidthLimits(ctx context.Context, ccnId string) (infos []CcnBandwidthLimit, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeCcnRegionBandwidthLimitsRequest() + + infos = make([]CcnBandwidthLimit, 0, 100) + + request.CcnId = &ccnId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeCcnRegionBandwidthLimits(request) + + defer func() { + if errRet != nil { + responseStr := "" + if response != nil { + responseStr = response.ToJsonString() + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + responseStr, + errRet.Error()) + } + }() + + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + response.ToJsonString()) + + for _, item := range response.Response.CcnRegionBandwidthLimitSet { + + var ccnBandwidthLimit CcnBandwidthLimit + ccnBandwidthLimit.region = *item.Region + ccnBandwidthLimit.limit = int64(*item.BandwidthLimit) + infos = append(infos, ccnBandwidthLimit) + } + return +} + +func (me *VpcService) CreateCcn(ctx context.Context, name, description, + qos, chargeType, bandWithLimitType string) (basicInfo CcnBasicInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateCcnRequest() + + request.CcnName = &name + request.CcnDescription = &description + request.QosLevel = &qos + request.InstanceChargeType = &chargeType + request.BandwidthLimitType = &bandWithLimitType + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().CreateCcn(request) + + defer func() { + if errRet != nil { + responseStr := "" + if response != nil { + responseStr = response.ToJsonString() + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + responseStr, + errRet.Error()) + } + }() + + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + response.ToJsonString()) + + if response.Response.Ccn == nil || response.Response.Ccn.CcnId == nil || *response.Response.Ccn.CcnId == "" { + errRet = fmt.Errorf("CreateCcn return empty response.Response.Ccn ") + return + } + + item := response.Response.Ccn + basicInfo.ccnId = *item.CcnId + basicInfo.name = *item.CcnName + basicInfo.createTime = *item.CreateTime + + basicInfo.description = *item.CcnDescription + basicInfo.instanceCount = int64(*item.InstanceCount) + basicInfo.qos = *item.QosLevel + basicInfo.state = *item.State + return +} + +func (me *VpcService) DeleteCcn(ctx context.Context, ccnId string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteCcnRequest() + request.CcnId = &ccnId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DeleteCcn(request) + + defer func() { + if errRet != nil { + responseStr := "" + if response != nil { + responseStr = response.ToJsonString() + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + responseStr, + errRet.Error()) + } + }() + + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + response.ToJsonString()) + return +} + +func (me *VpcService) ModifyCcnAttribute(ctx context.Context, ccnId, name, description string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyCcnAttributeRequest() + request.CcnId = &ccnId + + if name != "" { + request.CcnName = &name + } + if description != "" { + request.CcnDescription = &description + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().ModifyCcnAttribute(request) + + defer func() { + if errRet != nil { + responseStr := "" + if response != nil { + responseStr = response.ToJsonString() + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + responseStr, + errRet.Error()) + } + }() + + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + response.ToJsonString()) + return +} + +func (me *VpcService) DescribeCcnAttachedInstance(ctx context.Context, ccnId, + instanceRegion, instanceType, instanceId string) (info CcnAttachedInstanceInfo, has int, errRet error) { + + infos, err := me.DescribeCcnAttachedInstances(ctx, ccnId) + + if err != nil { + errRet = err + return + } + + for _, item := range infos { + if item.instanceId == instanceId && + item.instanceRegion == instanceRegion && + strings.EqualFold(item.instanceType, instanceType) { + has = 1 + info = item + return + } + } + return +} + +func (me *VpcService) DescribeCcnAttachedInstances(ctx context.Context, ccnId string) (infos []CcnAttachedInstanceInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeCcnAttachedInstancesRequest() + request.CcnId = &ccnId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeCcnAttachedInstances(request) + + defer func() { + if errRet != nil { + responseStr := "" + if response != nil { + responseStr = response.ToJsonString() + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + responseStr, + errRet.Error()) + } + }() + + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + response.ToJsonString()) + + infos = make([]CcnAttachedInstanceInfo, 0, len(response.Response.InstanceSet)) + + for _, item := range response.Response.InstanceSet { + + var info CcnAttachedInstanceInfo + + info.attachedTime = *item.AttachedTime + info.cidrBlock = make([]string, 0, len(item.CidrBlock)) + + for _, v := range item.CidrBlock { + info.cidrBlock = append(info.cidrBlock, *v) + } + + info.ccnId = ccnId + info.instanceId = *item.InstanceId + info.instanceRegion = *item.InstanceRegion + info.instanceType = *item.InstanceType + info.state = *item.State + info.description = *item.Description + infos = append(infos, info) + } + return +} + +func (me *VpcService) DescribeCcnAttachmentsByInstance(ctx context.Context, instanceType string, instanceId string, instanceRegion string) (infos []vpc.CcnAttachedInstance, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeCcnAttachedInstancesRequest() + request.Filters = make([]*vpc.Filter, 0, 3) + request.Filters = append(request.Filters, &vpc.Filter{Name: helper.String("instance-type"), Values: []*string{&instanceType}}) + request.Filters = append(request.Filters, &vpc.Filter{Name: helper.String("instance-id"), Values: []*string{&instanceId}}) + request.Filters = append(request.Filters, &vpc.Filter{Name: helper.String("instance-region"), Values: []*string{&instanceRegion}}) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeCcnAttachedInstances(request) + + defer func() { + if errRet != nil { + responseStr := "" + if response != nil { + responseStr = response.ToJsonString() + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + responseStr, + errRet.Error()) + } + }() + + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + response.ToJsonString()) + + infos = make([]vpc.CcnAttachedInstance, 0, len(response.Response.InstanceSet)) + + for _, item := range response.Response.InstanceSet { + infos = append(infos, *item) + } + return +} + +func (me *VpcService) AttachCcnInstances(ctx context.Context, ccnId, instanceRegion, instanceType, instanceId string, ccnUin string, description string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewAttachCcnInstancesRequest() + request.CcnId = &ccnId + + if ccnUin != "" { + request.CcnUin = &ccnUin + } + + var ccnInstance vpc.CcnInstance + ccnInstance.InstanceId = &instanceId + ccnInstance.InstanceRegion = &instanceRegion + ccnInstance.InstanceType = &instanceType + if description != "" { + ccnInstance.Description = &description + } + + request.Instances = []*vpc.CcnInstance{&ccnInstance} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().AttachCcnInstances(request) + + defer func() { + if errRet != nil { + responseStr := "" + if response != nil { + responseStr = response.ToJsonString() + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + responseStr, + errRet.Error()) + } + }() + + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + response.ToJsonString()) + return +} + +func (me *VpcService) DetachCcnInstances(ctx context.Context, ccnId, instanceRegion, instanceType, instanceId string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDetachCcnInstancesRequest() + request.CcnId = &ccnId + + var ccnInstance vpc.CcnInstance + ccnInstance.InstanceId = &instanceId + ccnInstance.InstanceRegion = &instanceRegion + ccnInstance.InstanceType = &instanceType + + request.Instances = []*vpc.CcnInstance{&ccnInstance} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DetachCcnInstances(request) + + defer func() { + if errRet != nil { + responseStr := "" + if response != nil { + responseStr = response.ToJsonString() + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + responseStr, + errRet.Error()) + } + }() + + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + response.ToJsonString()) + return + +} + +func (me *VpcService) DescribeCcnRegionBandwidthLimit(ctx context.Context, ccnId, + region string) (bandwidth int64, errRet error) { + + infos, err := me.DescribeCcnRegionBandwidthLimits(ctx, ccnId) + if err != nil { + errRet = err + return + } + for _, v := range infos { + if v.region == region { + bandwidth = v.limit + break + } + } + return +} + +func (me *VpcService) GetCcnRegionBandwidthLimit(ctx context.Context, ccnId, + region, dstRegion, limitType string) (int64, error) { + infos, err := me.GetCcnRegionBandwidthLimits(ctx, ccnId) + if err != nil { + return 0, err + } + for _, v := range infos { + if v.Region != nil { + switch limitType { + case OuterRegionLimit: + if *v.Region == region { + return int64(*v.BandwidthLimit), nil + } + case InterRegionLimit: + if v.DstRegion != nil && *v.DstRegion == dstRegion && *v.Region == region { + return int64(*v.BandwidthLimit), nil + } + default: + return 0, fmt.Errorf("unknown type of band with limit type") + } + } + } + return 0, nil +} + +func (me *VpcService) GetCcnRegionBandwidthLimits(ctx context.Context, + ccnID string) (infos []vpc.CcnRegionBandwidthLimit, errRet error) { + var ( + request = vpc.NewGetCcnRegionBandwidthLimitsRequest() + response *vpc.GetCcnRegionBandwidthLimitsResponse + err error + limit uint64 = 100 + offset uint64 = 0 + ) + request.CcnId = &ccnID + request.Limit = &limit + request.Offset = &offset + + ratelimit.Check(request.GetAction()) + for { + response, err = me.client.UseVpcClient().GetCcnRegionBandwidthLimits(request) + if err != nil { + errRet = err + return + } + if response.Response == nil || response.Response.CcnBandwidthSet == nil { + errRet = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) + return + } + + for _, item := range response.Response.CcnBandwidthSet { + if item.CcnRegionBandwidthLimit != nil { + infos = append(infos, *item.CcnRegionBandwidthLimit) + } + } + if len(response.Response.CcnBandwidthSet) < int(limit) { + break + } + offset += limit + } + return +} + +func (me *VpcService) SetCcnRegionBandwidthLimits(ctx context.Context, ccnId, region, dstRegion string, + bandwidth int64, setFlag bool) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewSetCcnRegionBandwidthLimitsRequest() + request.CcnId = &ccnId + + var uint64bandwidth = uint64(bandwidth) + var ccnRegionBandwidthLimit vpc.CcnRegionBandwidthLimit + ccnRegionBandwidthLimit.BandwidthLimit = &uint64bandwidth + ccnRegionBandwidthLimit.Region = ®ion + if dstRegion != "" { + ccnRegionBandwidthLimit.DstRegion = &dstRegion + } + + request.CcnRegionBandwidthLimits = []*vpc.CcnRegionBandwidthLimit{&ccnRegionBandwidthLimit} + + request.SetDefaultLimitFlag = helper.Bool(setFlag) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().SetCcnRegionBandwidthLimits(request) + + defer func() { + if errRet != nil { + responseStr := "" + if response != nil { + responseStr = response.ToJsonString() + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + responseStr, + errRet.Error()) + } + }() + + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, + request.GetAction(), + request.ToJsonString(), + response.ToJsonString()) + return +} + +func (me *VpcService) ModifyCcnRegionBandwidthLimitsType(ctx context.Context, ccnID, limitType string) error { + request := vpc.NewModifyCcnRegionBandwidthLimitsTypeRequest() + request.CcnId = &ccnID + request.BandwidthLimitType = &limitType + _, err := me.client.UseVpcClient().ModifyCcnRegionBandwidthLimitsType(request) + if err != nil { + return err + } + return nil +} diff --git a/tencentcloud/services/ccn/service_tencentcloud_tag.go b/tencentcloud/services/ccn/service_tencentcloud_tag.go new file mode 100644 index 0000000000..562bcc2432 --- /dev/null +++ b/tencentcloud/services/ccn/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package ccn + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 +} diff --git a/tencentcloud/services/ccn/service_tencentcloud_vpc.go b/tencentcloud/services/ccn/service_tencentcloud_vpc.go new file mode 100644 index 0000000000..2eaa34905a --- /dev/null +++ b/tencentcloud/services/ccn/service_tencentcloud_vpc.go @@ -0,0 +1,8075 @@ +package ccn + +import ( + "context" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "log" + "net" + "regexp" + "strconv" + "strings" + "sync" + "time" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +var eipUnattachLocker = &sync.Mutex{} + +/* For Adun Sake please DO NOT Declare the redundant Type STRUCT!! */ +// VPC basic information +type VpcBasicInfo struct { + vpcId string + name string + cidr string + isMulticast bool + isDefault bool + dnsServers []string + createTime string + tags []*vpc.Tag + assistantCidrs []string + dockerAssistantCidrs []string +} + +// subnet basic information +type VpcSubnetBasicInfo struct { + vpcId string + subnetId string + routeTableId string + name string + cidr string + isMulticast bool + isDefault bool + zone string + availableIpCount int64 + createTime string +} + +// route entry basic information +type VpcRouteEntryBasicInfo struct { + routeEntryId int64 + destinationCidr string + nextType string + nextBub string + description string + entryType string + enabled bool +} + +// route table basic information +type VpcRouteTableBasicInfo struct { + routeTableId string + name string + vpcId string + isDefault bool + subnetIds []string + entryInfos []VpcRouteEntryBasicInfo + createTime string +} + +type VpcSecurityGroupLiteRule struct { + action string + cidrIp string + port string + protocol string + addressId string + addressGroupId string + securityGroupId string + protocolTemplateId string + protocolTemplateGroupId string +} + +var securityGroupIdRE = regexp.MustCompile(`^sg-\w{8}$`) +var ipAddressIdRE = regexp.MustCompile(`^ipm-\w{8}$`) +var ipAddressGroupIdRE = regexp.MustCompile(`^ipmg-\w{8}$`) +var protocolTemplateRE = regexp.MustCompile(`^ppmg?-\w{8}$`) +var protocolTemplateIdRE = regexp.MustCompile(`^ppm-\w{8}$`) +var protocolTemplateGroupIdRE = regexp.MustCompile(`^ppmg-\w{8}$`) +var portRE = regexp.MustCompile(`^(\d{1,5},)*\d{1,5}$|^\d{1,5}-\d{1,5}$`) + +// acl rule +type VpcACLRule struct { + action string + cidrIp string + port string + protocol string +} + +type VpcEniIP struct { + ip net.IP + primary bool + desc *string +} + +func (rule VpcSecurityGroupLiteRule) String() string { + + var source string + + if rule.cidrIp != "" { + source = rule.cidrIp + } + if rule.securityGroupId != "" { + source = rule.securityGroupId + } + if rule.addressId != "" { + source = rule.addressId + } + if rule.addressGroupId != "" { + source = rule.addressGroupId + } + + protocol := rule.protocol + + if protocol == "" && rule.protocolTemplateId != "" { + protocol = rule.protocolTemplateId + } else if protocol == "" && rule.protocolTemplateGroupId != "" { + protocol = rule.protocolTemplateGroupId + } + + return fmt.Sprintf("%s#%s#%s#%s", rule.action, source, rule.port, protocol) +} + +func getSecurityGroupPolicies(rules []VpcSecurityGroupLiteRule) []*vpc.SecurityGroupPolicy { + policies := make([]*vpc.SecurityGroupPolicy, 0) + + for i := range rules { + rule := rules[i] + policy := &vpc.SecurityGroupPolicy{ + Action: &rule.action, + } + + if rule.securityGroupId != "" { + policy.SecurityGroupId = &rule.securityGroupId + } else if rule.addressId != "" || rule.addressGroupId != "" { + policy.AddressTemplate = &vpc.AddressTemplateSpecification{} + if rule.addressId != "" { + policy.AddressTemplate.AddressId = &rule.addressId + } + if rule.addressGroupId != "" { + policy.AddressTemplate.AddressGroupId = &rule.addressGroupId + } + } else { + policy.CidrBlock = &rule.cidrIp + } + + usingProtocolTemplate := rule.protocolTemplateId != "" || rule.protocolTemplateGroupId != "" + + if usingProtocolTemplate { + policy.ServiceTemplate = &vpc.ServiceTemplateSpecification{} + if rule.protocolTemplateId != "" { + policy.ServiceTemplate.ServiceId = &rule.protocolTemplateId + } + if rule.protocolTemplateGroupId != "" { + policy.ServiceTemplate.ServiceGroupId = &rule.protocolTemplateGroupId + } + } + + if !usingProtocolTemplate { + policy.Protocol = &rule.protocol + } + + if !usingProtocolTemplate && rule.port != "" { + policy.Port = &rule.port + } + + policies = append(policies, policy) + } + return policies +} + +func NewVpcService(client *connectivity.TencentCloudClient) VpcService { + return VpcService{client: client} +} + +type VpcService struct { + client *connectivity.TencentCloudClient +} + +// ///////common +func (me *VpcService) fillFilter(ins []*vpc.Filter, key, value string) (outs []*vpc.Filter) { + if ins == nil { + ins = make([]*vpc.Filter, 0, 2) + } + + var filter = vpc.Filter{Name: &key, Values: []*string{&value}} + ins = append(ins, &filter) + outs = ins + return +} + +// ////////api +func (me *VpcService) CreateVpc(ctx context.Context, name, cidr string, + isMulticast bool, dnsServers []string, tags map[string]string) (vpcId string, isDefault bool, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateVpcRequest() + 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()) + } + }() + + request.VpcName = &name + request.CidrBlock = &cidr + + var enableMulticast = map[bool]string{true: "true", false: "false"}[isMulticast] + request.EnableMulticast = &enableMulticast + + if len(dnsServers) > 0 { + request.DnsServers = make([]*string, 0, len(dnsServers)) + for index := range dnsServers { + request.DnsServers = append(request.DnsServers, &dnsServers[index]) + } + } + + if len(tags) > 0 { + for tagKey, tagValue := range tags { + tag := vpc.Tag{ + Key: helper.String(tagKey), + Value: helper.String(tagValue), + } + request.Tags = append(request.Tags, &tag) + } + } + + var response *vpc.CreateVpcResponse + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseVpcClient().CreateVpc(request) + if err != nil { + return tccommon.RetryError(err) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s create vpc failed, reason: %v", logId, err) + errRet = err + return + } + vpcId, isDefault = *response.Response.Vpc.VpcId, *response.Response.Vpc.IsDefault + return +} + +func (me *VpcService) DescribeVpc(ctx context.Context, + vpcId string, + tagKey string, + cidrBlock string) (info VpcBasicInfo, has int, errRet error) { + infos, err := me.DescribeVpcs(ctx, vpcId, "", nil, nil, tagKey, cidrBlock) + if err != nil { + errRet = err + return + } + has = len(infos) + if has > 0 { + info = infos[0] + } + return +} + +func (me *VpcService) DescribeVpcs(ctx context.Context, + vpcId, name string, + tags map[string]string, + isDefaultPtr *bool, + tagKey string, + cidrBlock string) (infos []VpcBasicInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeVpcsRequest() + 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()) + } + }() + + infos = make([]VpcBasicInfo, 0, 100) + + var ( + offset = 0 + limit = 100 + total = -1 + hasVpc = map[string]bool{} + filters []*vpc.Filter + ) + + if vpcId != "" { + filters = me.fillFilter(filters, "vpc-id", vpcId) + } + + if name != "" { + filters = me.fillFilter(filters, "vpc-name", name) + } + + if tagKey != "" { + filters = me.fillFilter(filters, "tag-key", tagKey) + } + + if cidrBlock != "" { + filters = me.fillFilter(filters, "cidr-block", cidrBlock) + } + + if isDefaultPtr != nil { + filters = me.fillFilter(filters, "is-default", map[bool]string{true: "true", false: "false"}[*isDefaultPtr]) + } + + for k, v := range tags { + filters = me.fillFilter(filters, "tag:"+k, v) + } + + if len(filters) > 0 { + request.Filters = filters + } + +getMoreData: + + if total >= 0 { + if offset >= total { + return + } + } + var strLimit = fmt.Sprintf("%d", limit) + request.Limit = &strLimit + + var strOffset = fmt.Sprintf("%d", offset) + request.Offset = &strOffset + var response *vpc.DescribeVpcsResponse + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseVpcClient().DescribeVpcs(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s read vpc failed, reason: %v", logId, err) + return nil, err + } + + if total < 0 { + total = int(*response.Response.TotalCount) + } + + if len(response.Response.VpcSet) > 0 { + offset += limit + } else { + // get empty VpcInfo, we're done + return + } + for _, item := range response.Response.VpcSet { + var basicInfo VpcBasicInfo + basicInfo.cidr = *item.CidrBlock + basicInfo.createTime = *item.CreatedTime + basicInfo.dnsServers = make([]string, 0, len(item.DnsServerSet)) + + for _, v := range item.DnsServerSet { + basicInfo.dnsServers = append(basicInfo.dnsServers, *v) + } + basicInfo.isDefault = *item.IsDefault + basicInfo.isMulticast = *item.EnableMulticast + basicInfo.name = *item.VpcName + basicInfo.vpcId = *item.VpcId + + if hasVpc[basicInfo.vpcId] { + errRet = fmt.Errorf("get repeated vpc_id[%s] when doing DescribeVpcs", basicInfo.vpcId) + return + } + hasVpc[basicInfo.vpcId] = true + + if len(item.AssistantCidrSet) > 0 { + for i := range item.AssistantCidrSet { + kind := item.AssistantCidrSet[i].AssistantType + cidr := item.AssistantCidrSet[i].CidrBlock + if kind != nil && *kind == 0 { + basicInfo.assistantCidrs = append(basicInfo.assistantCidrs, *cidr) + } else { + basicInfo.dockerAssistantCidrs = append(basicInfo.dockerAssistantCidrs, *cidr) + } + } + } + + if len(item.TagSet) > 0 { + basicInfo.tags = item.TagSet + } + + infos = append(infos, basicInfo) + } + goto getMoreData + +} +func (me *VpcService) DescribeSubnet(ctx context.Context, + subnetId string, + isRemoteVpcSNAT *bool, + tagKey, + cidrBlock string) (info VpcSubnetBasicInfo, has int, errRet error) { + infos, err := me.DescribeSubnets(ctx, subnetId, "", "", "", nil, nil, isRemoteVpcSNAT, tagKey, cidrBlock) + if err != nil { + errRet = err + return + } + has = len(infos) + if has > 0 { + info = infos[0] + } + return +} + +func (me *VpcService) DescribeSubnets(ctx context.Context, + subnetId, + vpcId, + subnetName, + zone string, + tags map[string]string, + isDefaultPtr *bool, + isRemoteVpcSNAT *bool, + tagKey, + cidrBlock string) (infos []VpcSubnetBasicInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeSubnetsRequest() + 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()) + } + }() + + var ( + offset = 0 + limit = 100 + total = -1 + hasSubnet = map[string]bool{} + filters []*vpc.Filter + ) + + if subnetId != "" { + filters = me.fillFilter(filters, "subnet-id", subnetId) + } + if vpcId != "" { + filters = me.fillFilter(filters, "vpc-id", vpcId) + } + if subnetName != "" { + filters = me.fillFilter(filters, "subnet-name", subnetName) + } + if zone != "" { + filters = me.fillFilter(filters, "zone", zone) + } + + if isDefaultPtr != nil { + filters = me.fillFilter(filters, "is-default", map[bool]string{true: "true", false: "false"}[*isDefaultPtr]) + } + + if isRemoteVpcSNAT != nil { + filters = me.fillFilter(filters, "is-remote-vpc-snat", map[bool]string{true: "true", false: "false"}[*isRemoteVpcSNAT]) + } + + if tagKey != "" { + filters = me.fillFilter(filters, "tag-key", tagKey) + } + if cidrBlock != "" { + filters = me.fillFilter(filters, "cidr-block", cidrBlock) + } + + for k, v := range tags { + filters = me.fillFilter(filters, "tag:"+k, v) + } + + if len(filters) > 0 { + request.Filters = filters + } + +getMoreData: + if total >= 0 { + if offset >= total { + return + } + } + var strLimit = fmt.Sprintf("%d", limit) + request.Limit = &strLimit + + var strOffset = fmt.Sprintf("%d", offset) + request.Offset = &strOffset + var response *vpc.DescribeSubnetsResponse + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseVpcClient().DescribeSubnets(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s read subnets failed, reason: %v", logId, err) + return nil, err + } + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if total < 0 { + total = int(*response.Response.TotalCount) + } + + if len(response.Response.SubnetSet) > 0 { + offset += limit + } else { + // get empty subnet, we're done + return + } + for _, item := range response.Response.SubnetSet { + var basicInfo VpcSubnetBasicInfo + + basicInfo.cidr = *item.CidrBlock + basicInfo.createTime = *item.CreatedTime + basicInfo.vpcId = *item.VpcId + basicInfo.subnetId = *item.SubnetId + basicInfo.routeTableId = *item.RouteTableId + + basicInfo.name = *item.SubnetName + basicInfo.isDefault = *item.IsDefault + basicInfo.isMulticast = *item.EnableBroadcast + + basicInfo.zone = *item.Zone + basicInfo.availableIpCount = int64(*item.AvailableIpAddressCount) + + if hasSubnet[basicInfo.subnetId] { + errRet = fmt.Errorf("get repeated subnetId[%s] when doing DescribeSubnets", basicInfo.subnetId) + return + } + hasSubnet[basicInfo.subnetId] = true + infos = append(infos, basicInfo) + } + goto getMoreData +} + +func (me *VpcService) ModifyVpcAttribute(ctx context.Context, vpcId, name string, isMulticast bool, dnsServers []string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyVpcAttributeRequest() + 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()) + } + }() + + request.VpcId = &vpcId + request.VpcName = &name + + if len(dnsServers) > 0 { + request.DnsServers = make([]*string, 0, len(dnsServers)) + for index := range dnsServers { + request.DnsServers = append(request.DnsServers, &dnsServers[index]) + } + } + var enableMulticast = map[bool]string{true: "true", false: "false"}[isMulticast] + request.EnableMulticast = &enableMulticast + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().ModifyVpcAttribute(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s modify vpc failed, reason: %v", logId, err) + return err + } + + return +} + +func (me *VpcService) DeleteVpc(ctx context.Context, vpcId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteVpcRequest() + 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()) + } + }() + if vpcId == "" { + errRet = fmt.Errorf("DeleteVpc can not delete empty vpc_id.") + return + } + + request.VpcId = &vpcId + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().DeleteVpc(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete vpc failed, reason: %v", logId, err) + return err + } + return + +} + +func (me *VpcService) CreateSubnet(ctx context.Context, vpcId, name, cidr, zone string, tags map[string]string) (subnetId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateSubnetRequest() + 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()) + } + }() + + if vpcId == "" { + errRet = fmt.Errorf("CreateSubnet can not invoke by empty vpc_id.") + return + } + request.VpcId = &vpcId + request.SubnetName = &name + request.CidrBlock = &cidr + request.Zone = &zone + + if len(tags) > 0 { + for tagKey, tagValue := range tags { + tag := vpc.Tag{ + Key: helper.String(tagKey), + Value: helper.String(tagValue), + } + request.Tags = append(request.Tags, &tag) + } + } + + var response *vpc.CreateSubnetResponse + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseVpcClient().CreateSubnet(request) + if err != nil { + return tccommon.RetryError(err) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s create subnet failed, reason: %v", logId, err) + return "", err + } + + subnetId = *response.Response.Subnet.SubnetId + + return +} + +func (me *VpcService) ModifySubnetAttribute(ctx context.Context, subnetId, name string, isMulticast bool) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifySubnetAttributeRequest() + 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()) + } + }() + + var enableMulticast = map[bool]string{true: "true", false: "false"}[isMulticast] + + request.SubnetId = &subnetId + request.SubnetName = &name + request.EnableBroadcast = &enableMulticast + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().ModifySubnetAttribute(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s modify subnet failed, reason: %v", logId, err) + return err + } + return +} + +func (me *VpcService) DeleteSubnet(ctx context.Context, subnetId string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteSubnetRequest() + 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()) + } + }() + request.SubnetId = &subnetId + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().DeleteSubnet(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete subnet failed, reason: %v", logId, err) + return err + } + return + +} + +func (me *VpcService) ReplaceRouteTableAssociation(ctx context.Context, subnetId string, routeTableId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewReplaceRouteTableAssociationRequest() + 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()) + } + }() + request.SubnetId = &subnetId + request.RouteTableId = &routeTableId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().ReplaceRouteTableAssociation(request) + + errRet = err + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + return +} + +func (me *VpcService) IsRouteTableInVpc(ctx context.Context, routeTableId, vpcId string) (info VpcRouteTableBasicInfo, has int, errRet error) { + + infos, err := me.DescribeRouteTables(ctx, routeTableId, "", vpcId, nil, nil, "") + if err != nil { + errRet = err + return + } + has = len(infos) + if has > 0 { + info = infos[0] + } + return + +} + +func (me *VpcService) DescribeRouteTable(ctx context.Context, routeTableId string) (info VpcRouteTableBasicInfo, has int, errRet error) { + + infos, err := me.DescribeRouteTables(ctx, routeTableId, "", "", nil, nil, "") + if err != nil { + errRet = err + return + } + + has = len(infos) + + if has == 0 { + return + } + info = infos[0] + return +} +func (me *VpcService) DescribeRouteTables(ctx context.Context, + routeTableId, + routeTableName, + vpcId string, + tags map[string]string, + associationMain *bool, + tagKey string) (infos []VpcRouteTableBasicInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeRouteTablesRequest() + 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()) + } + }() + + infos = make([]VpcRouteTableBasicInfo, 0, 100) + var offset = 0 + var limit = 100 + var total = -1 + var hasTableMap = map[string]bool{} + + var filters []*vpc.Filter + if routeTableId != "" { + filters = me.fillFilter(filters, "route-table-id", routeTableId) + } + if vpcId != "" { + filters = me.fillFilter(filters, "vpc-id", vpcId) + } + if routeTableName != "" { + filters = me.fillFilter(filters, "route-table-name", routeTableName) + } + if associationMain != nil { + filters = me.fillFilter(filters, "association.main", map[bool]string{true: "true", false: "false"}[*associationMain]) + } + if tagKey != "" { + filters = me.fillFilter(filters, "tag-key", tagKey) + } + for k, v := range tags { + filters = me.fillFilter(filters, "tag:"+k, v) + } + if len(filters) > 0 { + request.Filters = filters + } + +getMoreData: + if total >= 0 { + if offset >= total { + return + } + } + var strLimit = fmt.Sprintf("%d", limit) + request.Limit = &strLimit + + var strOffset = fmt.Sprintf("%d", offset) + request.Offset = &strOffset + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeRouteTables(request) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if total < 0 { + total = int(*response.Response.TotalCount) + } + + if len(response.Response.RouteTableSet) > 0 { + offset += limit + } else { + // get empty Vpcinfo, we're done + return + } + for _, item := range response.Response.RouteTableSet { + var basicInfo VpcRouteTableBasicInfo + basicInfo.createTime = *item.CreatedTime + basicInfo.isDefault = *item.Main + basicInfo.name = *item.RouteTableName + basicInfo.routeTableId = *item.RouteTableId + basicInfo.vpcId = *item.VpcId + + basicInfo.subnetIds = make([]string, 0, len(item.AssociationSet)) + for _, v := range item.AssociationSet { + basicInfo.subnetIds = append(basicInfo.subnetIds, *v.SubnetId) + } + + basicInfo.entryInfos = make([]VpcRouteEntryBasicInfo, 0, len(item.RouteSet)) + + for _, v := range item.RouteSet { + var entry VpcRouteEntryBasicInfo + entry.destinationCidr = *v.DestinationCidrBlock + entry.nextBub = *v.GatewayId + entry.nextType = *v.GatewayType + entry.description = *v.RouteDescription + entry.routeEntryId = int64(*v.RouteId) + entry.entryType = *v.RouteType + entry.enabled = *v.Enabled + basicInfo.entryInfos = append(basicInfo.entryInfos, entry) + } + if hasTableMap[basicInfo.routeTableId] { + errRet = fmt.Errorf("get repeated route_table_id[%s] when doing DescribeRouteTables", basicInfo.routeTableId) + return + } + hasTableMap[basicInfo.routeTableId] = true + infos = append(infos, basicInfo) + } + goto getMoreData + +} + +func (me *VpcService) CreateRouteTable(ctx context.Context, name, vpcId string, tags map[string]string) (routeTableId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateRouteTableRequest() + 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()) + } + }() + + if vpcId == "" { + errRet = fmt.Errorf("CreateRouteTable can not invoke by empty vpc_id.") + return + } + request.VpcId = &vpcId + request.RouteTableName = &name + if len(tags) > 0 { + for tagKey, tagValue := range tags { + tag := vpc.Tag{ + Key: helper.String(tagKey), + Value: helper.String(tagValue), + } + request.Tags = append(request.Tags, &tag) + } + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().CreateRouteTable(request) + errRet = err + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + routeTableId = *response.Response.RouteTable.RouteTableId + } + return +} + +func (me *VpcService) DeleteRouteTable(ctx context.Context, routeTableId string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteRouteTableRequest() + 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()) + } + }() + + if routeTableId == "" { + errRet = fmt.Errorf("DeleteRouteTable can not invoke by empty routeTableId.") + return + } + request.RouteTableId = &routeTableId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DeleteRouteTable(request) + errRet = err + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + + return +} + +func (me *VpcService) ModifyRouteTableAttribute(ctx context.Context, routeTableId string, name string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyRouteTableAttributeRequest() + 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()) + } + }() + + if routeTableId == "" { + errRet = fmt.Errorf("ModifyRouteTableAttribute can not invoke by empty routeTableId.") + return + } + request.RouteTableId = &routeTableId + request.RouteTableName = &name + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().ModifyRouteTableAttribute(request) + errRet = err + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + + return +} + +func (me *VpcService) GetRouteId(ctx context.Context, + routeTableId, destinationCidrBlock, nextType, nextHub, description string) (entryId int64, errRet error) { + + logId := tccommon.GetLogId(ctx) + + info, has, err := me.DescribeRouteTable(ctx, routeTableId) + if err != nil { + errRet = err + return + } + if has == 0 { + errRet = fmt.Errorf("not fonud the route table of this route entry") + return + } + + if has != 1 { + errRet = fmt.Errorf("one routeTableId id get %d routeTableId infos", has) + return + } + + for _, v := range info.entryInfos { + + if v.destinationCidr == destinationCidrBlock && v.nextType == nextType && v.nextBub == nextHub { + entryId = v.routeEntryId + return + } + } + errRet = fmt.Errorf("not found route entry id from route table [%s]", routeTableId) + + for _, v := range info.entryInfos { + log.Printf("%s[WARN] GetRouteId [%+v] vs [%+v],[%+v] vs [%+v],[%+v] vs [%+v] %+v\n", + logId, + v.destinationCidr, + destinationCidrBlock, + v.nextType, + nextType, + v.nextBub, + nextHub, + v.destinationCidr == destinationCidrBlock && v.nextType == nextType && v.nextBub == nextHub) + } + + return + +} + +func (me *VpcService) DeleteRoutes(ctx context.Context, routeTableId string, entryId uint64) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteRoutesRequest() + 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()) + } + }() + + if routeTableId == "" { + errRet = fmt.Errorf("DeleteRoutes can not invoke by empty routeTableId.") + return + } + + request.RouteTableId = &routeTableId + var route vpc.Route + route.RouteId = &entryId + request.Routes = []*vpc.Route{&route} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DeleteRoutes(request) + errRet = err + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + return +} + +func (me *VpcService) CreateRoutes(ctx context.Context, + routeTableId, destinationCidrBlock, nextType, nextHub, description string, enabled bool) (entryId int64, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateRoutesRequest() + 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()) + } + }() + + if routeTableId == "" { + errRet = fmt.Errorf("CreateRoutes can not invoke by empty routeTableId.") + return + } + request.RouteTableId = &routeTableId + var route vpc.Route + route.DestinationCidrBlock = &destinationCidrBlock + route.RouteDescription = &description + route.GatewayType = &nextType + route.GatewayId = &nextHub + route.Enabled = &enabled + request.Routes = []*vpc.Route{&route} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().CreateRoutes(request) + errRet = err + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } else { + return + } + + entryId, errRet = me.GetRouteId(ctx, routeTableId, destinationCidrBlock, nextType, nextHub, description) + + if errRet != nil { + time.Sleep(3 * time.Second) + entryId, errRet = me.GetRouteId(ctx, routeTableId, destinationCidrBlock, nextType, nextHub, description) + } + + if errRet != nil { + time.Sleep(5 * time.Second) + entryId, errRet = me.GetRouteId(ctx, routeTableId, destinationCidrBlock, nextType, nextHub, description) + } + + /* + if *(response.Response.TotalCount) != 1 { + errRet = fmt.Errorf("CreateRoutes return %d routeTable . but we only request 1.", *response.Response.TotalCount) + return + } + + if len(response.Response.RouteTableSet) != 1 { + errRet = fmt.Errorf("CreateRoutes return %d routeTable info . but we only request 1.", len(response.Response.RouteTableSet)) + return + } + + if len(response.Response.RouteTableSet[0].RouteSet) != 1 { + errRet = fmt.Errorf("CreateRoutes return %d routeTableSet info . but we only create 1.", len(response.Response.RouteTableSet[0].RouteSet)) + return + } + + entryId = int64(*response.Response.RouteTableSet[0].RouteSet[0].RouteId) + */ + + return +} + +func (me *VpcService) SwitchRouteEnabled(ctx context.Context, routeTableId string, routeId uint64, enabled bool) error { + if enabled { + request := vpc.NewEnableRoutesRequest() + request.RouteTableId = &routeTableId + request.RouteIds = []*uint64{&routeId} + return me.EnableRoutes(ctx, request) + } else { + request := vpc.NewDisableRoutesRequest() + request.RouteTableId = &routeTableId + request.RouteIds = []*uint64{&routeId} + return me.DisableRoutes(ctx, request) + } +} + +func (me *VpcService) EnableRoutes(ctx context.Context, request *vpc.EnableRoutesRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().EnableRoutes(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 +} +func (me *VpcService) DisableRoutes(ctx context.Context, request *vpc.DisableRoutesRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().DisableRoutes(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 +} +func (me *VpcService) CreateSecurityGroup(ctx context.Context, name, desc string, projectId *int, tags map[string]string) (id string, err error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewCreateSecurityGroupRequest() + + request.GroupName = &name + request.GroupDescription = &desc + + if projectId != nil { + request.ProjectId = helper.String(strconv.Itoa(*projectId)) + } + + if len(tags) > 0 { + for tagKey, tagValue := range tags { + tag := vpc.Tag{ + Key: helper.String(tagKey), + Value: helper.String(tagValue), + } + request.Tags = append(request.Tags, &tag) + } + } + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().CreateSecurityGroup(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + if response.Response.SecurityGroup == nil || response.Response.SecurityGroup.SecurityGroupId == nil { + err := fmt.Errorf("api[%s] return security group id is nil", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + id = *response.Response.SecurityGroup.SecurityGroupId + return nil + }); err != nil { + log.Printf("[CRITAL]%s create security group failed, reason: %v", logId, err) + return "", err + } + + return +} + +func (me *VpcService) DescribeSecurityGroup(ctx context.Context, id string) (sg *vpc.SecurityGroup, err error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeSecurityGroupsRequest() + request.SecurityGroupIds = []*string{&id} + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeSecurityGroups(request) + if err != nil { + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if sdkError.Code == "ResourceNotFound" { + return nil + } + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err, tccommon.InternalError) + } + + if len(response.Response.SecurityGroupSet) == 0 { + return nil + } + + sg = response.Response.SecurityGroupSet[0] + + return nil + }); err != nil { + log.Printf("[CRITAL]%s read security group failed, reason: %v", logId, err) + return nil, err + } + + return +} + +func (me *VpcService) ModifySecurityGroup(ctx context.Context, id string, newName, newDesc *string) error { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewModifySecurityGroupAttributeRequest() + + request.SecurityGroupId = &id + request.GroupName = newName + request.GroupDescription = newDesc + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().ModifySecurityGroupAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s modify security group failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) DeleteSecurityGroup(ctx context.Context, id string) error { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteSecurityGroupRequest() + request.SecurityGroupId = &id + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseVpcClient().DeleteSecurityGroup(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete security group failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) DescribeSecurityGroupsAssociate(ctx context.Context, ids []string) ([]*vpc.SecurityGroupAssociationStatistics, error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeSecurityGroupAssociationStatisticsRequest() + request.SecurityGroupIds = common.StringPtrs(ids) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeSecurityGroupAssociationStatistics(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return nil, err + } + + return response.Response.SecurityGroupAssociationStatisticsSet, nil +} + +// Deprecated: the redundant type struct cause cause unnecessary mental burden, use sdk request directly +func (me *VpcService) CreateSecurityGroupPolicy(ctx context.Context, info securityGroupRuleBasicInfoWithPolicyIndex) (ruleId string, err error) { + logId := tccommon.GetLogId(ctx) + + createRequest := vpc.NewCreateSecurityGroupPoliciesRequest() + createRequest.SecurityGroupId = &info.SgId + + createRequest.SecurityGroupPolicySet = new(vpc.SecurityGroupPolicySet) + + policy := new(vpc.SecurityGroupPolicy) + + policy.CidrBlock = info.CidrIp + policy.SecurityGroupId = info.SourceSgId + policy.AddressTemplate = &vpc.AddressTemplateSpecification{} + if info.AddressTemplateId != nil && *info.AddressTemplateId != "" { + policy.AddressTemplate.AddressId = info.AddressTemplateId + } + if info.AddressTemplateGroupId != nil && *info.AddressTemplateGroupId != "" { + policy.AddressTemplate.AddressGroupId = info.AddressTemplateGroupId + } + + policy.ServiceTemplate = &vpc.ServiceTemplateSpecification{} + if info.ProtocolTemplateId != nil && *info.ProtocolTemplateId != "" { + policy.ServiceTemplate.ServiceId = info.ProtocolTemplateId + } + if info.ProtocolTemplateGroupId != nil && *info.ProtocolTemplateGroupId != "" { + policy.ServiceTemplate.ServiceGroupId = info.ProtocolTemplateGroupId + } + + if info.Protocol != nil { + policy.Protocol = common.StringPtr(strings.ToUpper(*info.Protocol)) + } + policy.PolicyIndex = helper.Int64(info.PolicyIndex) + policy.Port = info.PortRange + policy.PolicyDescription = info.Description + policy.Action = common.StringPtr(strings.ToUpper(info.Action)) + + switch strings.ToLower(info.PolicyType) { + case "ingress": + createRequest.SecurityGroupPolicySet.Ingress = []*vpc.SecurityGroupPolicy{policy} + + case "egress": + createRequest.SecurityGroupPolicySet.Egress = []*vpc.SecurityGroupPolicy{policy} + } + ratelimit.Check(createRequest.GetAction()) + if _, err := me.client.UseVpcClient().CreateSecurityGroupPolicies(createRequest); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, createRequest.GetAction(), createRequest.ToJsonString(), err) + return "", err + } + + if info.CidrIp == nil { + info.CidrIp = common.StringPtr("") + } + if info.Protocol == nil { + info.Protocol = common.StringPtr("ALL") + } + if info.PortRange == nil { + info.PortRange = common.StringPtr("ALL") + } + if info.SourceSgId == nil { + info.SourceSgId = common.StringPtr("") + } + + ruleId, err = buildSecurityGroupRuleId(info.securityGroupRuleBasicInfo) + if err != nil { + return "", fmt.Errorf("build rule id error, reason: %v", err) + } + + return ruleId, nil +} + +func (me *VpcService) CreateSecurityGroupPolicies(ctx context.Context, request *vpc.CreateSecurityGroupPoliciesRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().CreateSecurityGroupPolicies(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 +} + +// Deprecated: use DescribeSecurityGroupPolicies instead +func (me *VpcService) DescribeSecurityGroupPolicy(ctx context.Context, ruleId string) (sgId string, policyType string, policy *vpc.SecurityGroupPolicy, errRet error) { + logId := tccommon.GetLogId(ctx) + + info, err := parseSecurityGroupRuleId(ruleId) + if err != nil { + errRet = err + return + } + + request := vpc.NewDescribeSecurityGroupPoliciesRequest() + request.SecurityGroupId = &info.SgId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeSecurityGroupPolicies(request) + if err != nil { + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + // if security group does not exist, security group rule does not exist too + if sdkError.Code == "ResourceNotFound" { + return + } + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + + policySet := response.Response.SecurityGroupPolicySet + + if policySet == nil { + log.Printf("[DEBUG]%s policy set is nil", logId) + return + } + + var policies []*vpc.SecurityGroupPolicy + + switch strings.ToLower(info.PolicyType) { + case "ingress": + policies = policySet.Ingress + + case "egress": + policies = policySet.Egress + } + + for _, pl := range policies { + if comparePolicyAndSecurityGroupInfo(pl, info) { + policy = pl + break + } + } + + if policy == nil { + log.Printf("[DEBUG]%s can't find security group rule, maybe user modify rules on web console", logId) + return + } + + return info.SgId, info.PolicyType, policy, nil +} + +func (me *VpcService) DescribeSecurityGroupPolicies(ctx context.Context, sgId string) (result *vpc.SecurityGroupPolicySet, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeSecurityGroupPoliciesRequest() + 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()) + } + }() + request.SecurityGroupId = &sgId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeSecurityGroupPolicies(request) + + if err != nil { + errRet = err + return + } + + result = response.Response.SecurityGroupPolicySet + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *VpcService) DeleteSecurityGroupPolicy(ctx context.Context, ruleId string) error { + logId := tccommon.GetLogId(ctx) + + info, err := parseSecurityGroupRuleId(ruleId) + if err != nil { + return err + } + + request := vpc.NewDeleteSecurityGroupPoliciesRequest() + request.SecurityGroupId = &info.SgId + request.SecurityGroupPolicySet = new(vpc.SecurityGroupPolicySet) + + policy := new(vpc.SecurityGroupPolicy) + policy.Action = common.StringPtr(strings.ToUpper(info.Action)) + + if *info.CidrIp != "" { + policy.CidrBlock = info.CidrIp + } + + if *info.Protocol != "ALL" { + policy.Protocol = common.StringPtr(strings.ToUpper(*info.Protocol)) + } + + if *info.PortRange != "ALL" { + policy.Port = info.PortRange + } + + if *info.SourceSgId != "" { + policy.SecurityGroupId = info.SourceSgId + } + + if info.AddressTemplateGroupId != nil && *info.AddressTemplateGroupId != "" { + policy.AddressTemplate = &vpc.AddressTemplateSpecification{} + policy.AddressTemplate.AddressGroupId = info.AddressTemplateGroupId + } + + if info.AddressTemplateId != nil && *info.AddressTemplateId != "" { + policy.AddressTemplate = &vpc.AddressTemplateSpecification{} + policy.AddressTemplate.AddressId = info.AddressTemplateId + } + + if info.ProtocolTemplateGroupId != nil && *info.ProtocolTemplateGroupId != "" { + policy.ServiceTemplate = &vpc.ServiceTemplateSpecification{} + policy.ServiceTemplate.ServiceGroupId = info.ProtocolTemplateGroupId + } + + if info.ProtocolTemplateId != nil && *info.ProtocolTemplateId != "" { + policy.ServiceTemplate = &vpc.ServiceTemplateSpecification{} + policy.ServiceTemplate.ServiceId = info.ProtocolTemplateId + } + + if info.Description != nil && *info.Description != "" { + policy.PolicyDescription = info.Description + } + + switch strings.ToLower(info.PolicyType) { + case "ingress": + request.SecurityGroupPolicySet.Ingress = []*vpc.SecurityGroupPolicy{policy} + + case "egress": + request.SecurityGroupPolicySet.Egress = []*vpc.SecurityGroupPolicy{policy} + } + ratelimit.Check(request.GetAction()) + if _, err := me.client.UseVpcClient().DeleteSecurityGroupPolicies(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return err + } + + return nil +} + +func (me *VpcService) DeleteSecurityGroupPolicies(ctx context.Context, request *vpc.DeleteSecurityGroupPoliciesRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().DeleteSecurityGroupPolicies(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 +} + +func (me *VpcService) DeleteSecurityGroupPolicyByPolicyIndex(ctx context.Context, policyIndex int64, sgId, policyType string) error { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteSecurityGroupPoliciesRequest() + request.SecurityGroupId = helper.String(sgId) + request.SecurityGroupPolicySet = new(vpc.SecurityGroupPolicySet) + + policy := new(vpc.SecurityGroupPolicy) + policy.PolicyIndex = helper.Int64(policyIndex) + switch strings.ToLower(policyType) { + case "ingress": + request.SecurityGroupPolicySet.Ingress = []*vpc.SecurityGroupPolicy{policy} + + case "egress": + request.SecurityGroupPolicySet.Egress = []*vpc.SecurityGroupPolicy{policy} + } + ratelimit.Check(request.GetAction()) + if _, err := me.client.UseVpcClient().DeleteSecurityGroupPolicies(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return err + } + return nil + +} + +func (me *VpcService) DeleteSecurityGroupPolicyByPolicyIndexList(ctx context.Context, sgId string, policyIndexList []*int64, policyType string) error { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteSecurityGroupPoliciesRequest() + request.SecurityGroupId = helper.String(sgId) + request.SecurityGroupPolicySet = new(vpc.SecurityGroupPolicySet) + + tmpList := make([]*vpc.SecurityGroupPolicy, 0) + for _, v := range policyIndexList { + policy := new(vpc.SecurityGroupPolicy) + policy.PolicyIndex = v + tmpList = append(tmpList, policy) + } + + switch strings.ToLower(policyType) { + + case "ingress": + request.SecurityGroupPolicySet.Ingress = tmpList + + case "egress": + request.SecurityGroupPolicySet.Egress = tmpList + } + + ratelimit.Check(request.GetAction()) + if _, err := me.client.UseVpcClient().DeleteSecurityGroupPolicies(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return err + } + return nil + +} + +// Deprecated: Use ModifySecurityGroupPolicies instead +func (me *VpcService) ModifySecurityGroupPolicy(ctx context.Context, ruleId string, desc *string) error { + logId := tccommon.GetLogId(ctx) + + info, err := parseSecurityGroupRuleId(ruleId) + if err != nil { + return err + } + + request := vpc.NewReplaceSecurityGroupPolicyRequest() + request.SecurityGroupId = &info.SgId + request.SecurityGroupPolicySet = new(vpc.SecurityGroupPolicySet) + + policy := &vpc.SecurityGroupPolicy{ + Action: &info.Action, + CidrBlock: info.CidrIp, + Protocol: info.Protocol, + Port: info.PortRange, + SecurityGroupId: info.SourceSgId, + PolicyDescription: desc, + } + + switch info.PolicyType { + case "ingress": + request.SecurityGroupPolicySet.Ingress = []*vpc.SecurityGroupPolicy{policy} + + case "egress": + request.SecurityGroupPolicySet.Egress = []*vpc.SecurityGroupPolicy{policy} + } + ratelimit.Check(request.GetAction()) + if _, err := me.client.UseVpcClient().ReplaceSecurityGroupPolicy(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return err + } + + return nil +} + +func (me *VpcService) ModifySecurityGroupPolicies(ctx context.Context, request *vpc.ModifySecurityGroupPoliciesRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().ModifySecurityGroupPolicies(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 +} + +func (me *VpcService) DescribeSecurityGroups(ctx context.Context, sgId, sgName *string, projectId *int, tags map[string]string) (sgs []*vpc.SecurityGroup, err error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeSecurityGroupsRequest() + + if sgId != nil { + request.SecurityGroupIds = []*string{sgId} + } else { + if sgName != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("security-group-name"), + Values: []*string{sgName}, + }) + } + + if projectId != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("project-id"), + Values: []*string{helper.String(strconv.Itoa(*projectId))}, + }) + } + + for k, v := range tags { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("tag:" + k), + Values: []*string{helper.String(v)}, + }) + } + } + + request.Limit = helper.String(strconv.Itoa(DESCRIBE_SECURITY_GROUP_LIMIT)) + + offset := 0 + count := DESCRIBE_SECURITY_GROUP_LIMIT + // run loop at least once + for count == DESCRIBE_SECURITY_GROUP_LIMIT { + request.Offset = helper.String(strconv.Itoa(offset)) + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeSecurityGroups(request) + if err != nil { + count = 0 + + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if sdkError.Code == "ResourceNotFound" { + return nil + } + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err, tccommon.InternalError) + } + + set := response.Response.SecurityGroupSet + count = len(set) + sgs = append(sgs, set...) + + return nil + }); err != nil { + log.Printf("[CRITAL]%s read security groups failed, reason: %v", logId, err) + return nil, err + } + + offset += count + } + + return +} + +func (me *VpcService) modifyLiteRulesInSecurityGroup(ctx context.Context, sgId string, ingress, egress []VpcSecurityGroupLiteRule) error { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewModifySecurityGroupPoliciesRequest() + request.SecurityGroupId = &sgId + request.SecurityGroupPolicySet = new(vpc.SecurityGroupPolicySet) + request.SecurityGroupPolicySet.Egress = getSecurityGroupPolicies(egress) + request.SecurityGroupPolicySet.Ingress = getSecurityGroupPolicies(ingress) + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseVpcClient().ModifySecurityGroupPolicies(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }) +} + +func (me *VpcService) DeleteLiteRules(ctx context.Context, sgId string, rules []VpcSecurityGroupLiteRule, isIngress bool) error { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteSecurityGroupPoliciesRequest() + request.SecurityGroupId = &sgId + request.SecurityGroupPolicySet = new(vpc.SecurityGroupPolicySet) + + if isIngress { + request.SecurityGroupPolicySet.Ingress = getSecurityGroupPolicies(rules) + } else { + request.SecurityGroupPolicySet.Egress = getSecurityGroupPolicies(rules) + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseVpcClient().DeleteSecurityGroupPolicies(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + + return tccommon.RetryError(err) + } + + return nil + }) +} + +func (me *VpcService) AttachLiteRulesToSecurityGroup(ctx context.Context, sgId string, ingress, egress []VpcSecurityGroupLiteRule) error { + logId := tccommon.GetLogId(ctx) + + if err := me.modifyLiteRulesInSecurityGroup(ctx, sgId, ingress, egress); err != nil { + log.Printf("[CRITAL]%s attach lite rules to security group failed, reason: %v", logId, err) + + return err + } + + return nil +} + +func (me *VpcService) DescribeSecurityGroupPolices(ctx context.Context, sgId string) (ingress, egress []VpcSecurityGroupLiteRule, exist bool, err error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeSecurityGroupPoliciesRequest() + request.SecurityGroupId = &sgId + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeSecurityGroupPolicies(request) + if err != nil { + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if sdkError.Code == "ResourceNotFound" { + return nil + } + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + policySet := response.Response.SecurityGroupPolicySet + + for _, in := range policySet.Ingress { + if nilFields := tccommon.CheckNil(in, map[string]string{ + "Action": "action", + "SecurityGroupId": "nested security group id", + }); len(nilFields) > 0 { + err := fmt.Errorf("api[%s] security group ingress %v are nil", request.GetAction(), nilFields) + log.Printf("[CRITAL]%s %v", logId, err) + } + + liteRule := VpcSecurityGroupLiteRule{ + //protocol: strings.ToUpper(*in.Protocol), + //port: *in.Port, + cidrIp: *in.CidrBlock, + action: *in.Action, + securityGroupId: *in.SecurityGroupId, + } + + if in.Protocol != nil { + liteRule.protocol = strings.ToUpper(*in.Protocol) + } + + if in.Port != nil { + liteRule.port = *in.Port + } + + if in.AddressTemplate != nil { + liteRule.addressId = *in.AddressTemplate.AddressId + liteRule.addressGroupId = *in.AddressTemplate.AddressGroupId + } + + if in.ServiceTemplate != nil { + liteRule.protocolTemplateId = *in.ServiceTemplate.ServiceId + liteRule.protocolTemplateGroupId = *in.ServiceTemplate.ServiceGroupId + } + + ingress = append(ingress, liteRule) + } + + for _, eg := range policySet.Egress { + if nilFields := tccommon.CheckNil(eg, map[string]string{ + "Action": "action", + "SecurityGroupId": "nested security group id", + }); len(nilFields) > 0 { + err := fmt.Errorf("api[%s] security group egress %v are nil", request.GetAction(), nilFields) + log.Printf("[CRITAL]%s %v", logId, err) + } + + liteRule := VpcSecurityGroupLiteRule{ + action: *eg.Action, + cidrIp: *eg.CidrBlock, + securityGroupId: *eg.SecurityGroupId, + } + + if eg.Port != nil { + liteRule.port = *eg.Port + } + + if eg.Protocol != nil { + liteRule.protocol = strings.ToUpper(*eg.Protocol) + } + + if eg.AddressTemplate != nil { + liteRule.addressId = *eg.AddressTemplate.AddressId + liteRule.addressGroupId = *eg.AddressTemplate.AddressGroupId + } + + if eg.ServiceTemplate != nil { + liteRule.protocolTemplateId = *eg.ServiceTemplate.ServiceId + liteRule.protocolTemplateGroupId = *eg.ServiceTemplate.ServiceGroupId + } + + egress = append(egress, liteRule) + } + + exist = true + + return nil + }); err != nil { + log.Printf("[CRITAL]%s describe security group policies failed, rason: %v", logId, err) + return nil, nil, false, err + } + + return +} + +func (me *VpcService) DetachAllLiteRulesFromSecurityGroup(ctx context.Context, sgId string) error { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewModifySecurityGroupPoliciesRequest() + request.SecurityGroupId = &sgId + request.SecurityGroupPolicySet = &vpc.SecurityGroupPolicySet{ + Version: helper.String("0"), + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseVpcClient().ModifySecurityGroupPolicies(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }) +} + +type securityGroupRuleBasicInfo struct { + SgId string `json:"sg_id"` + PolicyType string `json:"policy_type"` + CidrIp *string `json:"cidr_ip,omitempty"` + Protocol *string `json:"protocol"` + PortRange *string `json:"port_range"` + Action string `json:"action"` + SourceSgId *string `json:"source_sg_id"` + Description *string `json:"description,omitempty"` + AddressTemplateId *string `json:"address_template_id,omitempty"` + AddressTemplateGroupId *string `json:"address_template_group_id,omitempty"` + ProtocolTemplateId *string `json:"protocol_template_id,omitempty"` + ProtocolTemplateGroupId *string `json:"protocol_template_group_id,omitempty"` +} + +type securityGroupRuleBasicInfoWithPolicyIndex struct { + securityGroupRuleBasicInfo + PolicyIndex int64 `json:"policy_index"` +} + +// Build an ID for a Security Group Rule (new version) +func buildSecurityGroupRuleId(info securityGroupRuleBasicInfo) (ruleId string, err error) { + b, err := json.Marshal(info) + if err != nil { + return "", err + } + + log.Printf("[DEBUG] build rule is %s", string(b)) + + return base64.StdEncoding.EncodeToString(b), nil +} + +// Parse Security Group Rule ID +func parseSecurityGroupRuleId(ruleId string) (info securityGroupRuleBasicInfo, errRet error) { + log.Printf("[DEBUG] parseSecurityGroupRuleId before: %v", ruleId) + + // new version ID + if b, err := base64.StdEncoding.DecodeString(ruleId); err == nil { + errRet = json.Unmarshal(b, &info) + return + } + + // old version ID + m := make(map[string]string) + ruleQueryStrings := strings.Split(ruleId, "&") + if len(ruleQueryStrings) == 0 { + errRet = errors.New("ruleId is invalid") + return + } + for _, str := range ruleQueryStrings { + arr := strings.Split(str, "=") + if len(arr) != 2 { + errRet = errors.New("ruleId is invalid") + return + } + m[arr[0]] = arr[1] + } + + info.SgId = m["sgId"] + info.PolicyType = m["direction"] + info.Action = m["action"] + + // the newest version include template + addressTemplateId, addressTemplateOk := m["address_template_id"] + addressGroupTemplateId, addressTemplateGroupOk := m["address_template_group_id"] + if addressTemplateOk || addressTemplateGroupOk { + if addressTemplateGroupOk { + info.AddressTemplateGroupId = common.StringPtr(addressGroupTemplateId) + } else { + info.AddressTemplateId = common.StringPtr(addressTemplateId) + } + info.CidrIp = common.StringPtr("") + info.SourceSgId = common.StringPtr("") + } else { + if m["sourceSgid"] == "" { + info.CidrIp = common.StringPtr(m["cidrIp"]) + } else { + info.CidrIp = common.StringPtr("") + } + info.SourceSgId = common.StringPtr(m["sourceSgid"]) + } + + protocolTemplateId, protocolTemplateOk := m["protocol_template_id"] + protocolGroupTemplateId, protocolTemplateGroupOk := m["protocol_template_group_id"] + if protocolTemplateOk || protocolTemplateGroupOk { + if protocolTemplateGroupOk { + info.ProtocolTemplateGroupId = common.StringPtr(protocolGroupTemplateId) + } else { + info.ProtocolTemplateId = common.StringPtr(protocolTemplateId) + } + info.Protocol = common.StringPtr("") + info.PortRange = common.StringPtr("") + } else { + info.Protocol = common.StringPtr(m["ipProtocol"]) + info.PortRange = common.StringPtr(m["portRange"]) + } + + info.Description = common.StringPtr(m["description"]) + + log.Printf("[DEBUG] parseSecurityGroupRuleId after: %v", info) + return +} + +func comparePolicyAndSecurityGroupInfo(policy *vpc.SecurityGroupPolicy, info securityGroupRuleBasicInfo) bool { + if policy.PolicyDescription != nil && *policy.PolicyDescription != "" { + if info.Description == nil || *policy.PolicyDescription != *info.Description { + return false + } + } else { + if info.Description != nil && *info.Description != "" { + return false + } + } + // policy.CidrBlock will be nil if address template is set + if policy.CidrBlock != nil && *policy.CidrBlock != "" { + if info.CidrIp == nil || *policy.CidrBlock != *info.CidrIp { + return false + } + } else { + if info.CidrIp != nil && *info.CidrIp != "" { + return false + } + } + + // policy.Port will be nil if protocol template is set + if policy.Port != nil && *policy.Port != "" { + if info.PortRange == nil || *policy.Port != *info.PortRange { + return false + } + } else { + if info.PortRange != nil && *info.PortRange != "" && *info.PortRange != "ALL" { + return false + } + } + + // policy.Protocol will be nil if protocol template is set + if policy.Protocol != nil && *policy.Protocol != "" { + if info.Protocol == nil || !strings.EqualFold(*policy.Protocol, *info.Protocol) { + return false + } + } else { + if info.Protocol != nil && *info.Protocol != "" && *info.Protocol != "ALL" { + return false + } + } + + // policy.SecurityGroupId always not nil + if *policy.SecurityGroupId != *info.SourceSgId { + return false + } + + if !strings.EqualFold(*policy.Action, info.Action) { + return false + } + + // if template is not null it must be compared + if info.ProtocolTemplateId != nil && *info.ProtocolTemplateId != "" { + if policy.ServiceTemplate == nil || policy.ServiceTemplate.ServiceId == nil || *info.ProtocolTemplateId != *policy.ServiceTemplate.ServiceId { + log.Printf("%s %v test", *info.ProtocolTemplateId, policy.ServiceTemplate) + return false + } + } else { + if policy.ServiceTemplate != nil && policy.ServiceTemplate.ServiceId != nil && *policy.ServiceTemplate.ServiceId != "" { + return false + } + } + + if info.ProtocolTemplateGroupId != nil && *info.ProtocolTemplateGroupId != "" { + if policy.ServiceTemplate == nil || policy.ServiceTemplate.ServiceGroupId == nil || *info.ProtocolTemplateGroupId != *policy.ServiceTemplate.ServiceGroupId { + log.Printf("%s %v test", *info.ProtocolTemplateGroupId, policy.ServiceTemplate) + return false + } + } else { + if policy.ServiceTemplate != nil && policy.ServiceTemplate.ServiceGroupId != nil && *policy.ServiceTemplate.ServiceGroupId != "" { + return false + } + } + + if info.AddressTemplateGroupId != nil && *info.AddressTemplateGroupId != "" { + if policy.AddressTemplate == nil || policy.AddressTemplate.AddressGroupId == nil || *info.AddressTemplateGroupId != *policy.AddressTemplate.AddressGroupId { + return false + } + } else { + if policy.AddressTemplate != nil && policy.AddressTemplate.AddressGroupId != nil && *policy.AddressTemplate.AddressGroupId != "" { + return false + } + } + if info.AddressTemplateId != nil && *info.AddressTemplateId != "" { + if policy.AddressTemplate == nil || policy.AddressTemplate.AddressId == nil || *info.AddressTemplateId != *policy.AddressTemplate.AddressId { + return false + } + } else { + if policy.AddressTemplate != nil && policy.AddressTemplate.AddressId != nil && *policy.AddressTemplate.AddressId != "" { + return false + } + } + + return true +} + +func parseRule(str string) (liteRule VpcSecurityGroupLiteRule, err error) { + split := strings.Split(str, "#") + if len(split) != 4 { + err = fmt.Errorf("invalid security group rule %s", str) + return + } + + var ( + source string + port string + protocol string + // source is "sg-xxxxxx" / "ipm-xxxxxx" / "ipmg-xxxxxx" formatted + isInstanceIdSource = true + ) + + liteRule.action, source, port, protocol = split[0], split[1], split[2], split[3] + + if securityGroupIdRE.MatchString(source) { + liteRule.securityGroupId = source + } else if ipAddressIdRE.MatchString(source) { + liteRule.addressId = source + } else if ipAddressGroupIdRE.MatchString(source) { + liteRule.addressGroupId = source + } else { + isInstanceIdSource = false + liteRule.cidrIp = source + } + + if v := liteRule.action; v != "ACCEPT" && v != "DROP" { + err = fmt.Errorf("invalid action `%s`, available actions: `ACCEPT`, `DROP`", v) + return + } + + if net.ParseIP(liteRule.cidrIp) == nil && !isInstanceIdSource { + if _, _, err = net.ParseCIDR(liteRule.cidrIp); err != nil { + err = fmt.Errorf("invalid cidr_ip %s, allow cidr_ip format is `8.8.8.8` or `10.0.1.0/24`", liteRule.cidrIp) + return + } + } + + liteRule.port = port + if port != "ALL" && !portRE.MatchString(port) && !protocolTemplateRE.MatchString(protocol) { + err = fmt.Errorf("invalid port %s, allow port format is `ALL`, `53`, `80,443` or `80-90`", liteRule.port) + return + } + + liteRule.protocol = protocol + if protocolTemplateRE.MatchString(protocol) { + liteRule.port = "" + liteRule.protocol = "" + if protocolTemplateIdRE.MatchString(protocol) { + liteRule.protocolTemplateId = protocol + } else if protocolTemplateGroupIdRE.MatchString(protocol) { + liteRule.protocolTemplateGroupId = protocol + } + } else if protocol != "TCP" && protocol != "UDP" && protocol != "ALL" && protocol != "ICMP" { + err = fmt.Errorf("invalid protocol %s, allow protocol is `ALL`, `TCP`, `UDP`, `ICMP` or `ppm(g?)-xxxxxxxx`", liteRule.protocol) + } else if protocol == "ALL" || protocol == "ICMP" { + if liteRule.port != "ALL" { + err = fmt.Errorf("when protocol is %s, port must be ALL", protocol) + } else { + liteRule.port = "" + } + } + + if err != nil { + return + } + + return +} + +/* +EIP +*/ +func (me *VpcService) DescribeEipById(ctx context.Context, eipId string) (eip *vpc.Address, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeAddressesRequest() + request.AddressIds = []*string{&eipId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeAddresses(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.AddressSet) < 1 { + return + } + eip = response.Response.AddressSet[0] + return +} + +func (me *VpcService) DescribeEipByFilter(ctx context.Context, filters map[string][]string) (eips []*vpc.Address, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeAddressesRequest() + request.Filters = make([]*vpc.Filter, 0, len(filters)) + for k, v := range filters { + filter := &vpc.Filter{ + Name: helper.String(k), + Values: []*string{}, + } + for _, vv := range v { + filter.Values = append(filter.Values, helper.String(vv)) + } + request.Filters = append(request.Filters, filter) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeAddresses(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + eips = response.Response.AddressSet + return +} + +func (me *VpcService) ModifyEipName(ctx context.Context, eipId, eipName string) error { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyAddressAttributeRequest() + request.AddressId = &eipId + request.AddressName = &eipName + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().ModifyAddressAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *VpcService) ModifyEipBandwidthOut(ctx context.Context, eipId string, bandwidthOut int) error { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyAddressesBandwidthRequest() + request.AddressIds = []*string{&eipId} + request.InternetMaxBandwidthOut = helper.IntInt64(bandwidthOut) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().ModifyAddressesBandwidth(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *VpcService) ModifyEipInternetChargeType(ctx context.Context, eipId string, internetChargeType string, bandwidthOut, period, renewFlag int) error { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyAddressInternetChargeTypeRequest() + request.AddressId = &eipId + request.InternetChargeType = &internetChargeType + request.InternetMaxBandwidthOut = helper.IntUint64(bandwidthOut) + + if internetChargeType == "BANDWIDTH_PREPAID_BY_MONTH" { + addressChargePrepaid := vpc.AddressChargePrepaid{} + addressChargePrepaid.AutoRenewFlag = helper.IntInt64(renewFlag) + addressChargePrepaid.Period = helper.IntInt64(period) + request.AddressChargePrepaid = &addressChargePrepaid + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().ModifyAddressInternetChargeType(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *VpcService) RenewAddress(ctx context.Context, eipId string, period int, renewFlag int) error { + logId := tccommon.GetLogId(ctx) + request := vpc.NewRenewAddressesRequest() + request.AddressIds = []*string{&eipId} + addressChargePrepaid := vpc.AddressChargePrepaid{} + addressChargePrepaid.AutoRenewFlag = helper.IntInt64(renewFlag) + addressChargePrepaid.Period = helper.IntInt64(period) + request.AddressChargePrepaid = &addressChargePrepaid + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().RenewAddresses(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *VpcService) DeleteEip(ctx context.Context, eipId string) error { + logId := tccommon.GetLogId(ctx) + request := vpc.NewReleaseAddressesRequest() + request.AddressIds = []*string{&eipId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().ReleaseAddresses(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *VpcService) AttachEip(ctx context.Context, eipId, instanceId string) error { + logId := tccommon.GetLogId(ctx) + request := vpc.NewAssociateAddressRequest() + request.AddressId = &eipId + request.InstanceId = &instanceId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().AssociateAddress(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *VpcService) DescribeNatGatewayById(ctx context.Context, natGateWayId string) (natGateWay *vpc.NatGateway, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeNatGatewaysRequest() + request.NatGatewayIds = []*string{&natGateWayId} + 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.UseVpcClient().DescribeNatGateways(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()) + + if len(response.Response.NatGatewaySet) > 0 { + natGateWay = response.Response.NatGatewaySet[0] + } + + return +} + +func (me *VpcService) DescribeNatGatewayByFilter(ctx context.Context, filters map[string]string) (instances []*vpc.NatGateway, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeNatGatewaysRequest() + ) + request.Filters = make([]*vpc.Filter, 0, len(filters)) + for k, v := range filters { + filter := vpc.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset uint64 = 0 + var pageSize uint64 = 100 + instances = make([]*vpc.NatGateway, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeNatGateways(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.NatGatewaySet) < 1 { + break + } + instances = append(instances, response.Response.NatGatewaySet...) + if len(response.Response.NatGatewaySet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *VpcService) DeleteNatGateway(ctx context.Context, natGatewayId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteNatGatewayRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.NatGatewayId = &natGatewayId + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, errRet = me.client.UseVpcClient().DeleteNatGateway(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + return +} + +func (me *VpcService) DisassociateNatGatewayAddress(ctx context.Context, request *vpc.DisassociateNatGatewayAddressRequest) (result *vpc.DisassociateNatGatewayAddressResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + 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()) + } + }() + + // Check if Nat Gateway Ip still associate + gateway, err := me.DescribeNatGatewayById(ctx, *request.NatGatewayId) + + if err != nil { + errRet = err + return + } + + if gateway == nil || len(gateway.PublicIpAddressSet) == 0 { + return + } + + var gatewayAddresses []string + var candidates []*string + + for i := range gateway.PublicIpAddressSet { + addr := gateway.PublicIpAddressSet[i].PublicIpAddress + gatewayAddresses = append(gatewayAddresses, *addr) + } + + for i := range request.PublicIpAddresses { + addr := request.PublicIpAddresses[i] + if helper.StringsContain(gatewayAddresses, *addr) { + candidates = append(candidates, addr) + } + } + + if len(candidates) == 0 { + return nil, nil + } + + request.PublicIpAddresses = candidates + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DisassociateNatGatewayAddress(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()) + + result = response + return +} + +func (me *VpcService) UnattachEip(ctx context.Context, eipId string) error { + eipUnattachLocker.Lock() + defer eipUnattachLocker.Unlock() + + logId := tccommon.GetLogId(ctx) + eip, err := me.DescribeEipById(ctx, eipId) + if err != nil { + return err + } + if eip == nil || *eip.AddressStatus == EIP_STATUS_UNBIND { + return nil + } + + // DisassociateAddress Doesn't support Disassociate NAT Address + if eip.InstanceId != nil && strings.HasPrefix(*eip.InstanceId, "nat-") { + request := vpc.NewDisassociateNatGatewayAddressRequest() + request.NatGatewayId = eip.InstanceId + request.PublicIpAddresses = []*string{eip.AddressIp} + _, err := me.DisassociateNatGatewayAddress(ctx, request) + if err != nil { + return err + } + + outErr := resource.Retry(tccommon.ReadRetryTimeout*3, func() *resource.RetryError { + eip, err := me.DescribeEipById(ctx, eipId) + if err != nil { + return tccommon.RetryError(err) + } + if eip != nil && *eip.AddressStatus != EIP_STATUS_UNBIND { + return resource.RetryableError(fmt.Errorf("eip is still %s", EIP_STATUS_UNBIND)) + } + return nil + }) + + if outErr != nil { + return outErr + } + } + + request := vpc.NewDisassociateAddressRequest() + request.AddressId = &eipId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DisassociateAddress(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + if response.Response.TaskId == nil { + return nil + } + taskId, err := strconv.ParseUint(*response.Response.TaskId, 10, 64) + if err != nil { + return nil + } + + taskRequest := vpc.NewDescribeTaskResultRequest() + taskRequest.TaskId = &taskId + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(taskRequest.GetAction()) + taskResponse, err := me.client.UseVpcClient().DescribeTaskResult(taskRequest) + if err != nil { + return tccommon.RetryError(err) + } + if taskResponse.Response.Result != nil && *taskResponse.Response.Result == EIP_TASK_STATUS_RUNNING { + return resource.RetryableError(errors.New("eip task is running")) + } + return nil + }) + if err != nil { + return err + } + + return nil +} + +func (me *VpcService) CreateEni( + ctx context.Context, + name, vpcId, subnetId, desc string, + securityGroups []string, + ipv4Count *int, + ipv4s []VpcEniIP, + tags map[string]string, +) (id string, err error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + createRequest := vpc.NewCreateNetworkInterfaceRequest() + createRequest.NetworkInterfaceName = &name + createRequest.VpcId = &vpcId + createRequest.SubnetId = &subnetId + createRequest.NetworkInterfaceDescription = &desc + + if len(securityGroups) > 0 { + createRequest.SecurityGroupIds = common.StringPtrs(securityGroups) + } + + if len(tags) > 0 { + for tagKey, tagValue := range tags { + tag := vpc.Tag{ + Key: helper.String(tagKey), + Value: helper.String(tagValue), + } + createRequest.Tags = append(createRequest.Tags, &tag) + } + } + + if ipv4Count != nil { + // create will assign a primary ip, secondary ip count is *ipv4Count-1 + createRequest.SecondaryPrivateIpAddressCount = helper.IntUint64(*ipv4Count - 1) + } + + var wantIpv4 []string + + for _, ipv4 := range ipv4s { + wantIpv4 = append(wantIpv4, ipv4.ip.String()) + createRequest.PrivateIpAddresses = append(createRequest.PrivateIpAddresses, &vpc.PrivateIpAddressSpecification{ + PrivateIpAddress: helper.String(ipv4.ip.String()), + Primary: helper.Bool(ipv4.primary), + Description: ipv4.desc, + }) + } + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(createRequest.GetAction()) + + response, err := client.CreateNetworkInterface(createRequest) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, createRequest.GetAction(), createRequest.ToJsonString(), err) + return tccommon.RetryError(err) + } + + eni := response.Response.NetworkInterface + + if eni == nil { + err := fmt.Errorf("api[%s] eni is nil", createRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if eni.NetworkInterfaceId == nil { + err := fmt.Errorf("api[%s] eni id is nil", createRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + ipv4Set := eni.PrivateIpAddressSet + + if len(wantIpv4) > 0 { + checkMap := make(map[string]bool, len(wantIpv4)) + for _, ipv4 := range wantIpv4 { + checkMap[ipv4] = false + } + + for _, ipv4 := range ipv4Set { + if ipv4.PrivateIpAddress == nil { + err := fmt.Errorf("api[%s] eni ipv4 ip is nil", createRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + checkMap[*ipv4.PrivateIpAddress] = true + } + + for ipv4, checked := range checkMap { + if !checked { + err := fmt.Errorf("api[%s] doesn't assign %s ip", createRequest.GetAction(), ipv4) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + } + } else { + if len(ipv4Set) != *ipv4Count { + err := fmt.Errorf("api[%s] doesn't assign enough ip", createRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + wantIpv4 = make([]string, 0, *ipv4Count) + for _, ipv4 := range ipv4Set { + if ipv4.PrivateIpAddress == nil { + err := fmt.Errorf("api[%s] eni ipv4 ip is nil", createRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + wantIpv4 = append(wantIpv4, *ipv4.PrivateIpAddress) + } + } + + id = *eni.NetworkInterfaceId + + return nil + }); err != nil { + log.Printf("[CRITAL]%s create eni failed, reason: %v", logId, err) + return "", err + } + + if err := waitEniReady(ctx, id, client, wantIpv4, nil); err != nil { + log.Printf("[CRITAL]%s create eni failed, reason: %v", logId, err) + return "", err + } + + return +} + +func (me *VpcService) describeEnis( + ctx context.Context, + ids []string, + vpcId, subnetId, id, cvmId, sgId, name, desc, ipv4 *string, + tags map[string]string, +) (enis []*vpc.NetworkInterface, err error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeNetworkInterfacesRequest() + + if len(ids) > 0 { + request.NetworkInterfaceIds = common.StringPtrs(ids) + } + + if vpcId != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("vpc-id"), + Values: []*string{vpcId}, + }) + } + + if subnetId != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("subnet-id"), + Values: []*string{subnetId}, + }) + } + + if id != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("network-interface-id"), + Values: []*string{id}, + }) + } + + if cvmId != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("attachment.instance-id"), + Values: []*string{cvmId}, + }) + } + + if sgId != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("groups.security-group-id"), + Values: []*string{sgId}, + }) + } + + if name != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("network-interface-name"), + Values: []*string{name}, + }) + } + + if desc != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("network-interface-description"), + Values: []*string{desc}, + }) + } + + if ipv4 != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("address-ip"), + Values: []*string{ipv4}, + }) + } + + for k, v := range tags { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("tag:" + k), + Values: []*string{helper.String(v)}, + }) + } + + var offset uint64 + request.Offset = &offset + request.Limit = helper.IntUint64(ENI_DESCRIBE_LIMIT) + + count := ENI_DESCRIBE_LIMIT + for count == ENI_DESCRIBE_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeNetworkInterfaces(request) + if err != nil { + count = 0 + + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if sdkError.Code == "ResourceNotFound" { + return nil + } + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + eniSet := response.Response.NetworkInterfaceSet + count = len(eniSet) + enis = append(enis, eniSet...) + + return nil + }); err != nil { + log.Printf("[CRITAL]%s read eni list failed, reason: %v", logId, err) + return nil, err + } + + offset += uint64(count) + } + + return +} + +func (me *VpcService) DescribeEniById(ctx context.Context, ids []string) (enis []*vpc.NetworkInterface, err error) { + return me.describeEnis(ctx, ids, nil, nil, nil, nil, nil, nil, nil, nil, nil) +} + +func (me *VpcService) ModifyEniAttribute(ctx context.Context, id string, name, desc *string, sgs []string) error { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + request := vpc.NewModifyNetworkInterfaceAttributeRequest() + request.NetworkInterfaceId = &id + request.NetworkInterfaceName = name + request.NetworkInterfaceDescription = desc + request.SecurityGroupIds = common.StringPtrs(sgs) + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := client.ModifyNetworkInterfaceAttribute(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s modify eni attribute failed, reason: %v", logId, err) + return err + } + + if err := waitEniReady(ctx, id, client, nil, nil); err != nil { + log.Printf("[CRITAL]%s modify eni attribute failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) UnAssignIpv4FromEni(ctx context.Context, id string, ipv4s []string) error { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + request := vpc.NewUnassignPrivateIpAddressesRequest() + request.NetworkInterfaceId = &id + request.PrivateIpAddresses = make([]*vpc.PrivateIpAddressSpecification, 0, len(ipv4s)) + for _, ipv4 := range ipv4s { + request.PrivateIpAddresses = append(request.PrivateIpAddresses, &vpc.PrivateIpAddressSpecification{ + PrivateIpAddress: helper.String(ipv4), + }) + } + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := client.UnassignPrivateIpAddresses(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s unassign ipv4 from eni failed, reason: %v", logId, err) + return err + } + + if err := waitEniReady(ctx, id, client, nil, ipv4s); err != nil { + log.Printf("[CRITAL]%s unassign ipv4 from eni failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) AssignIpv4ToEni(ctx context.Context, id string, ipv4s []VpcEniIP, ipv4Count *int) error { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + request := vpc.NewAssignPrivateIpAddressesRequest() + request.NetworkInterfaceId = &id + + if ipv4Count != nil { + request.SecondaryPrivateIpAddressCount = helper.IntUint64(*ipv4Count) + } + + var wantIpv4 []string + + if len(ipv4s) > 0 { + request.PrivateIpAddresses = make([]*vpc.PrivateIpAddressSpecification, 0, len(ipv4s)) + wantIpv4 = make([]string, 0, len(ipv4s)) + + for _, ipv4 := range ipv4s { + wantIpv4 = append(wantIpv4, ipv4.ip.String()) + request.PrivateIpAddresses = append(request.PrivateIpAddresses, &vpc.PrivateIpAddressSpecification{ + PrivateIpAddress: helper.String(ipv4.ip.String()), + Primary: helper.Bool(ipv4.primary), + Description: ipv4.desc, + }) + } + } + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := client.AssignPrivateIpAddresses(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + ipv4Set := response.Response.PrivateIpAddressSet + + if len(wantIpv4) > 0 { + checkMap := make(map[string]bool, len(wantIpv4)) + for _, ipv4 := range wantIpv4 { + checkMap[ipv4] = false + } + + for _, ipv4 := range ipv4Set { + if ipv4.PrivateIpAddress == nil { + err := fmt.Errorf("api[%s] eni ipv4 ip is nil", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + checkMap[*ipv4.PrivateIpAddress] = true + } + + for ipv4, checked := range checkMap { + if !checked { + err := fmt.Errorf("api[%s] doesn't assign %s ip", request.GetAction(), ipv4) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + } + } else { + if len(ipv4Set) != *ipv4Count { + err := fmt.Errorf("api[%s] doesn't assign enough ip", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + wantIpv4 = make([]string, 0, *ipv4Count) + for _, ipv4 := range ipv4Set { + if ipv4.PrivateIpAddress == nil { + err := fmt.Errorf("api[%s] eni ipv4 ip is nil", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + wantIpv4 = append(wantIpv4, *ipv4.PrivateIpAddress) + } + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s assign ipv4 to eni failed, reason: %v", logId, err) + return err + } + + if err := waitEniReady(ctx, id, client, wantIpv4, nil); err != nil { + log.Printf("[CRITAL]%s assign ipv4 to eni failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) DeleteEni(ctx context.Context, id string) error { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + deleteRequest := vpc.NewDeleteNetworkInterfaceRequest() + deleteRequest.NetworkInterfaceId = &id + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(deleteRequest.GetAction()) + + if _, err := client.DeleteNetworkInterface(deleteRequest); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, deleteRequest.GetAction(), deleteRequest.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete eni failed, reason: %v", logId, err) + return err + } + + describeRequest := vpc.NewDescribeNetworkInterfacesRequest() + describeRequest.NetworkInterfaceIds = []*string{&id} + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(describeRequest.GetAction()) + + response, err := client.DescribeNetworkInterfaces(describeRequest) + if err != nil { + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if sdkError.Code == "ResourceNotFound" { + return nil + } + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, describeRequest.GetAction(), describeRequest.ToJsonString(), err) + return tccommon.RetryError(err) + } + + for _, eni := range response.Response.NetworkInterfaceSet { + if eni.NetworkInterfaceId == nil { + err := fmt.Errorf("api[%s] eni id is nil", describeRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *eni.NetworkInterfaceId == id { + err := errors.New("eni still exists") + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete eni failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) AttachEniToCvm(ctx context.Context, eniId, cvmId string) error { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + attachRequest := vpc.NewAttachNetworkInterfaceRequest() + attachRequest.NetworkInterfaceId = &eniId + attachRequest.InstanceId = &cvmId + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(attachRequest.GetAction()) + + if _, err := client.AttachNetworkInterface(attachRequest); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, attachRequest.GetAction(), attachRequest.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s attach eni to instance failed, reason: %v", logId, err) + return err + } + + describeRequest := vpc.NewDescribeNetworkInterfacesRequest() + describeRequest.NetworkInterfaceIds = []*string{&eniId} + + if err := resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(describeRequest.GetAction()) + + response, err := client.DescribeNetworkInterfaces(describeRequest) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, describeRequest.GetAction(), describeRequest.ToJsonString(), err) + return tccommon.RetryError(err) + } + + var eni *vpc.NetworkInterface + for _, e := range response.Response.NetworkInterfaceSet { + if e.NetworkInterfaceId == nil { + err := fmt.Errorf("api[%s] eni id is nil", describeRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *e.NetworkInterfaceId == eniId { + eni = e + break + } + } + + if eni == nil { + err := fmt.Errorf("api[%s] eni not found", describeRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if eni.Attachment == nil { + err := fmt.Errorf("api[%s] eni attachment is not ready", describeRequest.GetAction()) + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + + if eni.Attachment.InstanceId == nil { + err := fmt.Errorf("api[%s] eni attach instance id is nil", describeRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *eni.Attachment.InstanceId != cvmId { + err := fmt.Errorf("api[%s] eni attach instance id is not right", describeRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if eni.State == nil { + err := fmt.Errorf("api[%s] eni state is nil", describeRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *eni.State != ENI_STATE_AVAILABLE { + err := errors.New("eni is not ready") + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s attach eni to instance failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) DetachEniFromCvm(ctx context.Context, eniId, cvmId string) error { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + request := vpc.NewDetachNetworkInterfaceRequest() + request.NetworkInterfaceId = &eniId + request.InstanceId = &cvmId + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := client.DetachNetworkInterface(request); err != nil { + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + switch sdkError.Code { + case "UnsupportedOperation.InvalidState": + return resource.RetryableError(errors.New("cvm may still bind eni")) + + case "ResourceNotFound": + // eni or cvm doesn't exist + return nil + } + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s detach eni from instance failed, reason: %v", logId, err) + return err + } + + if err := waitEniDetach(ctx, eniId, client); err != nil { + log.Printf("[CRITAL]%s detach eni from instance failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) ModifyEniPrimaryIpv4Desc(ctx context.Context, id, ip string, desc *string) error { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + request := vpc.NewModifyPrivateIpAddressesAttributeRequest() + request.NetworkInterfaceId = &id + request.PrivateIpAddresses = []*vpc.PrivateIpAddressSpecification{ + { + PrivateIpAddress: &ip, + Description: desc, + }, + } + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := client.ModifyPrivateIpAddressesAttribute(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s modify eni primary ipv4 description failed, reason: %v", logId, err) + return err + } + + if err := waitEniReady(ctx, id, client, []string{ip}, nil); err != nil { + log.Printf("[CRITAL]%s modify eni primary ipv4 description failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) DescribeEniByFilters( + ctx context.Context, + vpcId, subnetId, cvmId, sgId, name, desc, ipv4 *string, + tags map[string]string, +) (enis []*vpc.NetworkInterface, err error) { + return me.describeEnis(ctx, nil, vpcId, subnetId, nil, cvmId, sgId, name, desc, ipv4, tags) +} + +func (me *VpcService) DescribeHaVipByFilter(ctx context.Context, filters map[string]string) (instances []*vpc.HaVip, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeHaVipsRequest() + ) + request.Filters = make([]*vpc.Filter, 0, len(filters)) + for k, v := range filters { + filter := vpc.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset uint64 = 0 + var pageSize uint64 = 100 + instances = make([]*vpc.HaVip, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeHaVips(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.HaVipSet) < 1 { + break + } + instances = append(instances, response.Response.HaVipSet...) + if len(response.Response.HaVipSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *VpcService) DescribeHaVipEipById(ctx context.Context, haVipEipAttachmentId string) (eip string, haVip string, has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + items := strings.Split(haVipEipAttachmentId, "#") + if len(items) != 2 { + errRet = fmt.Errorf("decode HA VIP EIP attachment ID error %s", haVipEipAttachmentId) + return + } + haVipId := items[0] + addressIp := items[1] + + request := vpc.NewDescribeHaVipsRequest() + request.HaVipIds = []*string{&haVipId} + eip = "" + haVip = "" + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if result, err := client.DescribeHaVips(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } else { + length := len(result.Response.HaVipSet) + if length != 1 { + if length == 0 { + return nil + } else { + err = fmt.Errorf("query havip %s eip %s failed, the SDK returns %d HaVips", haVipId, addressIp, length) + return resource.NonRetryableError(err) + } + } else { + eip = *result.Response.HaVipSet[0].AddressIp + if addressIp != eip { + return nil + } + has = true + haVip = haVipId + } + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s describe HA VIP attachment failed, reason: %v", logId, err) + errRet = err + } + return eip, haVip, has, errRet +} + +func (me *VpcService) DeleteHaVip(ctx context.Context, haVipId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteHaVipRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.HaVipId = &haVipId + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, errRet = me.client.UseVpcClient().DeleteHaVip(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + return +} + +func waitEniReady(ctx context.Context, id string, client *vpc.Client, wantIpv4s []string, dropIpv4s []string) error { + logId := tccommon.GetLogId(ctx) + + wantCheckMap := make(map[string]bool, len(wantIpv4s)) + for _, ipv4 := range wantIpv4s { + wantCheckMap[ipv4] = false + } + + dropCheckMap := make(map[string]struct{}, len(dropIpv4s)) + for _, ipv4 := range dropIpv4s { + dropCheckMap[ipv4] = struct{}{} + } + + request := vpc.NewDescribeNetworkInterfacesRequest() + request.NetworkInterfaceIds = []*string{helper.String(id)} + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := client.DescribeNetworkInterfaces(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + var eni *vpc.NetworkInterface + for _, networkInterface := range response.Response.NetworkInterfaceSet { + if networkInterface.NetworkInterfaceId == nil { + err := fmt.Errorf("api[%s] eni id is nil", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *networkInterface.NetworkInterfaceId == id { + eni = networkInterface + break + } + } + + if eni == nil { + err := fmt.Errorf("api[%s] eni not exist", request.GetAction()) + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + + if eni.State == nil { + err := fmt.Errorf("api[%s] eni state is nil", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *eni.State != ENI_STATE_AVAILABLE { + err := errors.New("eni is not available") + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + + for _, ipv4 := range eni.PrivateIpAddressSet { + if ipv4.PrivateIpAddress == nil { + err := fmt.Errorf("api[%s] eni ipv4 ip is nil", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + // check drop + if _, ok := dropCheckMap[*ipv4.PrivateIpAddress]; ok { + err := fmt.Errorf("api[%s] drop ip %s still exists", request.GetAction(), *ipv4.PrivateIpAddress) + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + + // check want + if _, ok := wantCheckMap[*ipv4.PrivateIpAddress]; ok { + wantCheckMap[*ipv4.PrivateIpAddress] = true + } + + if ipv4.State == nil { + err := fmt.Errorf("api[%s] eni ipv4 state is nil", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *ipv4.State != ENI_IP_AVAILABLE { + err := errors.New("eni ipv4 is not available") + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + } + + for ipv4, checked := range wantCheckMap { + if !checked { + err := fmt.Errorf("api[%s] ipv4 %s is no ready", request.GetAction(), ipv4) + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s eni is not available failed, reason: %v", logId, err) + return err + } + + return nil +} + +func flattenVpnSPDList(spd []*vpc.SecurityPolicyDatabase) (mapping []*map[string]interface{}) { + mapping = make([]*map[string]interface{}, 0, len(spd)) + for _, spg := range spd { + item := make(map[string]interface{}) + item["local_cidr_block"] = spg.LocalCidrBlock + item["remote_cidr_block"] = spg.RemoteCidrBlock + mapping = append(mapping, &item) + } + return +} + +func waitEniDetach(ctx context.Context, id string, client *vpc.Client) error { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeNetworkInterfacesRequest() + request.NetworkInterfaceIds = []*string{helper.String(id)} + + return resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := client.DescribeNetworkInterfaces(request) + if err != nil { + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok && sdkError.Code == "ResourceNotFound" { + return nil + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + enis := response.Response.NetworkInterfaceSet + + if len(enis) == 0 { + return nil + } + + eni := enis[0] + + if eni.Attachment == nil { + return nil + } + + if eni.Attachment.InstanceId != nil && *eni.Attachment.InstanceId != "" { + return resource.RetryableError(fmt.Errorf("eni %s still bind in cvm %s", id, *eni.Attachment.InstanceId)) + } + + if eni.State == nil { + return resource.NonRetryableError(fmt.Errorf("eni %s state is nil", id)) + } + + if *eni.State != ENI_STATE_AVAILABLE { + return resource.RetryableError(errors.New("eni is not available")) + } + + return nil + }) +} + +// deal acl +func parseACLRule(str string) (liteRule VpcACLRule, err error) { + split := strings.Split(str, "#") + if len(split) != 4 { + err = fmt.Errorf("invalid acl rule %s", str) + return + } + + liteRule.action, liteRule.cidrIp, liteRule.port, liteRule.protocol = split[0], split[1], split[2], split[3] + + switch liteRule.action { + default: + err = fmt.Errorf("invalid action %s, allow action is `ACCEPT` or `DROP`", liteRule.action) + return + case "ACCEPT", "DROP": + } + + if net.ParseIP(liteRule.cidrIp) == nil { + if _, _, err = net.ParseCIDR(liteRule.cidrIp); err != nil { + err = fmt.Errorf("invalid cidr_ip %s, allow cidr_ip format is `8.8.8.8` or `10.0.1.0/24`", liteRule.cidrIp) + return + } + } + + if liteRule.port != "ALL" && !regexp.MustCompile(`^(\d{1,5},)*\d{1,5}$|^\d{1,5}-\d{1,5}$`).MatchString(liteRule.port) { + err = fmt.Errorf("invalid port %s, allow port format is `ALL`, `53`, `80,443` or `80-90`", liteRule.port) + return + } + + switch liteRule.protocol { + default: + err = fmt.Errorf("invalid protocol %s, allow protocol is `ALL`, `TCP`, `UDP` or `ICMP`", liteRule.protocol) + return + + case "ALL", "ICMP": + if liteRule.port != "ALL" { + err = fmt.Errorf("when protocol is %s, port must be ALL", liteRule.protocol) + return + } + + // when protocol is ALL or ICMP, port should be "" to avoid sdk error + liteRule.port = "" + + case "TCP", "UDP": + } + + return +} + +func (me *VpcService) CreateVpcNetworkAcl(ctx context.Context, vpcID string, name string, tags map[string]string) (aclID string, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewCreateNetworkAclRequest() + response *vpc.CreateNetworkAclResponse + err error + ) + + request.VpcId = &vpcID + request.NetworkAclName = &name + + if len(tags) > 0 { + for tagKey, tagValue := range tags { + tag := vpc.Tag{ + Key: helper.String(tagKey), + Value: helper.String(tagValue), + } + request.Tags = append(request.Tags, &tag) + } + } + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err = me.client.UseVpcClient().CreateNetworkAcl(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + + aclID = *response.Response.NetworkAcl.NetworkAclId + return +} + +func (me *VpcService) AttachRulesToACL(ctx context.Context, aclID string, ingressParm, egressParm []VpcACLRule) (errRet error) { + logId := tccommon.GetLogId(ctx) + + if len(ingressParm) == 0 && len(egressParm) == 0 { + return + } + if errRet = me.ModifyNetWorkAclRules(ctx, aclID, ingressParm, egressParm); errRet != nil { + log.Printf("[CRITAL]%s attach rules to acl failed, reason: %v", logId, errRet) + } + return +} + +func (me *VpcService) ModifyNetWorkAclRules(ctx context.Context, aclID string, ingressParm, egressParm []VpcACLRule) (errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewModifyNetworkAclEntriesRequest() + err error + ingress []*vpc.NetworkAclEntry + egress []*vpc.NetworkAclEntry + ) + + for i := range ingressParm { + policy := &vpc.NetworkAclEntry{ + Protocol: &ingressParm[i].protocol, + CidrBlock: &ingressParm[i].cidrIp, + Action: &ingressParm[i].action, + } + + if ingressParm[i].port != "" { + policy.Port = &ingressParm[i].port + } + + ingress = append(ingress, policy) + } + + for i := range egressParm { + policy := &vpc.NetworkAclEntry{ + Protocol: &egressParm[i].protocol, + CidrBlock: &egressParm[i].cidrIp, + Action: &egressParm[i].action, + } + + if egressParm[i].port != "" { + policy.Port = &egressParm[i].port + } + + egress = append(egress, policy) + } + + request.NetworkAclId = &aclID + request.NetworkAclEntrySet = &vpc.NetworkAclEntrySet{ + Ingress: ingress, + Egress: egress, + } + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err = me.client.UseVpcClient().ModifyNetworkAclEntries(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + + return +} + +func (me *VpcService) DescribeNetWorkByACLID(ctx context.Context, aclID string) (info *vpc.NetworkAcl, has int, errRet error) { + results, err := me.DescribeNetWorkAcls(ctx, aclID, "", "") + if err != nil { + errRet = err + return + } + + has = len(results) + if has == 0 { + return + } + + info = results[0] + return +} + +func (me *VpcService) DeleteAcl(ctx context.Context, aclID string) (errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + err error + networkAcls []*vpc.NetworkAcl + request = vpc.NewDeleteNetworkAclRequest() + ) + + // Disassociate Network Acl Subnets + networkAcls, err = me.DescribeNetWorkAcls(ctx, aclID, "", "") + if err != nil { + errRet = err + return + } + + if len(networkAcls) > 0 { + subnets := networkAcls[0].SubnetSet + if len(subnets) > 0 { + requestSubnet := vpc.NewDisassociateNetworkAclSubnetsRequest() + requestSubnet.NetworkAclId = &aclID + + for i := range subnets { + requestSubnet.SubnetIds = append(requestSubnet.SubnetIds, subnets[i].SubnetId) + } + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err = me.client.UseVpcClient().DisassociateNetworkAclSubnets(requestSubnet) + if err != nil { + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if ee.Code == VPCNotFound { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return nil + } + } + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + if err != nil { + errRet = err + return + } + } + } + + // delete acl + request.NetworkAclId = &aclID + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err = me.client.UseVpcClient().DeleteNetworkAcl(request) + + if err != nil { + ee, ok := err.(*sdkErrors.TencentCloudSDKError) + if !ok { + return tccommon.RetryError(err, tccommon.InternalError) + } + if ee.Code == VPCNotFound { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return nil + } + return tccommon.RetryError(err, tccommon.InternalError) + } + + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + + return +} + +func (me *VpcService) ModifyVpcNetworkAcl(ctx context.Context, id *string, name *string) (errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + err error + request = vpc.NewModifyNetworkAclAttributeRequest() + ) + + request.NetworkAclId = id + request.NetworkAclName = name + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err = me.client.UseVpcClient().ModifyNetworkAclAttribute(request) + if err != nil { + ee, ok := err.(*sdkErrors.TencentCloudSDKError) + if !ok { + return tccommon.RetryError(err, tccommon.InternalError) + } + if ee.Code == VPCNotFound { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return resource.NonRetryableError(err) + } + return tccommon.RetryError(err, tccommon.InternalError) + } + + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + + return +} + +func (me *VpcService) AssociateAclSubnets(ctx context.Context, aclId string, subnetIds []string) (errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewAssociateNetworkAclSubnetsRequest() + err error + subIds []*string + ) + + for _, i := range subnetIds { + subIds = append(subIds, &i) + } + + request.NetworkAclId = &aclId + request.SubnetIds = subIds + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err = me.client.UseVpcClient().AssociateNetworkAclSubnets(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + return +} + +func (me *VpcService) DescribeNetWorkAcls(ctx context.Context, aclID, vpcID, name string) (info []*vpc.NetworkAcl, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeNetworkAclsRequest() + response *vpc.DescribeNetworkAclsResponse + err error + filters []*vpc.Filter + offset, pageSize uint64 = 0, 100 + ) + + if vpcID != "" { + filters = me.fillFilter(filters, "vpc-id", vpcID) + } + if aclID != "" { + filters = me.fillFilter(filters, "network-acl-id", aclID) + } + if name != "" { + filters = me.fillFilter(filters, "network-acl-name", name) + } + + if len(filters) > 0 { + request.Filters = filters + } + + request.Offset = &offset + request.Limit = &pageSize + for { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err = me.client.UseVpcClient().DescribeNetworkAcls(request) + if err != nil { + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if ee.Code == VPCNotFound { + return nil + } + } + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + if response.Response == nil { + return + } + + info = append(info, response.Response.NetworkAclSet...) + if len(response.Response.NetworkAclSet) < int(pageSize) { + break + } + + offset += pageSize + } + + return +} + +func (me *VpcService) DescribeByAclId(ctx context.Context, attachmentAcl string) (has bool, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDisassociateNetworkAclSubnetsRequest() + aclId string + ) + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + if attachmentAcl == "" { + errRet = fmt.Errorf("DisassociateNetworkAclSubnets can not invoke by empty routeTableId.") + return + } + + aclId = strings.Split(attachmentAcl, "#")[0] + + results, err := me.DescribeNetWorkAcls(ctx, aclId, "", "") + if err != nil { + errRet = err + return + } + if len(results) < 1 || len(results[0].SubnetSet) < 1 { + return + } + + has = true + return +} + +func (me *VpcService) DeleteAclAttachment(ctx context.Context, attachmentAcl string) (errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDisassociateNetworkAclSubnetsRequest() + err error + ) + + if attachmentAcl == "" { + errRet = fmt.Errorf("DeleteRouteTable can not invoke by empty NetworkAclId.") + return + } + + items := strings.Split(attachmentAcl, "#") + request.NetworkAclId = &items[0] + request.SubnetIds = helper.Strings(items[1:]) + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err = me.client.UseVpcClient().DisassociateNetworkAclSubnets(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + return +} + +func (me *VpcService) DescribeVpngwById(ctx context.Context, vpngwId string) (has bool, gateway *vpc.VpnGateway, err error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpnGatewaysRequest() + response *vpc.DescribeVpnGatewaysResponse + ) + request.VpnGatewayIds = []*string{&vpngwId} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + response, err = me.client.UseVpcClient().DescribeVpnGateways(request) + if err != nil { + ee, ok := err.(*sdkErrors.TencentCloudSDKError) + if !ok { + return tccommon.RetryError(err) + } + if ee.Code == VPCNotFound { + return nil + } else { + return tccommon.RetryError(err) + } + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", logId, request.GetAction(), request.ToJsonString(), err) + return + } + if response == nil || response.Response == nil || len(response.Response.VpnGatewaySet) < 1 { + has = false + return + } + + gateway = response.Response.VpnGatewaySet[0] + has = true + return +} + +func (me *VpcService) DescribeVpnGwByFilter(ctx context.Context, filters map[string]string) (instances []*vpc.VpnGateway, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpnGatewaysRequest() + ) + request.Filters = make([]*vpc.FilterObject, 0, len(filters)) + for k, v := range filters { + filter := vpc.FilterObject{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset uint64 = 0 + var pageSize uint64 = 100 + instances = make([]*vpc.VpnGateway, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeVpnGateways(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.VpnGatewaySet) < 1 { + break + } + instances = append(instances, response.Response.VpnGatewaySet...) + if len(response.Response.VpnGatewaySet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *VpcService) DeleteVpnGateway(ctx context.Context, vpnGatewayId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteVpnGatewayRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.VpnGatewayId = &vpnGatewayId + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, errRet = me.client.UseVpcClient().DeleteVpnGateway(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + return +} + +func (me *VpcService) DescribeCustomerGatewayByFilter(ctx context.Context, filters map[string]string) (instances []*vpc.CustomerGateway, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeCustomerGatewaysRequest() + ) + request.Filters = make([]*vpc.Filter, 0, len(filters)) + for k, v := range filters { + filter := vpc.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset uint64 = 0 + var pageSize uint64 = 100 + instances = make([]*vpc.CustomerGateway, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeCustomerGateways(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.CustomerGatewaySet) < 1 { + break + } + instances = append(instances, response.Response.CustomerGatewaySet...) + if len(response.Response.CustomerGatewaySet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *VpcService) DeleteCustomerGateway(ctx context.Context, customerGatewayId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteCustomerGatewayRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.CustomerGatewayId = &customerGatewayId + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, errRet = me.client.UseVpcClient().DeleteCustomerGateway(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + return +} + +func (me *VpcService) CreateAddressTemplate(ctx context.Context, name string, addresses []interface{}) (templateId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateAddressTemplateRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.AddressTemplateName = &name + request.Addresses = make([]*string, len(addresses)) + for i, v := range addresses { + request.Addresses[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().CreateAddressTemplate(request) + if err != nil { + errRet = err + return + } + + if response == nil || response.Response == nil || response.Response.AddressTemplate == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + + templateId = *response.Response.AddressTemplate.AddressTemplateId + return +} + +func (me *VpcService) DescribeAddressTemplateById(ctx context.Context, templateId string) (template *vpc.AddressTemplate, has bool, errRet error) { + filter := vpc.Filter{Name: helper.String("address-template-id"), Values: []*string{&templateId}} + templates, err := me.DescribeAddressTemplates(ctx, []*vpc.Filter{&filter}) + if err != nil { + errRet = err + return + } + + if len(templates) == 0 { + return + } + if len(templates) > 1 { + errRet = fmt.Errorf("TencentCloud SDK return more than one templates, instanceId %s", templateId) + } + + has = true + template = templates[0] + return +} + +func (me *VpcService) DescribeAddressTemplates(ctx context.Context, filter []*vpc.Filter) (templateList []*vpc.AddressTemplate, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeAddressTemplatesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + var offset, limit = 0, 100 + request.Filters = filter + + for { + request.Offset = helper.String(strconv.Itoa(offset)) + request.Limit = helper.String(strconv.Itoa(limit)) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeAddressTemplates(request) + if err != nil { + errRet = err + return + } + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + templateList = append(templateList, response.Response.AddressTemplateSet...) + if len(response.Response.AddressTemplateSet) < limit { + return + } + offset += limit + } +} + +func (me *VpcService) ModifyAddressTemplate(ctx context.Context, templateId string, name string, addresses []interface{}) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyAddressTemplateAttributeRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.AddressTemplateId = &templateId + request.AddressTemplateName = &name + request.Addresses = make([]*string, len(addresses)) + for i, v := range addresses { + request.Addresses[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().ModifyAddressTemplateAttribute(request) + return err +} + +func (me *VpcService) DeleteAddressTemplate(ctx context.Context, templateId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteAddressTemplateRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.AddressTemplateId = &templateId + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().DeleteAddressTemplate(request) + return err +} + +func (me *VpcService) CreateAddressTemplateGroup(ctx context.Context, name string, addressTemplate []interface{}) (templateId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateAddressTemplateGroupRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.AddressTemplateGroupName = &name + request.AddressTemplateIds = make([]*string, len(addressTemplate)) + for i, v := range addressTemplate { + request.AddressTemplateIds[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().CreateAddressTemplateGroup(request) + if err != nil { + errRet = err + return + } + + if response == nil || response.Response == nil || response.Response.AddressTemplateGroup == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + + templateId = *response.Response.AddressTemplateGroup.AddressTemplateGroupId + return +} + +func (me *VpcService) ModifyAddressTemplateGroup(ctx context.Context, templateGroupId string, name string, templateIds []interface{}) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyAddressTemplateGroupAttributeRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.AddressTemplateGroupId = &templateGroupId + request.AddressTemplateGroupName = &name + request.AddressTemplateIds = make([]*string, len(templateIds)) + for i, v := range templateIds { + request.AddressTemplateIds[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().ModifyAddressTemplateGroupAttribute(request) + return err +} + +func (me *VpcService) DescribeAddressTemplateGroupById(ctx context.Context, templateGroupId string) (templateGroup *vpc.AddressTemplateGroup, has bool, errRet error) { + filter := vpc.Filter{Name: helper.String("address-template-group-id"), Values: []*string{&templateGroupId}} + templateGroups, err := me.DescribeAddressTemplateGroups(ctx, []*vpc.Filter{&filter}) + if err != nil { + errRet = err + return + } + + if len(templateGroups) == 0 { + return + } + if len(templateGroups) > 1 { + errRet = fmt.Errorf("TencentCloud SDK return more than one template group, instanceId %s", templateGroupId) + } + + has = true + templateGroup = templateGroups[0] + return +} + +func (me *VpcService) DescribeAddressTemplateGroups(ctx context.Context, filter []*vpc.Filter) (templateList []*vpc.AddressTemplateGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeAddressTemplateGroupsRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + var offset, limit = 0, 100 + request.Filters = filter + + for { + request.Offset = helper.String(strconv.Itoa(offset)) + request.Limit = helper.String(strconv.Itoa(limit)) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeAddressTemplateGroups(request) + if err != nil { + errRet = err + return + } + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + templateList = append(templateList, response.Response.AddressTemplateGroupSet...) + if len(response.Response.AddressTemplateGroupSet) < limit { + return + } + offset += limit + } +} + +func (me *VpcService) DeleteAddressTemplateGroup(ctx context.Context, templateGroupId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteAddressTemplateGroupRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.AddressTemplateGroupId = &templateGroupId + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().DeleteAddressTemplateGroup(request) + return err +} + +func (me *VpcService) CreateServiceTemplate(ctx context.Context, name string, services []interface{}) (templateId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateServiceTemplateRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.ServiceTemplateName = &name + request.Services = make([]*string, len(services)) + for i, v := range services { + request.Services[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().CreateServiceTemplate(request) + if err != nil { + errRet = err + return + } + + if response == nil || response.Response == nil || response.Response.ServiceTemplate == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + + templateId = *response.Response.ServiceTemplate.ServiceTemplateId + return +} + +func (me *VpcService) ModifyServiceTemplate(ctx context.Context, templateId string, name string, services []interface{}) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyServiceTemplateAttributeRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.ServiceTemplateId = &templateId + request.ServiceTemplateName = &name + request.Services = make([]*string, len(services)) + for i, v := range services { + request.Services[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().ModifyServiceTemplateAttribute(request) + return err +} + +func (me *VpcService) DescribeServiceTemplateById(ctx context.Context, templateId string) (template *vpc.ServiceTemplate, has bool, errRet error) { + filter := vpc.Filter{Name: helper.String("service-template-id"), Values: []*string{&templateId}} + templates, err := me.DescribeServiceTemplates(ctx, []*vpc.Filter{&filter}) + if err != nil { + errRet = err + return + } + + if len(templates) == 0 { + return + } + if len(templates) > 1 { + errRet = fmt.Errorf("TencentCloud SDK return more than one templates, instanceId %s", templateId) + } + + has = true + template = templates[0] + return +} + +func (me *VpcService) DescribeServiceTemplates(ctx context.Context, filter []*vpc.Filter) (templateList []*vpc.ServiceTemplate, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeServiceTemplatesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + var offset, limit = 0, 100 + request.Filters = filter + + for { + request.Offset = helper.String(strconv.Itoa(offset)) + request.Limit = helper.String(strconv.Itoa(limit)) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeServiceTemplates(request) + if err != nil { + errRet = err + return + } + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + templateList = append(templateList, response.Response.ServiceTemplateSet...) + if len(response.Response.ServiceTemplateSet) < limit { + return + } + offset += limit + } +} + +func (me *VpcService) DeleteServiceTemplate(ctx context.Context, templateId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteServiceTemplateRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.ServiceTemplateId = &templateId + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().DeleteServiceTemplate(request) + return err +} + +func (me *VpcService) CreateServiceTemplateGroup(ctx context.Context, name string, serviceTemplate []interface{}) (templateId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateServiceTemplateGroupRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.ServiceTemplateGroupName = &name + request.ServiceTemplateIds = make([]*string, len(serviceTemplate)) + for i, v := range serviceTemplate { + request.ServiceTemplateIds[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().CreateServiceTemplateGroup(request) + if err != nil { + errRet = err + return + } + + if response == nil || response.Response == nil || response.Response.ServiceTemplateGroup == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + + templateId = *response.Response.ServiceTemplateGroup.ServiceTemplateGroupId + return +} + +func (me *VpcService) DescribeServiceTemplateGroupById(ctx context.Context, templateGroupId string) (template *vpc.ServiceTemplateGroup, has bool, errRet error) { + filter := vpc.Filter{Name: helper.String("service-template-group-id"), Values: []*string{&templateGroupId}} + templates, err := me.DescribeServiceTemplateGroups(ctx, []*vpc.Filter{&filter}) + if err != nil { + errRet = err + return + } + + if len(templates) == 0 { + return + } + if len(templates) > 1 { + errRet = fmt.Errorf("TencentCloud SDK return more than one templates, instanceId %s", templateGroupId) + } + + has = true + template = templates[0] + return +} + +func (me *VpcService) DescribeServiceTemplateGroups(ctx context.Context, filter []*vpc.Filter) (templateList []*vpc.ServiceTemplateGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeServiceTemplateGroupsRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + var offset, limit = 0, 100 + request.Filters = filter + + for { + request.Offset = helper.String(strconv.Itoa(offset)) + request.Limit = helper.String(strconv.Itoa(limit)) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeServiceTemplateGroups(request) + if err != nil { + errRet = err + return + } + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + templateList = append(templateList, response.Response.ServiceTemplateGroupSet...) + if len(response.Response.ServiceTemplateGroupSet) < limit { + return + } + offset += limit + } +} + +func (me *VpcService) ModifyServiceTemplateGroup(ctx context.Context, serviceGroupId string, name string, templateIds []interface{}) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyServiceTemplateGroupAttributeRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.ServiceTemplateGroupId = &serviceGroupId + request.ServiceTemplateGroupName = &name + request.ServiceTemplateIds = make([]*string, len(templateIds)) + for i, v := range templateIds { + request.ServiceTemplateIds[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().ModifyServiceTemplateGroupAttribute(request) + return err +} + +func (me *VpcService) DeleteServiceTemplateGroup(ctx context.Context, templateGroupId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteServiceTemplateGroupRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.ServiceTemplateGroupId = &templateGroupId + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().DeleteServiceTemplateGroup(request) + return err +} + +func (me *VpcService) CreateVpnGatewayRoute(ctx context.Context, vpnGatewayId string, vpnGwRoutes []*vpc.VpnGatewayRoute) (errRet error, routes []*vpc.VpnGatewayRoute) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateVpnGatewayRoutesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.VpnGatewayId = &vpnGatewayId + request.Routes = vpnGwRoutes + + var response *vpc.CreateVpnGatewayRoutesResponse + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet = me.client.UseVpcClient().CreateVpnGatewayRoutes(request) + if errRet != nil { + log.Printf("[CRITAL]%s create vpn gateway route failed, reason: %v", logId, errRet) + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + if errRet != nil { + return errRet, nil + } + + if response == nil || response.Response == nil || response.Response.Routes == nil || len(response.Response.Routes) == 0 { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %+v, %s", response, request.GetAction()) + } else { + routes = response.Response.Routes + } + return +} + +func (me *VpcService) ModifyVpnGatewayRoute(ctx context.Context, vpnGatewayId, routeId, status string) (errRet error, routes *vpc.VpnGatewayRoute) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyVpnGatewayRoutesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.VpnGatewayId = &vpnGatewayId + request.Routes = []*vpc.VpnGatewayRouteModify{{ + RouteId: &routeId, + Status: &status, + }} + + var response *vpc.ModifyVpnGatewayRoutesResponse + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet = me.client.UseVpcClient().ModifyVpnGatewayRoutes(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + if errRet != nil { + return errRet, nil + } + + if response == nil || response.Response == nil || response.Response.Routes == nil || len(response.Response.Routes) == 0 { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } else { + routes = response.Response.Routes[0] + } + return +} + +func (me *VpcService) DeleteVpnGatewayRoutes(ctx context.Context, vpnGatewayId string, routeIds []*string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteVpnGatewayRoutesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.VpnGatewayId = &vpnGatewayId + request.RouteIds = routeIds + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, errRet = me.client.UseVpcClient().DeleteVpnGatewayRoutes(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + return +} + +func (me *VpcService) DescribeVpnGatewayRoutes(ctx context.Context, vpnGatewayId string, filters []*vpc.Filter) (errRet error, result []*vpc.VpnGatewayRoute) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeVpnGatewayRoutesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.VpnGatewayId = &vpnGatewayId + if len(filters) > 0 { + request.Filters = filters + } + + offset := int64(0) + limit := int64(VPN_DESCRIBE_LIMIT) + for { + request.Offset = &offset + request.Limit = &limit + var response *vpc.DescribeVpnGatewayRoutesResponse + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet = me.client.UseVpcClient().DescribeVpnGatewayRoutes(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + if errRet != nil { + return errRet, nil + } + + if response == nil || response.Response == nil { + return fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()), nil + } else if len(response.Response.Routes) > 0 { + result = append(result, response.Response.Routes...) + } else { + return + } + offset = offset + limit + } +} + +func (me *VpcService) DescribeVpcTaskResult(ctx context.Context, taskId *string) (err error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeVpcTaskResultRequest() + defer func() { + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), err.Error()) + } + }() + request.TaskId = taskId + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeVpcTaskResult(request) + if err != nil { + return tccommon.RetryError(err) + } + if response.Response.Status != nil && *response.Response.Status == VPN_TASK_STATUS_RUNNING { + return resource.RetryableError(errors.New("VPN task is running")) + } + return nil + }) + if err != nil { + return err + } + return +} + +func (me *VpcService) DescribeTaskResult(ctx context.Context, taskId *uint64) (result *vpc.DescribeTaskResultResponse, err error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeTaskResultRequest() + defer func() { + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), err.Error()) + } + }() + request.TaskId = taskId + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeTaskResult(request) + if err != nil { + return tccommon.RetryError(err) + } + result = response + return nil + }) + if err != nil { + return nil, err + } + return +} + +func (me *VpcService) DescribeVpnSslServerById(ctx context.Context, sslId string) (has bool, gateway *vpc.SslVpnSever, err error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpnGatewaySslServersRequest() + response *vpc.DescribeVpnGatewaySslServersResponse + ) + request.SslVpnServerIds = []*string{&sslId} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + response, err = me.client.UseVpcClient().DescribeVpnGatewaySslServers(request) + if err != nil { + ee, ok := err.(*sdkErrors.TencentCloudSDKError) + if !ok { + return tccommon.RetryError(err) + } + if ee.Code == VPCNotFound { + return nil + } else { + return tccommon.RetryError(err) + } + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", logId, request.GetAction(), request.ToJsonString(), err) + return + } + if response == nil || response.Response == nil || len(response.Response.SslVpnSeverSet) < 1 { + has = false + return + } + + gateway = response.Response.SslVpnSeverSet[0] + has = true + return +} + +func (me *VpcService) DescribeVpnGwSslServerByFilter(ctx context.Context, filters map[string]string) (instances []*vpc.SslVpnSever, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpnGatewaySslServersRequest() + ) + request.Filters = make([]*vpc.FilterObject, 0, len(filters)) + for k, v := range filters { + filter := vpc.FilterObject{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset uint64 = 0 + var pageSize uint64 = 100 + instances = make([]*vpc.SslVpnSever, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeVpnGatewaySslServers(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.SslVpnSeverSet) < 1 { + break + } + instances = append(instances, response.Response.SslVpnSeverSet...) + if len(response.Response.SslVpnSeverSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *VpcService) DeleteVpnGatewaySslServer(ctx context.Context, SslServerId string) (taskId uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteVpnGatewaySslServerRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.SslVpnServerId = &SslServerId + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet := me.client.UseVpcClient().DeleteVpnGatewaySslServer(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + taskId = *response.Response.TaskId + return nil + }) + return +} + +func (me *VpcService) DescribeVpnSslClientById(ctx context.Context, sslId string) (has bool, gateway *vpc.SslVpnClient, err error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpnGatewaySslClientsRequest() + response *vpc.DescribeVpnGatewaySslClientsResponse + ) + request.SslVpnClientIds = []*string{&sslId} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + response, err = me.client.UseVpcClient().DescribeVpnGatewaySslClients(request) + if err != nil { + ee, ok := err.(*sdkErrors.TencentCloudSDKError) + if !ok { + return tccommon.RetryError(err) + } + if ee.Code == VPCNotFound { + return nil + } else { + return tccommon.RetryError(err) + } + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", logId, request.GetAction(), request.ToJsonString(), err) + return + } + if response == nil || response.Response == nil || len(response.Response.SslVpnClientSet) < 1 { + has = false + return + } + + gateway = response.Response.SslVpnClientSet[0] + has = true + return +} + +func (me *VpcService) DescribeVpnGwSslClientByFilter(ctx context.Context, filters map[string]string) (instances []*vpc.SslVpnClient, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpnGatewaySslClientsRequest() + ) + request.Filters = make([]*vpc.Filter, 0, len(filters)) + for k, v := range filters { + filter := vpc.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset uint64 = 0 + var pageSize uint64 = 100 + instances = make([]*vpc.SslVpnClient, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeVpnGatewaySslClients(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.SslVpnClientSet) < 1 { + break + } + instances = append(instances, response.Response.SslVpnClientSet...) + if len(response.Response.SslVpnClientSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *VpcService) DeleteVpnGatewaySslClient(ctx context.Context, SslClientId string) (taskId *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteVpnGatewaySslClientRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.SslVpnClientId = &SslClientId + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet := me.client.UseVpcClient().DeleteVpnGatewaySslClient(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + taskId = response.Response.TaskId + return nil + }) + return +} + +func (me *VpcService) CreateNatGatewaySnat(ctx context.Context, natGatewayId string, snat *vpc.SourceIpTranslationNatRule) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateNatGatewaySourceIpTranslationNatRuleRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.NatGatewayId = &natGatewayId + request.SourceIpTranslationNatRules = []*vpc.SourceIpTranslationNatRule{snat} + + var response *vpc.CreateNatGatewaySourceIpTranslationNatRuleResponse + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet = me.client.UseVpcClient().CreateNatGatewaySourceIpTranslationNatRule(request) + if errRet != nil { + log.Printf("[CRITAL]%s create nat gateway source ip translation nat rule failed, reason: %v", logId, errRet) + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + if errRet != nil { + return errRet + } + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %+v, %s", response, request.GetAction()) + } + return +} + +func (me *VpcService) ModifyNatGatewaySnat(ctx context.Context, natGatewayId string, snat *vpc.SourceIpTranslationNatRule) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyNatGatewaySourceIpTranslationNatRuleRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.NatGatewayId = &natGatewayId + request.SourceIpTranslationNatRule = snat + + var response *vpc.ModifyNatGatewaySourceIpTranslationNatRuleResponse + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet = me.client.UseVpcClient().ModifyNatGatewaySourceIpTranslationNatRule(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + if errRet != nil { + return errRet + } + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + return +} + +func (me *VpcService) DeleteNatGatewaySnat(ctx context.Context, natGatewayId string, snatId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteNatGatewaySourceIpTranslationNatRuleRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.NatGatewayId = &natGatewayId + request.NatGatewaySnatIds = []*string{&snatId} + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, errRet = me.client.UseVpcClient().DeleteNatGatewaySourceIpTranslationNatRule(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + return +} + +func (me *VpcService) DescribeNatGatewaySnats(ctx context.Context, natGatewayId string, filters []*vpc.Filter) (errRet error, result []*vpc.SourceIpTranslationNatRule) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeNatGatewaySourceIpTranslationNatRulesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.NatGatewayId = &natGatewayId + if len(filters) > 0 { + request.Filters = filters + } + + offset := int64(0) + limit := int64(VPN_DESCRIBE_LIMIT) + for { + request.Offset = &offset + request.Limit = &limit + var response *vpc.DescribeNatGatewaySourceIpTranslationNatRulesResponse + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet = me.client.UseVpcClient().DescribeNatGatewaySourceIpTranslationNatRules(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + if errRet != nil { + return errRet, nil + } + + if response == nil || response.Response == nil { + return fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()), nil + } else if len(response.Response.SourceIpTranslationNatRuleSet) > 0 { + result = append(result, response.Response.SourceIpTranslationNatRuleSet...) + } else { + return + } + offset = offset + limit + } +} + +func (me *VpcService) DescribeAssistantCidr(ctx context.Context, vpcId string) (info []*vpc.AssistantCidr, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeAssistantCidrRequest() + + 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()) + } + }() + + request.VpcIds = []*string{&vpcId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeAssistantCidr(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()) + + info = response.Response.AssistantCidrSet + + return +} + +// CheckAssistantCidr used for check if cidr conflict +func (me *VpcService) CheckAssistantCidr(ctx context.Context, request *vpc.CheckAssistantCidrRequest) (info []*vpc.ConflictSource, errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().CheckAssistantCidr(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()) + + info = response.Response.ConflictSourceSet + + return +} + +func (me *VpcService) CreateAssistantCidr(ctx context.Context, request *vpc.CreateAssistantCidrRequest) (info []*vpc.AssistantCidr, errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().CreateAssistantCidr(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()) + + info = response.Response.AssistantCidrSet + + return +} + +func (me *VpcService) ModifyAssistantCidr(ctx context.Context, request *vpc.ModifyAssistantCidrRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().ModifyAssistantCidr(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 +} + +func (me *VpcService) DeleteAssistantCidr(ctx context.Context, request *vpc.DeleteAssistantCidrRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().DeleteAssistantCidr(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 +} + +func (me *VpcService) DescribeVpcBandwidthPackage(ctx context.Context, bandwidthPackageId string) (resource *vpc.BandwidthPackage, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeBandwidthPackagesRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.BandwidthPackageIds = []*string{&bandwidthPackageId} + //request.Filters = append( + // request.Filters, + // &bwp.Filter{ + // Name: helper.String("bandwidth-package_id"), + // Values: []*string{&bandwidthPackageId}, + // }, + //) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeBandwidthPackages(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response != nil && len(response.Response.BandwidthPackageSet) > 0 { + resource = response.Response.BandwidthPackageSet[0] + } + + return +} + +func (me *VpcService) DeleteVpcBandwidthPackageById(ctx context.Context, bandwidthPackageId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteBandwidthPackageRequest() + + request.BandwidthPackageId = &bandwidthPackageId + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DeleteBandwidthPackage(request) + if err != nil { + errRet = err + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *VpcService) DescribeVpcBandwidthPackageAttachment(ctx context.Context, bandwidthPackageId, resourceId string) (bandwidthPackageResources *vpc.Resource, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeBandwidthPackageResourcesRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.BandwidthPackageId = &bandwidthPackageId + request.Filters = append( + request.Filters, + &vpc.Filter{ + Name: helper.String("resource-id"), + Values: []*string{&resourceId}, + }, + ) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeBandwidthPackageResources(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.ResourceSet) < 1 { + return + } + bandwidthPackageResources = response.Response.ResourceSet[0] + + return + +} + +func (me *VpcService) DeleteVpcBandwidthPackageAttachmentById(ctx context.Context, bandwidthPackageId, resourceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewRemoveBandwidthPackageResourcesRequest() + + if strings.HasPrefix(resourceId, "eip") { + request.ResourceType = helper.String("Address") + } else { + request.ResourceType = helper.String("LoadBalance") + } + + request.BandwidthPackageId = &bandwidthPackageId + request.ResourceIds = []*string{&resourceId} + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().RemoveBandwidthPackageResources(request) + if err != nil { + errRet = err + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *VpcService) DescribeFlowLogs(ctx context.Context, request *vpc.DescribeFlowLogsRequest) (result []*vpc.FlowLog, errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().DescribeFlowLogs(request) + + if err != nil { + errRet = err + return + } + + result = response.Response.FlowLog + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *VpcService) DescribeVpcFlowLogById(ctx context.Context, flowLogId, vpcId string) (FlowLog *vpc.FlowLog, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeFlowLogRequest() + request.FlowLogId = &flowLogId + + if vpcId != "" { + request.VpcId = &vpcId + } + + 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.UseVpcClient().DescribeFlowLog(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()) + + if len(response.Response.FlowLog) < 1 { + return + } + + FlowLog = response.Response.FlowLog[0] + return +} + +func (me *VpcService) DeleteVpcFlowLogById(ctx context.Context, flowLogId, vpcId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteFlowLogRequest() + request.FlowLogId = &flowLogId + if vpcId != "" { + request.VpcId = &vpcId + } + + 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.UseVpcClient().DeleteFlowLog(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 +} + +func (me *VpcService) DescribeVpcEndPointServiceById(ctx context.Context, endPointServiceId string) (endPointService *vpc.EndPointService, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeVpcEndPointServiceRequest() + request.EndPointServiceIds = []*string{&endPointServiceId} + + 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()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*vpc.EndPointService, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeVpcEndPointService(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()) + + if response == nil || len(response.Response.EndPointServiceSet) < 1 { + break + } + instances = append(instances, response.Response.EndPointServiceSet...) + if len(response.Response.EndPointServiceSet) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + endPointService = instances[0] + return +} + +func (me *VpcService) DeleteVpcEndPointServiceById(ctx context.Context, endPointServiceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteVpcEndPointServiceRequest() + request.EndPointServiceId = &endPointServiceId + + 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.UseVpcClient().DeleteVpcEndPointService(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 +} + +func (me *VpcService) DescribeVpcEndPointById(ctx context.Context, endPointId string) (endPoint *vpc.EndPoint, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeVpcEndPointRequest() + request.EndPointId = []*string{&endPointId} + + 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()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*vpc.EndPoint, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeVpcEndPoint(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()) + + if response == nil || len(response.Response.EndPointSet) < 1 { + break + } + instances = append(instances, response.Response.EndPointSet...) + if len(response.Response.EndPointSet) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + endPoint = instances[0] + return +} + +func (me *VpcService) DeleteVpcEndPointById(ctx context.Context, endPointId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteVpcEndPointRequest() + request.EndPointId = &endPointId + + 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.UseVpcClient().DeleteVpcEndPoint(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 +} + +func (me *VpcService) DescribeVpcEndPointServiceWhiteListById(ctx context.Context, userUin string, endPointServiceId string) (endPointServiceWhiteList *vpc.VpcEndPointServiceUser, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeVpcEndPointServiceWhiteListRequest() + + request.Filters = make([]*vpc.Filter, 0) + if userUin != "" { + filter := &vpc.Filter{ + Name: helper.String("user-uin"), + Values: []*string{&userUin}, + } + request.Filters = append(request.Filters, filter) + } + if endPointServiceId != "" { + filter := &vpc.Filter{ + Name: helper.String("end-point-service-id"), + Values: []*string{&endPointServiceId}, + } + request.Filters = append(request.Filters, filter) + } + + 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()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*vpc.VpcEndPointServiceUser, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeVpcEndPointServiceWhiteList(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()) + + if response == nil || len(response.Response.VpcEndpointServiceUserSet) < 1 { + break + } + instances = append(instances, response.Response.VpcEndpointServiceUserSet...) + if len(response.Response.VpcEndpointServiceUserSet) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + endPointServiceWhiteList = instances[0] + return +} + +func (me *VpcService) DeleteVpcEndPointServiceWhiteListById(ctx context.Context, userUin string, endPointServiceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteVpcEndPointServiceWhiteListRequest() + request.UserUin = []*string{&userUin} + request.EndPointServiceId = &endPointServiceId + + 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.UseVpcClient().DeleteVpcEndPointServiceWhiteList(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 +} + +func (me *VpcService) DescribeVpcBandwidthPackageByEip(ctx context.Context, eipId string) (resource *vpc.BandwidthPackage, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeBandwidthPackagesRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.Filters = append( + request.Filters, + &vpc.Filter{ + Name: helper.String("resource.resource-id"), + Values: []*string{&eipId}, + }, + ) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeBandwidthPackages(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response != nil && len(response.Response.BandwidthPackageSet) > 0 { + resource = response.Response.BandwidthPackageSet[0] + } + + return +} + +func (me *VpcService) DescribeVpcCcnRoutesById(ctx context.Context, ccnId string, routeId string) (ccnRoutes *vpc.CcnRoute, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeCcnRoutesRequest() + request.CcnId = &ccnId + + 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.UseVpcClient().DescribeCcnRoutes(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()) + + for _, route := range response.Response.RouteSet { + if *route.RouteId == routeId { + ccnRoutes = route + return + } + } + + return +} + +func (me *VpcService) DescribeCcnCrossBorderComplianceByFilter(ctx context.Context, param map[string]interface{}) (crossBorderCompliance []*vpc.CrossBorderCompliance, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeCrossBorderComplianceRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "service_provider" { + request.ServiceProvider = v.(*string) + } + if k == "compliance_id" { + if *v.(*uint64) != 0 { + request.ComplianceId = v.(*uint64) + } + } + if k == "company" { + request.Company = v.(*string) + } + if k == "uniform_social_credit_code" { + request.UniformSocialCreditCode = v.(*string) + } + if k == "legal_person" { + request.LegalPerson = v.(*string) + } + if k == "issuing_authority" { + request.IssuingAuthority = v.(*string) + } + if k == "business_address" { + request.BusinessAddress = v.(*string) + } + if k == "post_code" { + if *v.(*uint64) != 0 { + request.PostCode = v.(*uint64) + } + } + if k == "manager" { + request.Manager = v.(*string) + } + if k == "manager_id" { + request.ManagerId = v.(*string) + } + if k == "manager_address" { + request.ManagerAddress = v.(*string) + } + if k == "manager_telephone" { + request.ManagerTelephone = v.(*string) + } + if k == "email" { + request.Email = v.(*string) + } + if k == "service_start_date" { + request.ServiceStartDate = v.(*string) + } + if k == "service_end_date" { + request.ServiceEndDate = v.(*string) + } + if k == "state" { + request.State = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeCrossBorderCompliance(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()) + + if response == nil || len(response.Response.CrossBorderComplianceSet) < 1 { + break + } + crossBorderCompliance = append(crossBorderCompliance, response.Response.CrossBorderComplianceSet...) + if len(response.Response.CrossBorderComplianceSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeTenantCcnByFilter(ctx context.Context, param map[string]interface{}) (tenantCcn []*vpc.CcnInstanceInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeTenantCcnsRequest() + ) + + 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()) + } + }() + + request.Filters = make([]*vpc.Filter, 0, len(param)) + for k, v := range param { + filter := &vpc.Filter{ + Name: helper.String(k), + Values: v.([]*string), + } + request.Filters = append(request.Filters, filter) + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeTenantCcns(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()) + + if response == nil || len(response.Response.CcnSet) < 1 { + break + } + tenantCcn = append(tenantCcn, response.Response.CcnSet...) + if len(response.Response.CcnSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeCcnCrossBorderFlowMonitorByFilter(ctx context.Context, param map[string]interface{}) (crossBorderFlowMonitor []*vpc.CrossBorderFlowMonitorData, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeCrossBorderFlowMonitorRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "source_region" { + request.SourceRegion = v.(*string) + } + if k == "destination_region" { + request.DestinationRegion = v.(*string) + } + if k == "ccn_id" { + request.CcnId = v.(*string) + } + if k == "ccn_uin" { + request.CcnUin = v.(*string) + } + if k == "period" { + if *v.(*int64) != 0 { + request.Period = v.(*int64) + } + } + if k == "start_time" { + request.StartTime = v.(*string) + } + if k == "end_time" { + request.EndTime = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeCrossBorderFlowMonitor(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()) + + if response == nil || len(response.Response.CrossBorderFlowMonitorData) < 1 { + return + } + + crossBorderFlowMonitor = response.Response.CrossBorderFlowMonitorData + + return +} + +func (me *VpcService) DescribeVpnCustomerGatewayVendors(ctx context.Context) (vpnCustomerGatewayVendors []*vpc.CustomerGatewayVendor, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeCustomerGatewayVendorsRequest() + ) + + 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.UseVpcClient().DescribeCustomerGatewayVendors(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()) + + if response == nil || len(response.Response.CustomerGatewayVendorSet) < 1 { + return + } + + vpnCustomerGatewayVendors = response.Response.CustomerGatewayVendorSet + return +} + +func (me *VpcService) DescribeVpcVpnGatewayCcnRoutesById(ctx context.Context, vpnGatewayId string, routeId string) (vpnGatewayCcnRoutes *vpc.VpngwCcnRoutes, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeVpnGatewayCcnRoutesRequest() + request.VpnGatewayId = &vpnGatewayId + + 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.UseVpcClient().DescribeVpnGatewayCcnRoutes(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()) + + if len(response.Response.RouteSet) < 1 { + return + } + + for _, route := range response.Response.RouteSet { + if *route.RouteId == routeId { + vpnGatewayCcnRoutes = route + break + } + } + return +} + +func (me *VpcService) DescribeVpcIpv6AddressById(ctx context.Context, ip6AddressId string) (ipv6Address *vpc.Address, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeIp6AddressesRequest() + request.Ip6AddressIds = []*string{&ip6AddressId} + + 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.UseVpcClient().DescribeIp6Addresses(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()) + + if len(response.Response.AddressSet) < 1 { + return + } + + ipv6Address = response.Response.AddressSet[0] + return +} + +func (me *VpcService) DeleteVpcIpv6AddressById(ctx context.Context, ip6AddressId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewReleaseIp6AddressesBandwidthRequest() + request.Ip6AddressIds = []*string{&ip6AddressId} + + 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.UseVpcClient().ReleaseIp6AddressesBandwidth(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 +} + +func (me *VpcService) VpcIpv6AddressStateRefreshFunc(taskId string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + ctx := tccommon.ContextNil + + taskId := helper.StrToUint64Point(taskId) + + object, err := me.DescribeTaskResult(ctx, taskId) + + if err != nil { + return nil, "", err + } + + return object, helper.PString(object.Response.Result), nil + } +} + +func (me *VpcService) DescribeVpcCcnRegionBandwidthLimitsByFilter(ctx context.Context, param map[string]interface{}) (CcnRegionBandwidthLimits []*vpc.CcnBandwidth, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeCrossBorderCcnRegionBandwidthLimitsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "filters" { + request.Filters = v.([]*vpc.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeCrossBorderCcnRegionBandwidthLimits(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()) + + if response == nil || len(response.Response.CcnBandwidthSet) < 1 { + break + } + CcnRegionBandwidthLimits = append(CcnRegionBandwidthLimits, response.Response.CcnBandwidthSet...) + if len(response.Response.CcnBandwidthSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeNatDcRouteByFilter(ctx context.Context, param map[string]interface{}) (natDcRoute []*vpc.NatDirectConnectGatewayRoute, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeNatGatewayDirectConnectGatewayRouteRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "NatGatewayId" { + request.NatGatewayId = v.(*string) + } + if k == "VpcId" { + request.VpcId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeNatGatewayDirectConnectGatewayRoute(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()) + + if response == nil || len(response.Response.NatDirectConnectGatewayRouteSet) < 1 { + break + } + natDcRoute = append(natDcRoute, response.Response.NatDirectConnectGatewayRouteSet...) + if len(response.Response.NatDirectConnectGatewayRouteSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeEipAddressQuota(ctx context.Context) (addressQuota []*vpc.Quota, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeAddressQuotaRequest() + ) + + 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.UseVpcClient().DescribeAddressQuota(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()) + + addressQuota = append(addressQuota, response.Response.QuotaSet...) + + return +} + +func (me *VpcService) DescribeEipNetworkAccountType(ctx context.Context) (networkAccountType *string, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeNetworkAccountTypeRequest() + ) + + 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.UseVpcClient().DescribeNetworkAccountType(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()) + + networkAccountType = response.Response.NetworkAccountType + + return +} + +func (me *VpcService) DescribeVpcBandwidthPackageQuota(ctx context.Context) (bandwidthPackageQuota []*vpc.Quota, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeBandwidthPackageQuotaRequest() + ) + + 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.UseVpcClient().DescribeBandwidthPackageQuota(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()) + + bandwidthPackageQuota = append(bandwidthPackageQuota, response.Response.QuotaSet...) + + return +} + +func (me *VpcService) DescribeVpcBandwidthPackageBillUsageByFilter(ctx context.Context, param map[string]interface{}) (bandwidthPackageBillUsage []*vpc.BandwidthPackageBillBandwidth, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeBandwidthPackageBillUsageRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "BandwidthPackageId" { + request.BandwidthPackageId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeBandwidthPackageBillUsage(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()) + + bandwidthPackageBillUsage = append(bandwidthPackageBillUsage, response.Response.BandwidthPackageBillBandwidthSet...) + + return +} + +func (me *VpcService) DescribeVpcTrafficPackageById(ctx context.Context, trafficPackageId string) (TrafficPackage *vpc.TrafficPackage, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeTrafficPackagesRequest() + request.TrafficPackageIds = []*string{&trafficPackageId} + + 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.UseVpcClient().DescribeTrafficPackages(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()) + + if len(response.Response.TrafficPackageSet) < 1 { + return + } + + TrafficPackage = response.Response.TrafficPackageSet[0] + return +} + +func (me *VpcService) DeleteVpcTrafficPackageById(ctx context.Context, trafficPackageId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteTrafficPackagesRequest() + request.TrafficPackageIds = []*string{&trafficPackageId} + + 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.UseVpcClient().DeleteTrafficPackages(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 +} + +func (me *VpcService) DescribeVpcSnapshotPoliciesById(ctx context.Context, snapshotPolicyId string) (snapshotPolices []*vpc.SnapshotPolicy, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeSnapshotPoliciesRequest() + request.SnapshotPolicyIds = []*string{&snapshotPolicyId} + + 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.UseVpcClient().DescribeSnapshotPolicies(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()) + + snapshotPolices = response.Response.SnapshotPolicySet + return +} + +func (me *VpcService) DeleteVpcSnapshotPoliciesById(ctx context.Context, snapshotPolicyId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteSnapshotPoliciesRequest() + request.SnapshotPolicyIds = []*string{&snapshotPolicyId} + + 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.UseVpcClient().DeleteSnapshotPolicies(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 +} + +func (me *VpcService) DescribeVpcSnapshotPolicyAttachmentById(ctx context.Context, snapshotPolicyId string) (snapshotPolicyAttachment []*vpc.SnapshotInstance, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeSnapshotAttachedInstancesRequest() + request.SnapshotPolicyId = &snapshotPolicyId + + 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.UseVpcClient().DescribeSnapshotAttachedInstances(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()) + + if len(response.Response.InstanceSet) < 1 { + return + } + + snapshotPolicyAttachment = response.Response.InstanceSet + return +} + +func (me *VpcService) DeleteVpcSnapshotPolicyAttachmentById(ctx context.Context, snapshotPolicyId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDetachSnapshotInstancesRequest() + request.SnapshotPolicyId = &snapshotPolicyId + + snapshotInstace, err := me.DescribeVpcSnapshotPolicyAttachmentById(ctx, snapshotPolicyId) + if err != nil { + errRet = err + return + } + request.Instances = snapshotInstace + + 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.UseVpcClient().DetachSnapshotInstances(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 +} + +func (me *VpcService) DescribeVpcNetDetectById(ctx context.Context, netDetectId string) (netDetect *vpc.NetDetect, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeNetDetectsRequest() + request.NetDetectIds = []*string{&netDetectId} + + 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.UseVpcClient().DescribeNetDetects(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()) + + if len(response.Response.NetDetectSet) < 1 { + return + } + + netDetect = response.Response.NetDetectSet[0] + return +} + +func (me *VpcService) DeleteVpcNetDetectById(ctx context.Context, netDetectId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteNetDetectRequest() + request.NetDetectId = &netDetectId + + 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.UseVpcClient().DeleteNetDetect(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 +} + +func (me *VpcService) DescribeVpcClassicLinkAttachmentById(ctx context.Context, vpcId string, instanceId string) (classicLinkAttachment *vpc.ClassicLinkInstance, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeClassicLinkInstancesRequest() + filter := vpc.FilterObject{ + Name: helper.String("vpc-id"), + Values: []*string{&vpcId}, + } + request.Filters = append(request.Filters, &filter) + + 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()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + instances := make([]*vpc.ClassicLinkInstance, 0) + for { + request.Offset = helper.Int64ToStrPoint(offset) + request.Limit = helper.Int64ToStrPoint(limit) + response, err := me.client.UseVpcClient().DescribeClassicLinkInstances(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()) + + if response == nil || len(response.Response.ClassicLinkInstanceSet) < 1 { + break + } + instances = append(instances, response.Response.ClassicLinkInstanceSet...) + if len(response.Response.ClassicLinkInstanceSet) < int(limit) { + break + } + offset += limit + } + + if len(instances) < 1 { + return + } + + for _, instance := range instances { + if *instance.InstanceId == instanceId { + classicLinkAttachment = instance + } + } + + return +} + +func (me *VpcService) DeleteVpcClassicLinkAttachmentById(ctx context.Context, vpcId string, instanceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDetachClassicLinkVpcRequest() + request.VpcId = &vpcId + request.InstanceIds = []*string{&instanceId} + + 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.UseVpcClient().DetachClassicLinkVpc(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 +} + +func (me *VpcService) DescribeVpcDhcpIpById(ctx context.Context, dhcpIpId string) (dhcpIp *vpc.DhcpIp, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeDhcpIpsRequest() + request.DhcpIpIds = []*string{&dhcpIpId} + + 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.UseVpcClient().DescribeDhcpIps(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()) + + if len(response.Response.DhcpIpSet) < 1 { + return + } + + dhcpIp = response.Response.DhcpIpSet[0] + return +} + +func (me *VpcService) DeleteVpcDhcpIpById(ctx context.Context, dhcpIpId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteDhcpIpRequest() + request.DhcpIpId = &dhcpIpId + + 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.UseVpcClient().DeleteDhcpIp(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 +} + +func (me *VpcService) DescribeVpcDhcpAssociateAddressById(ctx context.Context, dhcpIpId string, addressIp string) (dhcpAssociateAddress *vpc.DhcpIp, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeDhcpIpsRequest() + request.DhcpIpIds = []*string{&dhcpIpId} + + 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.UseVpcClient().DescribeDhcpIps(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()) + + if len(response.Response.DhcpIpSet) < 1 { + return + } + + dhcpIp := response.Response.DhcpIpSet[0] + if *dhcpIp.AddressIp != addressIp { + return + } + dhcpAssociateAddress = dhcpIp + + return +} + +func (me *VpcService) DeleteVpcDhcpAssociateAddressById(ctx context.Context, dhcpIpId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDisassociateDhcpIpWithAddressIpRequest() + request.DhcpIpId = &dhcpIpId + + 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.UseVpcClient().DisassociateDhcpIpWithAddressIp(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 +} + +func (me *VpcService) DescribeVpcById(ctx context.Context, vpcId string) (instance *vpc.Vpc, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeVpcsRequest() + request.VpcIds = []*string{&vpcId} + + 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()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + instances := make([]*vpc.Vpc, 0) + for { + request.Offset = helper.Int64ToStrPoint(offset) + request.Limit = helper.Int64ToStrPoint(limit) + response, err := me.client.UseVpcClient().DescribeVpcs(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()) + + if response == nil || len(response.Response.VpcSet) < 1 { + break + } + instances = append(instances, response.Response.VpcSet...) + if len(response.Response.VpcSet) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + instance = instances[0] + return +} + +func (me *VpcService) DeleteVpcIpv6CidrBlockById(ctx context.Context, vpcId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewUnassignIpv6CidrBlockRequest() + request.VpcId = &vpcId + + 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.UseVpcClient().UnassignIpv6CidrBlock(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 +} + +func (me *VpcService) DescribeSubnetById(ctx context.Context, subnetId string) (instance *vpc.Subnet, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeSubnetsRequest() + request.SubnetIds = []*string{&subnetId} + + 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()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + instances := make([]*vpc.Subnet, 0) + for { + request.Offset = helper.Int64ToStrPoint(offset) + request.Limit = helper.Int64ToStrPoint(limit) + response, err := me.client.UseVpcClient().DescribeSubnets(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()) + + if response == nil || len(response.Response.SubnetSet) < 1 { + break + } + instances = append(instances, response.Response.SubnetSet...) + if len(response.Response.SubnetSet) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + instance = instances[0] + return +} + +func (me *VpcService) DeleteVpcIpv6SubnetCidrBlockById(ctx context.Context, vpcId string, subnetId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewUnassignIpv6SubnetCidrBlockRequest() + request.VpcId = &vpcId + + ipv6SubnetCidrBlock := vpc.Ipv6SubnetCidrBlock{} + ipv6SubnetCidrBlock.SubnetId = &subnetId + request.Ipv6SubnetCidrBlocks = append(request.Ipv6SubnetCidrBlocks, &ipv6SubnetCidrBlock) + + 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.UseVpcClient().UnassignIpv6SubnetCidrBlock(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 +} + +func (me *VpcService) DescribeVpcIpv6EniAddressById(ctx context.Context, vpcId string, ipv6Address string) (ipv6EniAddress *vpc.VpcIpv6Address, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeVpcIpv6AddressesRequest() + request.VpcId = &vpcId + request.Ipv6Addresses = []*string{&ipv6Address} + + 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.UseVpcClient().DescribeVpcIpv6Addresses(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()) + + if len(response.Response.Ipv6AddressSet) < 1 { + return + } + + ipv6EniAddress = response.Response.Ipv6AddressSet[0] + return +} + +func (me *VpcService) DeleteVpcIpv6EniAddressById(ctx context.Context, networkInterfaceId string, ipv6Address string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewUnassignIpv6AddressesRequest() + request.NetworkInterfaceId = &networkInterfaceId + address := vpc.Ipv6Address{} + address.Address = &ipv6Address + request.Ipv6Addresses = append(request.Ipv6Addresses, &address) + + 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.UseVpcClient().UnassignIpv6Addresses(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 +} + +func (me *VpcService) DescribeVpcLocalGatewayById(ctx context.Context, localGatewayId string) (localGateway *vpc.LocalGateway, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeLocalGatewayRequest() + + filter := vpc.Filter{ + Name: helper.String("local-gateway-id"), + Values: []*string{&localGatewayId}, + } + + request.Filters = append(request.Filters, &filter) + + 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.UseVpcClient().DescribeLocalGateway(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()) + + if len(response.Response.LocalGatewaySet) < 1 { + return + } + + localGateway = response.Response.LocalGatewaySet[0] + return +} + +func (me *VpcService) DeleteVpcLocalGatewayById(ctx context.Context, cdcId string, localGatewayId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteLocalGatewayRequest() + request.CdcId = &cdcId + request.LocalGatewayId = &localGatewayId + + 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.UseVpcClient().DeleteLocalGateway(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 +} + +func (me *VpcService) DescribeVpcAccountAttributes(ctx context.Context) (accountAttributes []*vpc.AccountAttribute, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeAccountAttributesRequest() + ) + + 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.UseVpcClient().DescribeAccountAttributes(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()) + + accountAttributes = response.Response.AccountAttributeSet + + return +} + +func (me *VpcService) DescribeVpcClassicLinkInstancesByFilter(ctx context.Context, param map[string]interface{}) (classicLinkInstances []*vpc.ClassicLinkInstance, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeClassicLinkInstancesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Filters" { + request.Filters = v.([]*vpc.FilterObject) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = helper.Int64ToStrPoint(offset) + request.Limit = helper.Int64ToStrPoint(limit) + response, err := me.client.UseVpcClient().DescribeClassicLinkInstances(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()) + + if response == nil || len(response.Response.ClassicLinkInstanceSet) < 1 { + break + } + classicLinkInstances = append(classicLinkInstances, response.Response.ClassicLinkInstanceSet...) + if len(response.Response.ClassicLinkInstanceSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeVpcGatewayFlowMonitorDetailByFilter(ctx context.Context, param map[string]interface{}) (GatewayFlowMonitorDetail []*vpc.GatewayFlowMonitorDetail, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeGatewayFlowMonitorDetailRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "TimePoint" { + request.TimePoint = v.(*string) + } + if k == "VpnId" { + request.VpnId = v.(*string) + } + if k == "DirectConnectGatewayId" { + request.DirectConnectGatewayId = v.(*string) + } + if k == "PeeringConnectionId" { + request.PeeringConnectionId = v.(*string) + } + if k == "NatId" { + request.NatId = v.(*string) + } + if k == "OrderField" { + request.OrderField = v.(*string) + } + if k == "OrderDirection" { + request.OrderDirection = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeGatewayFlowMonitorDetail(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()) + + if response == nil || len(response.Response.GatewayFlowMonitorDetailSet) < 1 { + break + } + GatewayFlowMonitorDetail = append(GatewayFlowMonitorDetail, response.Response.GatewayFlowMonitorDetailSet...) + if len(response.Response.GatewayFlowMonitorDetailSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeVpcGatewayFlowQosByFilter(ctx context.Context, param map[string]interface{}) (GatewayFlowQos []*vpc.GatewayQos, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeGatewayFlowQosRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "GatewayId" { + request.GatewayId = v.(*string) + } + if k == "IpAddresses" { + request.IpAddresses = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeGatewayFlowQos(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()) + + if response == nil || len(response.Response.GatewayQosSet) < 1 { + break + } + GatewayFlowQos = append(GatewayFlowQos, response.Response.GatewayQosSet...) + if len(response.Response.GatewayQosSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeVpcCvmInstancesByFilter(ctx context.Context, param map[string]interface{}) (CvmInstances []*vpc.CvmInstance, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpcInstancesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Filters" { + request.Filters = v.([]*vpc.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeVpcInstances(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()) + + if response == nil || len(response.Response.InstanceSet) < 1 { + break + } + CvmInstances = append(CvmInstances, response.Response.InstanceSet...) + if len(response.Response.InstanceSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeVpcNetDetectStatesByFilter(ctx context.Context, param map[string]interface{}) (NetDetectStates []*vpc.NetDetectState, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeNetDetectStatesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "NetDetectIds" { + request.NetDetectIds = v.([]*string) + } + if k == "Filters" { + request.Filters = v.([]*vpc.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeNetDetectStates(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()) + + if response == nil || len(response.Response.NetDetectStateSet) < 1 { + break + } + NetDetectStates = append(NetDetectStates, response.Response.NetDetectStateSet...) + if len(response.Response.NetDetectStateSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeVpcNetworkInterfaceLimit(ctx context.Context, param map[string]interface{}) (networkInterfaceLimit *vpc.DescribeNetworkInterfaceLimitResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeNetworkInterfaceLimitRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeNetworkInterfaceLimit(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()) + + networkInterfaceLimit = response.Response + + return +} + +func (me *VpcService) DescribeVpcPrivateIpAddresses(ctx context.Context, param map[string]interface{}) (PrivateIpAddresses []*vpc.VpcPrivateIpAddress, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpcPrivateIpAddressesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "VpcId" { + request.VpcId = v.(*string) + } + if k == "PrivateIpAddresses" { + request.PrivateIpAddresses = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeVpcPrivateIpAddresses(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()) + + PrivateIpAddresses = response.Response.VpcPrivateIpAddressSet + + return +} + +func (me *VpcService) DescribeVpcProductQuota(ctx context.Context, param map[string]interface{}) (ProductQuota []*vpc.ProductQuota, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeProductQuotaRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Product" { + request.Product = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeProductQuota(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()) + + ProductQuota = response.Response.ProductQuotaSet + + return +} + +func (me *VpcService) DescribeVpcResourceDashboard(ctx context.Context, param map[string]interface{}) (ResourceDashboard []*vpc.ResourceDashboard, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpcResourceDashboardRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "VpcIds" { + request.VpcIds = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeVpcResourceDashboard(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()) + + ResourceDashboard = response.Response.ResourceDashboardSet + + return +} + +func (me *VpcService) DescribeVpcRouteConflicts(ctx context.Context, param map[string]interface{}) (routeConflicts []*vpc.RouteConflict, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeRouteConflictsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "RouteTableId" { + request.RouteTableId = v.(*string) + } + if k == "DestinationCidrBlocks" { + request.DestinationCidrBlocks = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeRouteConflicts(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()) + + routeConflicts = response.Response.RouteConflictSet + + return +} + +func (me *VpcService) DescribeVpcSecurityGroupLimits(ctx context.Context, param map[string]interface{}) (securityGroupLimit *vpc.SecurityGroupLimitSet, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeSecurityGroupLimitsRequest() + ) + + 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.UseVpcClient().DescribeSecurityGroupLimits(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()) + + securityGroupLimit = response.Response.SecurityGroupLimitSet + + return +} + +func (me *VpcService) DescribeVpcSecurityGroupReferences(ctx context.Context, param map[string]interface{}) (securityGroupReferences []*vpc.ReferredSecurityGroup, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeSecurityGroupReferencesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "SecurityGroupIds" { + request.SecurityGroupIds = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeSecurityGroupReferences(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()) + + securityGroupReferences = response.Response.ReferredSecurityGroupSet + + return +} + +func (me *VpcService) DescribeVpcSgSnapshotFileContent(ctx context.Context, param map[string]interface{}) (sgSnapshotFileContent *vpc.DescribeSgSnapshotFileContentResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeSgSnapshotFileContentRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "SnapshotPolicyId" { + request.SnapshotPolicyId = v.(*string) + } + if k == "SnapshotFileId" { + request.SnapshotFileId = v.(*string) + } + if k == "SecurityGroupId" { + request.SecurityGroupId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeSgSnapshotFileContent(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()) + + sgSnapshotFileContent = response.Response + + return +} + +func (me *VpcService) DescribeVpcSnapshotFilesByFilter(ctx context.Context, param map[string]interface{}) (SnapshotFiles []*vpc.SnapshotFileInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeSnapshotFilesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "BusinessType" { + request.BusinessType = v.(*string) + } + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + if k == "StartDate" { + request.StartDate = v.(*string) + } + if k == "EndDate" { + request.EndDate = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeSnapshotFiles(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()) + + if response == nil || len(response.Response.SnapshotFileSet) < 1 { + break + } + SnapshotFiles = append(SnapshotFiles, response.Response.SnapshotFileSet...) + if len(response.Response.SnapshotFileSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeVpcSubnetResourceDashboardByFilter(ctx context.Context, param map[string]interface{}) (subnetResourceDashboard []*vpc.ResourceStatistics, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeSubnetResourceDashboardRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "SubnetIds" { + request.SubnetIds = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeSubnetResourceDashboard(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()) + + subnetResourceDashboard = response.Response.ResourceStatisticsSet + + return +} + +func (me *VpcService) DescribeVpcTemplateLimits(ctx context.Context) (templateLimit *vpc.TemplateLimit, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeTemplateLimitsRequest() + ) + + 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.UseVpcClient().DescribeTemplateLimits(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()) + + templateLimit = response.Response.TemplateLimit + + return +} + +func (me *VpcService) DescribeVpcUsedIpAddressByFilter(ctx context.Context, param map[string]interface{}) (UsedIpAddress []*vpc.IpAddressStates, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeUsedIpAddressRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "VpcId" { + request.VpcId = v.(*string) + } + if k == "SubnetId" { + request.SubnetId = v.(*string) + } + if k == "IpAddresses" { + request.IpAddresses = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeUsedIpAddress(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()) + + if response == nil || len(response.Response.IpAddressStates) < 1 { + break + } + UsedIpAddress = append(UsedIpAddress, response.Response.IpAddressStates...) + if len(response.Response.IpAddressStates) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeVpcLimitsByFilter(ctx context.Context, param map[string]interface{}) (limits []*vpc.VpcLimit, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpcLimitsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "LimitTypes" { + request.LimitTypes = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeVpcLimits(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()) + + limits = response.Response.VpcLimitSet + + return +} + +func (me *VpcService) DescribeVpcNetworkAclQuintupleById(ctx context.Context, networkAclId string) (networkAclQuintuples []*vpc.NetworkAclQuintupleEntry, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeNetworkAclQuintupleEntriesRequest() + request.NetworkAclId = &networkAclId + + 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.UseVpcClient().DescribeNetworkAclQuintupleEntries(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()) + + if len(response.Response.NetworkAclQuintupleSet) < 1 { + return + } + + networkAclQuintuples = response.Response.NetworkAclQuintupleSet + return +} + +func (me *VpcService) DeleteVpcNetworkAclQuintupleById(ctx context.Context, networkAclId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteNetworkAclQuintupleEntriesRequest() + request.NetworkAclId = &networkAclId + + 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.UseVpcClient().DeleteNetworkAclQuintupleEntries(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 +} + +func (me *VpcService) DeleteVpcEniSgAttachmentById(ctx context.Context, networkInterfaceId string, securityGroupIds []string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDisassociateNetworkInterfaceSecurityGroupsRequest() + request.NetworkInterfaceIds = []*string{&networkInterfaceId} + request.SecurityGroupIds = common.StringPtrs(securityGroupIds) + + 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.UseVpcClient().DisassociateNetworkInterfaceSecurityGroups(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 +} + +func (me *VpcService) DescribeVpcNetDetectStateCheck(ctx context.Context, param map[string]interface{}) (netDetectStateCheck []*vpc.NetDetectIpState, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewCheckNetDetectStateRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "DetectDestinationIp" { + request.DetectDestinationIp = v.([]*string) + } + if k == "NextHopType" { + request.NextHopType = v.(*string) + } + if k == "NextHopDestination" { + request.NextHopDestination = v.(*string) + } + if k == "NetDetectId" { + request.NetDetectId = v.(*string) + } + if k == "VpcId" { + request.VpcId = v.(*string) + } + if k == "SubnetId" { + request.SubnetId = v.(*string) + } + if k == "NetDetectName" { + request.NetDetectName = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().CheckNetDetectState(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()) + + netDetectStateCheck = response.Response.NetDetectIpStateSet + + return +} + +func (me *VpcService) DescribeVpcNotifyRoutesById(ctx context.Context, routeTableId string, routeItemId string) (notifyRoute *vpc.Route, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeRouteTablesRequest() + request.RouteTableIds = []*string{&routeTableId} + + 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.UseVpcClient().DescribeRouteTables(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()) + + if len(response.Response.RouteTableSet) < 1 { + return + } + + for _, routeTable := range response.Response.RouteTableSet { + for _, route := range routeTable.RouteSet { + if *route.RouteItemId == routeItemId { + notifyRoute = route + break + } + } + } + return +} + +func (me *VpcService) DeleteVpcNotifyRoutesById(ctx context.Context, routeTableId string, routeItemId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewWithdrawNotifyRoutesRequest() + request.RouteTableId = &routeTableId + request.RouteItemIds = []*string{&routeItemId} + + 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.UseVpcClient().WithdrawNotifyRoutes(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 +} + +func (me *VpcService) DescribeVpnDefaultHealthCheckIp(ctx context.Context, param map[string]interface{}) (defaultHealthCheck *vpc.GenerateVpnConnectionDefaultHealthCheckIpResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewGenerateVpnConnectionDefaultHealthCheckIpRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "VpnGatewayId" { + request.VpnGatewayId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().GenerateVpnConnectionDefaultHealthCheckIp(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()) + + defaultHealthCheck = response.Response + + return +} From 8946830ee8c2c303d02d77023f0bd52e3ff43fbf Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Tue, 19 Dec 2023 17:27:18 +0800 Subject: [PATCH 05/31] refactor: migrate package tencentcloud/services/cdh --- tencentcloud/provider.go | 5 +- .../cdh}/data_source_tc_cdh_instances.go | 21 ++- .../cdh}/data_source_tc_cdh_instances_test.go | 14 +- tencentcloud/services/cdh/extension_cdh.go | 24 +++ .../cdh}/resource_tc_cdh_instance.go | 67 +++---- .../cdh}/resource_tc_cdh_instance_test.go | 28 +-- .../services/cdh/service_tencentcloud_cdh.go | 177 ++++++++++++++++++ 7 files changed, 274 insertions(+), 62 deletions(-) rename tencentcloud/{ => services/cdh}/data_source_tc_cdh_instances.go (92%) rename tencentcloud/{ => services/cdh}/data_source_tc_cdh_instances_test.go (83%) create mode 100644 tencentcloud/services/cdh/extension_cdh.go rename tencentcloud/{ => services/cdh}/resource_tc_cdh_instance.go (81%) rename tencentcloud/{ => services/cdh}/resource_tc_cdh_instance_test.go (77%) create mode 100644 tencentcloud/services/cdh/service_tencentcloud_cdh.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 9998ce37cd..63e500c1c5 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdh" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ccn" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cat" @@ -582,7 +583,7 @@ func Provider() *schema.Provider { "tencentcloud_ssm_rotation_history": dataSourceTencentCloudSsmRotationHistory(), "tencentcloud_ssm_service_status": dataSourceTencentCloudSsmServiceStatus(), "tencentcloud_ssm_ssh_key_pair_value": dataSourceTencentCloudSsmSshKeyPairValue(), - "tencentcloud_cdh_instances": dataSourceTencentCloudCdhInstances(), + "tencentcloud_cdh_instances": cdh.DataSourceTencentCloudCdhInstances(), "tencentcloud_dayu_eip": dataSourceTencentCloudDayuEip(), "tencentcloud_teo_zone_available_plans": dataSourceTencentCloudTeoZoneAvailablePlans(), "tencentcloud_teo_rule_engine_settings": dataSourceTencentCloudTeoRuleEngineSettings(), @@ -1405,7 +1406,7 @@ func Provider() *schema.Provider { "tencentcloud_ssm_product_secret": resourceTencentCloudSsmProductSecret(), "tencentcloud_ssm_secret_version": resourceTencentCloudSsmSecretVersion(), "tencentcloud_ssm_rotate_product_secret": resourceTencentCloudSsmRotateProductSecret(), - "tencentcloud_cdh_instance": resourceTencentCloudCdhInstance(), + "tencentcloud_cdh_instance": cdh.ResourceTencentCloudCdhInstance(), "tencentcloud_dnspod_domain_instance": resourceTencentCloudDnspodDomainInstance(), "tencentcloud_dnspod_domain_alias": resourceTencentCloudDnspodDomainAlias(), "tencentcloud_dnspod_record": resourceTencentCloudDnspodRecord(), diff --git a/tencentcloud/data_source_tc_cdh_instances.go b/tencentcloud/services/cdh/data_source_tc_cdh_instances.go similarity index 92% rename from tencentcloud/data_source_tc_cdh_instances.go rename to tencentcloud/services/cdh/data_source_tc_cdh_instances.go index ed5c8af6be..d0e50a1384 100644 --- a/tencentcloud/data_source_tc_cdh_instances.go +++ b/tencentcloud/services/cdh/data_source_tc_cdh_instances.go @@ -1,17 +1,20 @@ -package tencentcloud +package cdh import ( "context" "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCdhInstances() *schema.Resource { +func DataSourceTencentCloudCdhInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCdhInstancesRead, @@ -169,11 +172,11 @@ func dataSourceTencentCloudCdhInstances() *schema.Resource { } func dataSourceTencentCloudCdhInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cdh_instances.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_cdh_instances.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cdhService := CdhService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } filter := make(map[string]string) @@ -195,10 +198,10 @@ func dataSourceTencentCloudCdhInstancesRead(d *schema.ResourceData, meta interfa var instances []*cvm.HostItem var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instances, errRet = cdhService.DescribeCdhInstanceByFilter(ctx, filter) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -246,7 +249,7 @@ func dataSourceTencentCloudCdhInstancesRead(d *schema.ResourceData, meta interfa output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), instanceList); err != nil { + if err := tccommon.WriteToFile(output.(string), instanceList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_cdh_instances_test.go b/tencentcloud/services/cdh/data_source_tc_cdh_instances_test.go similarity index 83% rename from tencentcloud/data_source_tc_cdh_instances_test.go rename to tencentcloud/services/cdh/data_source_tc_cdh_instances_test.go index 46f74e3253..9be4925af5 100644 --- a/tencentcloud/data_source_tc_cdh_instances_test.go +++ b/tencentcloud/services/cdh/data_source_tc_cdh_instances_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdh_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCdhInstancesDataSource(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: TestAccTencentCloudCdhInstancesDataSourceConfig, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(dataSourceName), + tcacctest.AccCheckTencentCloudDataSourceID(dataSourceName), resource.TestCheckResourceAttrSet(dataSourceName, "cdh_instance_list.0.host_id"), resource.TestCheckResourceAttrSet(dataSourceName, "cdh_instance_list.0.create_time"), resource.TestCheckResourceAttrSet(dataSourceName, "cdh_instance_list.0.expired_time"), @@ -28,7 +30,7 @@ func TestAccTencentCloudCdhInstancesDataSource(t *testing.T) { resource.TestCheckResourceAttr(dataSourceName, "cdh_instance_list.0.charge_type", "PREPAID"), resource.TestCheckResourceAttr(dataSourceName, "cdh_instance_list.0.availability_zone", "ap-guangzhou-3"), resource.TestCheckResourceAttr(dataSourceName, "cdh_instance_list.0.project_id", "0"), - resource.TestCheckResourceAttr(dataSourceName, "cdh_instance_list.0.prepaid_renew_flag", "DISABLE_NOTIFY_AND_MANUAL_RENEW"), + resource.TestCheckResourceAttr(dataSourceName, "cdh_instance_list.0.prepaid_renew_flag", "tcacctest.DISABLE_NOTIFY_AND_MANUAL_RENEW"), resource.TestCheckResourceAttr(dataSourceName, "cdh_instance_list.0.host_resource.#", "1"), ), }, @@ -46,7 +48,7 @@ resource "tencentcloud_cdh_instance" "foo" { host_type = "HC20" charge_type = "PREPAID" host_name = "unit-test" - prepaid_renew_flag = "DISABLE_NOTIFY_AND_MANUAL_RENEW" + prepaid_renew_flag = "tcacctest.DISABLE_NOTIFY_AND_MANUAL_RENEW" } data "tencentcloud_cdh_instances" "list" { diff --git a/tencentcloud/services/cdh/extension_cdh.go b/tencentcloud/services/cdh/extension_cdh.go new file mode 100644 index 0000000000..55351c0549 --- /dev/null +++ b/tencentcloud/services/cdh/extension_cdh.go @@ -0,0 +1,24 @@ +package cdh + +const ( + CDH_CHARGE_TYPE_PREPAID = "PREPAID" + + CDH_PREPAID_RENEW_FLAG_NOTIFY_AND_AUTO_RENEW = "NOTIFY_AND_AUTO_RENEW" + CDH_PREPAID_RENEW_FLAG_NOTIFY_AND_MANUAL_RENEW = "NOTIFY_AND_MANUAL_RENEW" + CDH_PREPAID_RENEW_FLAG_DISABLE_NOTIFY_AND_MANUAL_RENEW = "DISABLE_NOTIFY_AND_MANUAL_RENEW" + + CDH_HOST_STATE_PENDING = "PENDING" + CDH_HOST_STATE_LAUNCH_FAILURE = "LAUNCH_FAILURE" + CDH_HOST_RUNNING = "RUNNING" + CDH_HOST_EXPIRED = "EXPIRED" + + CDH_ZONE_SOLD_OUT_FOR_SPECIFIED_INSTANCE_ERROR = "ResourceInsufficient.ZoneSoldOutForSpecifiedInstance" +) + +var CDH_PREPAID_PERIOD = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36} + +var CDH_PREPAID_RENEW_FLAG = []string{ + CDH_PREPAID_RENEW_FLAG_NOTIFY_AND_AUTO_RENEW, + CDH_PREPAID_RENEW_FLAG_NOTIFY_AND_MANUAL_RENEW, + CDH_PREPAID_RENEW_FLAG_DISABLE_NOTIFY_AND_MANUAL_RENEW, +} diff --git a/tencentcloud/resource_tc_cdh_instance.go b/tencentcloud/services/cdh/resource_tc_cdh_instance.go similarity index 81% rename from tencentcloud/resource_tc_cdh_instance.go rename to tencentcloud/services/cdh/resource_tc_cdh_instance.go index c169b6d3c7..b5a8abc729 100644 --- a/tencentcloud/resource_tc_cdh_instance.go +++ b/tencentcloud/services/cdh/resource_tc_cdh_instance.go @@ -1,18 +1,21 @@ -package tencentcloud +package cdh import ( "context" "errors" "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCdhInstance() *schema.Resource { +func ResourceTencentCloudCdhInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCdhInstanceCreate, Read: resourceTencentCloudCdhInstanceRead, @@ -52,20 +55,20 @@ func resourceTencentCloudCdhInstance() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CDH_CHARGE_TYPE_PREPAID, - ValidateFunc: validateAllowedStringValue([]string{CDH_CHARGE_TYPE_PREPAID}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{CDH_CHARGE_TYPE_PREPAID}), Description: "The charge type of instance. Valid values are `PREPAID`. The default is `PREPAID`.", }, "prepaid_period": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue(CDH_PREPAID_PERIOD), + ValidateFunc: tccommon.ValidateAllowedIntValue(CDH_PREPAID_PERIOD), Description: "The tenancy (time unit is month) of the prepaid instance, NOTE: it only works when charge_type is set to `PREPAID`. Valid values are `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12`, `24`, `36`.", }, "prepaid_renew_flag": { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateAllowedStringValue(CDH_PREPAID_RENEW_FLAG), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDH_PREPAID_RENEW_FLAG), Description: "Auto renewal flag. Valid values: `NOTIFY_AND_AUTO_RENEW`: notify upon expiration and renew automatically, `NOTIFY_AND_MANUAL_RENEW`: notify upon expiration but do not renew automatically, `DISABLE_NOTIFY_AND_MANUAL_RENEW`: neither notify upon expiration nor renew automatically. Default value: `NOTIFY_AND_MANUAL_RENEW`. If this parameter is specified as `NOTIFY_AND_AUTO_RENEW`, the instance will be automatically renewed on a monthly basis if the account balance is sufficient. NOTE: it only works when charge_type is set to `PREPAID`.", }, //computed @@ -141,12 +144,12 @@ func resourceTencentCloudCdhInstance() *schema.Resource { } func resourceTencentCloudCdhInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdh_instance.create")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_cdh_instance.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) var ( - ctx = context.WithValue(context.TODO(), logIdKey, logId) - cdhService = CdhService{client: meta.(*TencentCloudClient).apiV3Conn} + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cdhService = CdhService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} hostType, chargeType string placement cvm.Placement hostChargePrepaid cvm.ChargePrepaid @@ -172,13 +175,13 @@ func resourceTencentCloudCdhInstanceCreate(d *schema.ResourceData, meta interfac hostChargePrepaid.RenewFlag = helper.String(v.(string)) } - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { hostId, inErr = cdhService.CreateCdhInstance(ctx, &placement, &hostChargePrepaid, chargeType, hostType) if inErr != nil { if sdkErr, ok := inErr.(*sdkErrors.TencentCloudSDKError); ok && sdkErr.Code == CDH_ZONE_SOLD_OUT_FOR_SPECIFIED_INSTANCE_ERROR { return resource.NonRetryableError(inErr) } - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -187,10 +190,10 @@ func resourceTencentCloudCdhInstanceCreate(d *schema.ResourceData, meta interfac } d.SetId(hostId) - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { hostInstance, inErr = cdhService.DescribeCdhInstanceById(ctx, d.Id()) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if *hostInstance.HostState == CDH_HOST_STATE_PENDING { return resource.RetryableError(errors.New("cdh instance is pending")) @@ -206,10 +209,10 @@ func resourceTencentCloudCdhInstanceCreate(d *schema.ResourceData, meta interfac if v, ok := d.GetOk("host_name"); ok { hostName := v.(string) - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = cdhService.ModifyHostName(ctx, d.Id(), hostName) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -221,20 +224,20 @@ func resourceTencentCloudCdhInstanceCreate(d *schema.ResourceData, meta interfac } func resourceTencentCloudCdhInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdh_instance.read")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_cdh_instance.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) var ( - ctx = context.WithValue(context.TODO(), logIdKey, logId) - cdhService = CdhService{client: meta.(*TencentCloudClient).apiV3Conn} + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cdhService = CdhService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} hostInstance *cvm.HostItem outErr, inErr error ) - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { hostInstance, inErr = cdhService.DescribeCdhInstanceById(ctx, d.Id()) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -273,12 +276,12 @@ func resourceTencentCloudCdhInstanceRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCdhInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdh_instance.update")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_cdh_instance.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) var ( - ctx = context.WithValue(context.TODO(), logIdKey, logId) - cdhService = CdhService{client: meta.(*TencentCloudClient).apiV3Conn} + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cdhService = CdhService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} outErr, inErr error ) @@ -294,10 +297,10 @@ func resourceTencentCloudCdhInstanceUpdate(d *schema.ResourceData, meta interfac } if d.HasChange("project_id") { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = cdhService.ModifyProject(ctx, d.Id(), d.Get("project_id").(int)) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -308,10 +311,10 @@ func resourceTencentCloudCdhInstanceUpdate(d *schema.ResourceData, meta interfac } if d.HasChange("host_name") { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = cdhService.ModifyHostName(ctx, d.Id(), d.Get("host_name").(string)) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -322,10 +325,10 @@ func resourceTencentCloudCdhInstanceUpdate(d *schema.ResourceData, meta interfac } if d.HasChange("prepaid_renew_flag") { - outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr = cdhService.ModifyPrepaidRenewFlag(ctx, d.Id(), d.Get("prepaid_renew_flag").(string)) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) @@ -341,7 +344,7 @@ func resourceTencentCloudCdhInstanceUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCloudCdhInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdh_instance.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cdh_instance.delete")() return fmt.Errorf("PREPAID CDH instance do not support delete operation with terraform") } diff --git a/tencentcloud/resource_tc_cdh_instance_test.go b/tencentcloud/services/cdh/resource_tc_cdh_instance_test.go similarity index 77% rename from tencentcloud/resource_tc_cdh_instance_test.go rename to tencentcloud/services/cdh/resource_tc_cdh_instance_test.go index e9a17721c5..2d48d0f9cd 100644 --- a/tencentcloud/resource_tc_cdh_instance_test.go +++ b/tencentcloud/services/cdh/resource_tc_cdh_instance_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cdh_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdh" + "context" "fmt" "testing" @@ -14,8 +18,8 @@ func TestAccTencentCloudCdhInstance_basic(t *testing.T) { resourceName := "tencentcloud_cdh_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCdhInstanceDestroy, Steps: []resource.TestStep{ { @@ -27,7 +31,7 @@ func TestAccTencentCloudCdhInstance_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "host_type", "HC20"), resource.TestCheckResourceAttr(resourceName, "host_name", "unit-test"), resource.TestCheckResourceAttr(resourceName, "charge_type", "PREPAID"), - resource.TestCheckResourceAttr(resourceName, "prepaid_renew_flag", "NOTIFY_AND_MANUAL_RENEW"), + resource.TestCheckResourceAttr(resourceName, "prepaid_renew_flag", "tcacctest.NOTIFY_AND_MANUAL_RENEW"), resource.TestCheckResourceAttr(resourceName, "host_state", "RUNNING"), resource.TestCheckResourceAttr(resourceName, "host_resource.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "create_time"), @@ -39,7 +43,7 @@ func TestAccTencentCloudCdhInstance_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckCdhInstanceExists(resourceName), resource.TestCheckResourceAttr(resourceName, "host_name", "unit-test-modify"), - resource.TestCheckResourceAttr(resourceName, "prepaid_renew_flag", "DISABLE_NOTIFY_AND_MANUAL_RENEW"), + resource.TestCheckResourceAttr(resourceName, "prepaid_renew_flag", "tcacctest.DISABLE_NOTIFY_AND_MANUAL_RENEW"), ), }, { @@ -58,8 +62,8 @@ func testAccCheckCdhInstanceDestroy(s *terraform.State) error { func testAccCheckCdhInstanceExists(name string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[name] if !ok { @@ -68,9 +72,7 @@ func testAccCheckCdhInstanceExists(name string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CDH instance][Exists] check:CDH instance id is not set") } - cdhService := CdhService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cdhService := cdh.NewCdhService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := cdhService.DescribeCdhInstanceById(ctx, rs.Primary.ID) if err != nil { return err @@ -93,7 +95,7 @@ resource "tencentcloud_cdh_instance" "foo" { charge_type = "PREPAID" prepaid_period = 1 host_name = "unit-test" - prepaid_renew_flag = "NOTIFY_AND_MANUAL_RENEW" + prepaid_renew_flag = "tcacctest.NOTIFY_AND_MANUAL_RENEW" } ` @@ -108,7 +110,7 @@ resource "tencentcloud_cdh_instance" "foo" { charge_type = "PREPAID" prepaid_period = 1 host_name = "unit-test-modify" - project_id = ` + defaultProjectId + ` - prepaid_renew_flag = "DISABLE_NOTIFY_AND_MANUAL_RENEW" + project_id = ` + tcacctest.DefaultProjectId + ` + prepaid_renew_flag = "tcacctest.DISABLE_NOTIFY_AND_MANUAL_RENEW" } ` diff --git a/tencentcloud/services/cdh/service_tencentcloud_cdh.go b/tencentcloud/services/cdh/service_tencentcloud_cdh.go new file mode 100644 index 0000000000..893ec6c4e2 --- /dev/null +++ b/tencentcloud/services/cdh/service_tencentcloud_cdh.go @@ -0,0 +1,177 @@ +package cdh + +import ( + "context" + "fmt" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +func NewCdhService(client *connectivity.TencentCloudClient) CdhService { + return CdhService{client: client} +} + +type CdhService struct { + client *connectivity.TencentCloudClient +} + +func (me *CdhService) DescribeCdhInstanceById(ctx context.Context, hostId string) (instance *cvm.HostItem, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeHostsRequest() + filter := cvm.Filter{ + Name: helper.String("host-id"), + Values: []*string{helper.String(hostId)}, + } + request.Filters = []*cvm.Filter{&filter} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeHosts(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || response.Response == nil || len(response.Response.HostSet) < 1 { + return + } + instance = response.Response.HostSet[0] + return +} + +func (me *CdhService) DescribeCdhInstanceByFilter(ctx context.Context, filters map[string]string) (instances []*cvm.HostItem, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeHostsRequest() + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + filter := cvm.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + var offset uint64 = 0 + var pageSize uint64 = 100 + instances = make([]*cvm.HostItem, 0) + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeHosts(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || response.Response == nil || len(response.Response.HostSet) < 1 { + break + } + instances = append(instances, response.Response.HostSet...) + if len(response.Response.HostSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *CdhService) CreateCdhInstance(ctx context.Context, placement *cvm.Placement, hostChargePrepaid *cvm.ChargePrepaid, hostChargeType, hostType string) (hostId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewAllocateHostsRequest() + request.Placement = placement + request.HostChargePrepaid = hostChargePrepaid + request.HostChargeType = helper.String(hostChargeType) + request.HostType = helper.String(hostType) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().AllocateHosts(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || response.Response == nil || len(response.Response.HostIdSet) < 1 { + errRet = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) + return + } + hostId = *response.Response.HostIdSet[0] + return +} + +func (me *CdhService) ModifyHostName(ctx context.Context, hostId, hostName string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyHostsAttributeRequest() + request.HostIds = []*string{helper.String(hostId)} + request.HostName = helper.String(hostName) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyHostsAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + 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 +} + +func (me *CdhService) ModifyProject(ctx context.Context, hostId string, projectId int) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyHostsAttributeRequest() + request.HostIds = []*string{helper.String(hostId)} + request.ProjectId = helper.IntUint64(projectId) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyHostsAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + 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 +} + +func (me *CdhService) ModifyPrepaidRenewFlag(ctx context.Context, hostId, renewFlag string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyHostsAttributeRequest() + request.HostIds = []*string{helper.String(hostId)} + request.RenewFlag = helper.String(renewFlag) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyHostsAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + 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 617688815198f1a6dc5fb03a208badfb5fead177 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Tue, 19 Dec 2023 18:10:46 +0800 Subject: [PATCH 06/31] fix: replace tccommon. tcacctest. in string --- .../antiddos/service_tencentcloud_antiddos.go | 8 ++--- .../cbs/data_source_tc_cbs_snapshots_test.go | 2 +- .../cbs/data_source_tc_cbs_storages_test.go | 6 ++-- ..._tc_cbs_snapshot_policy_attachment_test.go | 2 +- .../cbs/resource_tc_cbs_snapshot_test.go | 4 +-- ...resource_tc_cbs_storage_attachment_test.go | 6 ++-- .../cbs/resource_tc_cbs_storage_test.go | 32 +++++++++---------- ...ata_source_tc_ccn_bandwidth_limits_test.go | 2 +- .../resource_tc_ccn_bandwidth_limit_test.go | 2 +- .../cdh/data_source_tc_cdh_instances_test.go | 4 +-- .../cdh/resource_tc_cdh_instance_test.go | 8 ++--- 11 files changed, 38 insertions(+), 38 deletions(-) diff --git a/tencentcloud/services/antiddos/service_tencentcloud_antiddos.go b/tencentcloud/services/antiddos/service_tencentcloud_antiddos.go index aa306657ec..014bf720b3 100644 --- a/tencentcloud/services/antiddos/service_tencentcloud_antiddos.go +++ b/tencentcloud/services/antiddos/service_tencentcloud_antiddos.go @@ -43,7 +43,7 @@ func (me *AntiddosService) DescribeListBGPIPInstances(ctx context.Context, insta response, err = me.client.UseAntiddosClient().DescribeListBGPIPInstances(request) if e, ok := err.(*errors.TencentCloudSDKError); ok { - if e.GetCode() == "tccommon.InternalError.ClusterNotFound" { + if e.GetCode() == "InternalError.ClusterNotFound" { return nil } } @@ -74,7 +74,7 @@ func (me *AntiddosService) AssociateDDoSEipAddress(ctx context.Context, instance _, err := me.client.UseAntiddosClient().AssociateDDoSEipAddress(request) if e, ok := err.(*errors.TencentCloudSDKError); ok { - if e.GetCode() == "tccommon.InternalError.ClusterNotFound" { + if e.GetCode() == "InternalError.ClusterNotFound" { return nil } } @@ -105,7 +105,7 @@ func (me *AntiddosService) AssociateDDoSEipLoadBalancer(ctx context.Context, ins _, err := me.client.UseAntiddosClient().AssociateDDoSEipLoadBalancer(request) if e, ok := err.(*errors.TencentCloudSDKError); ok { - if e.GetCode() == "tccommon.InternalError.ClusterNotFound" { + if e.GetCode() == "InternalError.ClusterNotFound" { return nil } } @@ -134,7 +134,7 @@ func (me *AntiddosService) DisassociateDDoSEipAddress(ctx context.Context, insta _, err := me.client.UseAntiddosClient().DisassociateDDoSEipAddress(request) if e, ok := err.(*errors.TencentCloudSDKError); ok { - if e.GetCode() == "tccommon.InternalError.ClusterNotFound" { + if e.GetCode() == "InternalError.ClusterNotFound" { return nil } } diff --git a/tencentcloud/services/cbs/data_source_tc_cbs_snapshots_test.go b/tencentcloud/services/cbs/data_source_tc_cbs_snapshots_test.go index 21fd6fb668..498cb82d39 100644 --- a/tencentcloud/services/cbs/data_source_tc_cbs_snapshots_test.go +++ b/tencentcloud/services/cbs/data_source_tc_cbs_snapshots_test.go @@ -39,7 +39,7 @@ const testAccCbsSnapshotsDataSource = ` resource "tencentcloud_cbs_storage" "storage" { availability_zone = "ap-guangzhou-3" storage_size = 50 - storage_type = "tcacctest.CLOUD_PREMIUM" + storage_type = "CLOUD_PREMIUM" storage_name = "tf-test-storage" } diff --git a/tencentcloud/services/cbs/data_source_tc_cbs_storages_test.go b/tencentcloud/services/cbs/data_source_tc_cbs_storages_test.go index 36c9564b16..eee1e06312 100644 --- a/tencentcloud/services/cbs/data_source_tc_cbs_storages_test.go +++ b/tencentcloud/services/cbs/data_source_tc_cbs_storages_test.go @@ -23,7 +23,7 @@ func TestAccTencentCloudCbsStoragesDataSourceId(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_cbs_storages.storages", "storage_list.#", "1"), resource.TestCheckResourceAttrSet("data.tencentcloud_cbs_storages.storages", "storage_list.0.storage_id"), resource.TestCheckResourceAttr("data.tencentcloud_cbs_storages.storages", "storage_list.0.storage_name", "tf-test-storage"), - resource.TestCheckResourceAttr("data.tencentcloud_cbs_storages.storages", "storage_list.0.storage_type", "tcacctest.CLOUD_PREMIUM"), + resource.TestCheckResourceAttr("data.tencentcloud_cbs_storages.storages", "storage_list.0.storage_type", "CLOUD_PREMIUM"), resource.TestCheckResourceAttr("data.tencentcloud_cbs_storages.storages", "storage_list.0.storage_size", "50"), resource.TestCheckResourceAttr("data.tencentcloud_cbs_storages.storages", "storage_list.0.availability_zone", "ap-guangzhou-3"), resource.TestCheckResourceAttr("data.tencentcloud_cbs_storages.storages", "storage_list.0.project_id", "0"), @@ -58,7 +58,7 @@ func TestAccTencentCloudCbsStoragesDataSourceNewParams(t *testing.T) { const testAccCbsStoragesDataSource = ` resource "tencentcloud_cbs_storage" "storage" { - storage_type = "tcacctest.CLOUD_PREMIUM" + storage_type = "CLOUD_PREMIUM" storage_name = "tf-test-storage" storage_size = 50 availability_zone = "ap-guangzhou-3" @@ -74,7 +74,7 @@ data "tencentcloud_cbs_storages" "storages" { const testAccCbsStoragesDataSourceNewParams = ` data "tencentcloud_cbs_storages" "storages" { storage_name = "disk-foo" - charge_type = ["tcacctest.POSTPAID_BY_HOUR", "PREPAID"] + charge_type = ["POSTPAID_BY_HOUR", "PREPAID"] portable = true storage_state = ["ATTACHED"] instance_ips = ["10.0.0.2"] diff --git a/tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy_attachment_test.go b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy_attachment_test.go index c2fe5eb809..f9569429cd 100644 --- a/tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy_attachment_test.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_policy_attachment_test.go @@ -98,7 +98,7 @@ const testAccCbsSnapshotPolicyAttachmentConfig = tcacctest.DefaultVpcVariable + resource "tencentcloud_cbs_storage" "foo" { availability_zone = var.availability_zone storage_size = 100 - storage_type = "tcacctest.CLOUD_PREMIUM" + storage_type = "CLOUD_PREMIUM" storage_name = var.instance_name } diff --git a/tencentcloud/services/cbs/resource_tc_cbs_snapshot_test.go b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_test.go index dde8eec736..792d0f25e7 100644 --- a/tencentcloud/services/cbs/resource_tc_cbs_snapshot_test.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_snapshot_test.go @@ -93,7 +93,7 @@ const testAccCbsSnapshot = ` resource "tencentcloud_cbs_storage" "storage" { availability_zone = "ap-guangzhou-3" storage_size = 50 - storage_type = "tcacctest.CLOUD_PREMIUM" + storage_type = "CLOUD_PREMIUM" storage_name = "tf-test-storage" } @@ -107,7 +107,7 @@ const testAccCbsSnapshot_update = ` resource "tencentcloud_cbs_storage" "storage" { availability_zone = "ap-guangzhou-3" storage_size = 50 - storage_type = "tcacctest.CLOUD_PREMIUM" + storage_type = "CLOUD_PREMIUM" storage_name = "tf-test-storage" } diff --git a/tencentcloud/services/cbs/resource_tc_cbs_storage_attachment_test.go b/tencentcloud/services/cbs/resource_tc_cbs_storage_attachment_test.go index 58befd3053..bdfb8e7e57 100644 --- a/tencentcloud/services/cbs/resource_tc_cbs_storage_attachment_test.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_storage_attachment_test.go @@ -92,16 +92,16 @@ resource "tencentcloud_instance" "test_cbs_attach" { instance_name = "test-cbs-attach-cvm" availability_zone = var.default_az image_id = data.tencentcloud_images.default.images.0.image_id - system_disk_type = "tcacctest.CLOUD_PREMIUM" + system_disk_type = "CLOUD_PREMIUM" instance_type = data.tencentcloud_instance_types.default.instance_types.0.instance_type } resource "tencentcloud_cbs_storage" "foo" { availability_zone = var.default_az storage_size = 100 - storage_type = "tcacctest.CLOUD_PREMIUM" + storage_type = "CLOUD_PREMIUM" storage_name = "test-cbs-attachment" - charge_type = "tcacctest.POSTPAID_BY_HOUR" + charge_type = "POSTPAID_BY_HOUR" } resource "tencentcloud_cbs_storage_attachment" "foo" { diff --git a/tencentcloud/services/cbs/resource_tc_cbs_storage_test.go b/tencentcloud/services/cbs/resource_tc_cbs_storage_test.go index b3abd00362..76b2b7977d 100644 --- a/tencentcloud/services/cbs/resource_tc_cbs_storage_test.go +++ b/tencentcloud/services/cbs/resource_tc_cbs_storage_test.go @@ -74,7 +74,7 @@ func TestAccTencentCloudCbsStorageResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckStorageExists("tencentcloud_cbs_storage.storage_basic"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_basic", "storage_name", "tf-storage-basic"), - resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_basic", "storage_type", "tcacctest.CLOUD_PREMIUM"), + resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_basic", "storage_type", "CLOUD_PREMIUM"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_basic", "storage_size", "50"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_basic", "availability_zone", "ap-guangzhou-3"), ), @@ -102,7 +102,7 @@ func TestAccTencentCloudCbsStorageResource_full(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckStorageExists("tencentcloud_cbs_storage.storage_full"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_full", "storage_name", "tf-storage-full"), - resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_full", "storage_type", "tcacctest.CLOUD_PREMIUM"), + resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_full", "storage_type", "CLOUD_PREMIUM"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_full", "storage_size", "50"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_full", "availability_zone", "ap-guangzhou-3"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_full", "project_id", "0"), @@ -141,7 +141,7 @@ func TestAccTencentCloudCbsStorageResource_prepaid(t *testing.T) { testAccCheckStorageExists("tencentcloud_cbs_storage.storage_prepaid"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "storage_name", "tf-storage-prepaid"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "charge_type", "PREPAID"), - resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "prepaid_renew_flag", "tcacctest.NOTIFY_AND_AUTO_RENEW"), + resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "prepaid_renew_flag", "NOTIFY_AND_AUTO_RENEW"), ), }, { @@ -150,7 +150,7 @@ func TestAccTencentCloudCbsStorageResource_prepaid(t *testing.T) { testAccCheckStorageExists("tencentcloud_cbs_storage.storage_prepaid"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "storage_name", "tf-storage-prepaid"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "charge_type", "PREPAID"), - resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "prepaid_renew_flag", "tcacctest.NOTIFY_AND_MANUAL_RENEW"), + resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_prepaid", "prepaid_renew_flag", "NOTIFY_AND_MANUAL_RENEW"), ), }, }, @@ -169,7 +169,7 @@ func TestAccTencentCloudCbsStorageResource_upgrade(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckStorageExists("tencentcloud_cbs_storage.storage_upgrade"), resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_upgrade", "storage_name", "tf-storage-upgrade"), - resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_upgrade", "charge_type", "tcacctest.POSTPAID_BY_HOUR"), + resource.TestCheckResourceAttr("tencentcloud_cbs_storage.storage_upgrade", "charge_type", "POSTPAID_BY_HOUR"), ), }, { @@ -235,7 +235,7 @@ func testAccCheckStorageExists(n string) resource.TestCheckFunc { const testAccCbsStorage_basic = ` resource "tencentcloud_cbs_storage" "storage_basic" { - storage_type = "tcacctest.CLOUD_PREMIUM" + storage_type = "CLOUD_PREMIUM" storage_name = "tf-storage-basic" storage_size = 50 availability_zone = "ap-guangzhou-3" @@ -244,7 +244,7 @@ resource "tencentcloud_cbs_storage" "storage_basic" { const testAccCbsStorage_full = ` resource "tencentcloud_cbs_storage" "storage_full" { - storage_type = "tcacctest.CLOUD_PREMIUM" + storage_type = "CLOUD_PREMIUM" storage_name = "tf-storage-full" storage_size = 50 availability_zone = "ap-guangzhou-3" @@ -257,7 +257,7 @@ resource "tencentcloud_cbs_storage" "storage_full" { ` const testAccCbsStorage_update = ` resource "tencentcloud_cbs_storage" "storage_full" { - storage_type = "tcacctest.CLOUD_PREMIUM" + storage_type = "CLOUD_PREMIUM" storage_name = "tf-storage-update" storage_size = 60 availability_zone = "ap-guangzhou-3" @@ -272,12 +272,12 @@ resource "tencentcloud_cbs_storage" "storage_full" { const testAccCbsStorage_prepaid = ` resource "tencentcloud_cbs_storage" "storage_prepaid" { - storage_type = "tcacctest.CLOUD_PREMIUM" + storage_type = "CLOUD_PREMIUM" storage_name = "tf-storage-prepaid" storage_size = 50 availability_zone = "ap-guangzhou-3" charge_type = "PREPAID" - prepaid_renew_flag = "tcacctest.NOTIFY_AND_AUTO_RENEW" + prepaid_renew_flag = "NOTIFY_AND_AUTO_RENEW" prepaid_period = 1 project_id = 0 encrypt = false @@ -289,11 +289,11 @@ resource "tencentcloud_cbs_storage" "storage_prepaid" { ` const testAccCbsStorage_prepaidupdate = ` resource "tencentcloud_cbs_storage" "storage_prepaid" { - storage_type = "tcacctest.CLOUD_PREMIUM" + storage_type = "CLOUD_PREMIUM" storage_name = "tf-storage-prepaid" storage_size = 50 charge_type = "PREPAID" - prepaid_renew_flag = "tcacctest.NOTIFY_AND_MANUAL_RENEW" + prepaid_renew_flag = "NOTIFY_AND_MANUAL_RENEW" prepaid_period = 1 availability_zone = "ap-guangzhou-3" project_id = 0 @@ -307,22 +307,22 @@ resource "tencentcloud_cbs_storage" "storage_prepaid" { const testAccCbsStorage_upgrade = ` resource "tencentcloud_cbs_storage" "storage_upgrade" { - storage_type = "tcacctest.CLOUD_PREMIUM" + storage_type = "CLOUD_PREMIUM" storage_name = "tf-storage-upgrade" storage_size = 50 availability_zone = "ap-guangzhou-3" - charge_type = "tcacctest.POSTPAID_BY_HOUR" + charge_type = "POSTPAID_BY_HOUR" } ` const testAccCbsStorage_upgradeupdate = ` resource "tencentcloud_cbs_storage" "storage_upgrade" { - storage_type = "tcacctest.CLOUD_PREMIUM" + storage_type = "CLOUD_PREMIUM" storage_name = "tf-storage-upgrade" storage_size = 50 availability_zone = "ap-guangzhou-3" charge_type = "PREPAID" - prepaid_renew_flag = "tcacctest.NOTIFY_AND_MANUAL_RENEW" + prepaid_renew_flag = "NOTIFY_AND_MANUAL_RENEW" prepaid_period = 1 force_delete = true } diff --git a/tencentcloud/services/ccn/data_source_tc_ccn_bandwidth_limits_test.go b/tencentcloud/services/ccn/data_source_tc_ccn_bandwidth_limits_test.go index 33dbf82445..09320d6f6e 100644 --- a/tencentcloud/services/ccn/data_source_tc_ccn_bandwidth_limits_test.go +++ b/tencentcloud/services/ccn/data_source_tc_ccn_bandwidth_limits_test.go @@ -88,7 +88,7 @@ resource tencentcloud_ccn main { name = "ci-temp-test-ccn" description = "ci-temp-test-ccn-des" qos = "AG" - bandwidth_limit_type = "tcacctest.INTER_REGION_LIMIT" + bandwidth_limit_type = "INTER_REGION_LIMIT" } resource tencentcloud_ccn_bandwidth_limit limit1 { diff --git a/tencentcloud/services/ccn/resource_tc_ccn_bandwidth_limit_test.go b/tencentcloud/services/ccn/resource_tc_ccn_bandwidth_limit_test.go index 4d9e32c7a1..5312c777a6 100644 --- a/tencentcloud/services/ccn/resource_tc_ccn_bandwidth_limit_test.go +++ b/tencentcloud/services/ccn/resource_tc_ccn_bandwidth_limit_test.go @@ -151,7 +151,7 @@ resource tencentcloud_ccn main { name = "ci-temp-test-ccn" description = "ci-temp-test-ccn-des" qos = "AG" - bandwidth_limit_type = "tcacctest.INTER_REGION_LIMIT" + bandwidth_limit_type = "INTER_REGION_LIMIT" } ` diff --git a/tencentcloud/services/cdh/data_source_tc_cdh_instances_test.go b/tencentcloud/services/cdh/data_source_tc_cdh_instances_test.go index 9be4925af5..1ec8df50a8 100644 --- a/tencentcloud/services/cdh/data_source_tc_cdh_instances_test.go +++ b/tencentcloud/services/cdh/data_source_tc_cdh_instances_test.go @@ -30,7 +30,7 @@ func TestAccTencentCloudCdhInstancesDataSource(t *testing.T) { resource.TestCheckResourceAttr(dataSourceName, "cdh_instance_list.0.charge_type", "PREPAID"), resource.TestCheckResourceAttr(dataSourceName, "cdh_instance_list.0.availability_zone", "ap-guangzhou-3"), resource.TestCheckResourceAttr(dataSourceName, "cdh_instance_list.0.project_id", "0"), - resource.TestCheckResourceAttr(dataSourceName, "cdh_instance_list.0.prepaid_renew_flag", "tcacctest.DISABLE_NOTIFY_AND_MANUAL_RENEW"), + resource.TestCheckResourceAttr(dataSourceName, "cdh_instance_list.0.prepaid_renew_flag", "DISABLE_NOTIFY_AND_MANUAL_RENEW"), resource.TestCheckResourceAttr(dataSourceName, "cdh_instance_list.0.host_resource.#", "1"), ), }, @@ -48,7 +48,7 @@ resource "tencentcloud_cdh_instance" "foo" { host_type = "HC20" charge_type = "PREPAID" host_name = "unit-test" - prepaid_renew_flag = "tcacctest.DISABLE_NOTIFY_AND_MANUAL_RENEW" + prepaid_renew_flag = "DISABLE_NOTIFY_AND_MANUAL_RENEW" } data "tencentcloud_cdh_instances" "list" { diff --git a/tencentcloud/services/cdh/resource_tc_cdh_instance_test.go b/tencentcloud/services/cdh/resource_tc_cdh_instance_test.go index 2d48d0f9cd..ff616ba573 100644 --- a/tencentcloud/services/cdh/resource_tc_cdh_instance_test.go +++ b/tencentcloud/services/cdh/resource_tc_cdh_instance_test.go @@ -31,7 +31,7 @@ func TestAccTencentCloudCdhInstance_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "host_type", "HC20"), resource.TestCheckResourceAttr(resourceName, "host_name", "unit-test"), resource.TestCheckResourceAttr(resourceName, "charge_type", "PREPAID"), - resource.TestCheckResourceAttr(resourceName, "prepaid_renew_flag", "tcacctest.NOTIFY_AND_MANUAL_RENEW"), + resource.TestCheckResourceAttr(resourceName, "prepaid_renew_flag", "NOTIFY_AND_MANUAL_RENEW"), resource.TestCheckResourceAttr(resourceName, "host_state", "RUNNING"), resource.TestCheckResourceAttr(resourceName, "host_resource.#", "1"), resource.TestCheckResourceAttrSet(resourceName, "create_time"), @@ -43,7 +43,7 @@ func TestAccTencentCloudCdhInstance_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckCdhInstanceExists(resourceName), resource.TestCheckResourceAttr(resourceName, "host_name", "unit-test-modify"), - resource.TestCheckResourceAttr(resourceName, "prepaid_renew_flag", "tcacctest.DISABLE_NOTIFY_AND_MANUAL_RENEW"), + resource.TestCheckResourceAttr(resourceName, "prepaid_renew_flag", "DISABLE_NOTIFY_AND_MANUAL_RENEW"), ), }, { @@ -95,7 +95,7 @@ resource "tencentcloud_cdh_instance" "foo" { charge_type = "PREPAID" prepaid_period = 1 host_name = "unit-test" - prepaid_renew_flag = "tcacctest.NOTIFY_AND_MANUAL_RENEW" + prepaid_renew_flag = "NOTIFY_AND_MANUAL_RENEW" } ` @@ -111,6 +111,6 @@ resource "tencentcloud_cdh_instance" "foo" { prepaid_period = 1 host_name = "unit-test-modify" project_id = ` + tcacctest.DefaultProjectId + ` - prepaid_renew_flag = "tcacctest.DISABLE_NOTIFY_AND_MANUAL_RENEW" + prepaid_renew_flag = "DISABLE_NOTIFY_AND_MANUAL_RENEW" } ` From 5a6147c34a7255b3450bc1fbb456a040abce7860 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Tue, 19 Dec 2023 19:00:39 +0800 Subject: [PATCH 07/31] refactor: migrate package tencentcloud/services/cdb --- tencentcloud/provider.go | 140 +- .../resource_tc_mysql_switch_proxy.go | 188 - .../cdb}/data_source_tc_mysql_backup_list.go | 19 +- .../data_source_tc_mysql_backup_list_test.go | 12 +- .../data_source_tc_mysql_backup_overview.go | 23 +- ...ta_source_tc_mysql_backup_overview_test.go | 10 +- .../data_source_tc_mysql_backup_summaries.go | 23 +- ...a_source_tc_mysql_backup_summaries_test.go | 10 +- .../cdb}/data_source_tc_mysql_bin_log.go | 23 +- .../cdb}/data_source_tc_mysql_bin_log_test.go | 12 +- ..._source_tc_mysql_binlog_backup_overview.go | 23 +- ...ce_tc_mysql_binlog_backup_overview_test.go | 10 +- .../cdb}/data_source_tc_mysql_clone_list.go | 23 +- .../data_source_tc_mysql_clone_list_test.go | 12 +- ...ta_source_tc_mysql_data_backup_overview.go | 23 +- ...urce_tc_mysql_data_backup_overview_test.go | 10 +- .../cdb}/data_source_tc_mysql_databases.go | 23 +- .../data_source_tc_mysql_databases_test.go | 12 +- .../cdb}/data_source_tc_mysql_db_features.go | 23 +- .../data_source_tc_mysql_db_features_test.go | 12 +- .../data_source_tc_mysql_default_params.go | 19 +- ...ata_source_tc_mysql_default_params_test.go | 8 +- .../cdb}/data_source_tc_mysql_error_log.go | 23 +- .../data_source_tc_mysql_error_log_test.go | 12 +- .../cdb}/data_source_tc_mysql_inst_tables.go | 23 +- .../data_source_tc_mysql_inst_tables_test.go | 12 +- .../cdb}/data_source_tc_mysql_instance.go | 37 +- .../data_source_tc_mysql_instance_charset.go | 22 +- ...a_source_tc_mysql_instance_charset_test.go | 12 +- .../data_source_tc_mysql_instance_info.go | 22 +- ...data_source_tc_mysql_instance_info_test.go | 12 +- ...a_source_tc_mysql_instance_param_record.go | 23 +- ...rce_tc_mysql_instance_param_record_test.go | 12 +- ...ta_source_tc_mysql_instance_reboot_time.go | 23 +- ...urce_tc_mysql_instance_reboot_time_test.go | 12 +- .../data_source_tc_mysql_instance_test.go | 12 +- .../data_source_tc_mysql_parameter_list.go | 19 +- ...ata_source_tc_mysql_parameter_list_test.go | 10 +- ..._source_tc_mysql_project_security_group.go | 23 +- ...ce_tc_mysql_project_security_group_test.go | 10 +- .../cdb}/data_source_tc_mysql_proxy_custom.go | 33 +- .../cdb/data_source_tc_mysql_proxy_custom.md | 9 + .../data_source_tc_mysql_proxy_custom_test.go | 12 +- .../cdb}/data_source_tc_mysql_ro_min_scale.go | 23 +- .../data_source_tc_mysql_ro_min_scale_test.go | 10 +- ...ata_source_tc_mysql_rollback_range_time.go | 23 +- ...ource_tc_mysql_rollback_range_time_test.go | 12 +- .../cdb}/data_source_tc_mysql_slow_log.go | 23 +- .../data_source_tc_mysql_slow_log_data.go | 23 +- ...data_source_tc_mysql_slow_log_data_test.go | 12 +- .../data_source_tc_mysql_slow_log_test.go | 12 +- ...ta_source_tc_mysql_supported_privileges.go | 22 +- ...urce_tc_mysql_supported_privileges_test.go | 12 +- .../data_source_tc_mysql_switch_record.go | 22 +- ...data_source_tc_mysql_switch_record_test.go | 12 +- .../cdb}/data_source_tc_mysql_user_task.go | 23 +- .../data_source_tc_mysql_user_task_test.go | 12 +- .../cdb}/data_source_tc_mysql_zone_config.go | 18 +- .../data_source_tc_mysql_zone_config_test.go | 12 +- tencentcloud/services/cdb/extension_mysql.go | 129 + tencentcloud/services/cdb/extension_tags.go | 3 + .../cdb}/resource_tc_mysql_account.go | 74 +- .../resource_tc_mysql_account_privilege.go | 59 +- ...esource_tc_mysql_account_privilege_test.go | 47 +- .../cdb}/resource_tc_mysql_account_test.go | 56 +- .../resource_tc_mysql_account_testing_test.go | 12 +- .../cdb}/resource_tc_mysql_audit_log_file.go | 51 +- .../resource_tc_mysql_audit_log_file_test.go | 8 +- ...ce_tc_mysql_backup_download_restriction.go | 37 +- ..._mysql_backup_download_restriction_test.go | 8 +- ...ource_tc_mysql_backup_encryption_status.go | 37 +- ..._tc_mysql_backup_encryption_status_test.go | 10 +- .../cdb}/resource_tc_mysql_backup_policy.go | 46 +- .../resource_tc_mysql_backup_policy_test.go | 28 +- .../cdb}/resource_tc_mysql_database.go | 51 +- .../cdb}/resource_tc_mysql_database_test.go | 8 +- ...source_tc_mysql_db_import_job_operation.go | 115 +- ...source_tc_mysql_db_import_job_operation.md | 70 + ...e_tc_mysql_db_import_job_operation_test.go | 8 +- .../cdb}/resource_tc_mysql_deploy_group.go | 51 +- .../resource_tc_mysql_deploy_group_test.go | 8 +- .../resource_tc_mysql_dr_instance_to_mater.go | 42 +- ...urce_tc_mysql_dr_instance_to_mater_test.go | 8 +- .../cdb}/resource_tc_mysql_instance.go | 139 +- ..._tc_mysql_instance_encryption_operation.go | 39 +- ...ysql_instance_encryption_operation_test.go | 8 +- .../cdb}/resource_tc_mysql_instance_test.go | 63 +- .../resource_tc_mysql_isolate_instance.go | 49 +- ...resource_tc_mysql_isolate_instance_test.go | 8 +- .../resource_tc_mysql_local_binlog_config.go | 37 +- ...ource_tc_mysql_local_binlog_config_test.go | 8 +- .../cdb}/resource_tc_mysql_param_template.go | 51 +- .../resource_tc_mysql_param_template_test.go | 8 +- .../resource_tc_mysql_password_complexity.go | 43 +- ...ource_tc_mysql_password_complexity_test.go | 8 +- .../cdb}/resource_tc_mysql_privilege.go | 73 +- .../cdb}/resource_tc_mysql_privilege_test.go | 38 +- .../cdb}/resource_tc_mysql_proxy.go | 79 +- .../cdb}/resource_tc_mysql_proxy_test.go | 46 +- .../resource_tc_mysql_readonly_instance.go | 69 +- ...esource_tc_mysql_readonly_instance_test.go | 36 +- ...urce_tc_mysql_reload_balance_proxy_node.go | 27 +- ...tc_mysql_reload_balance_proxy_node_test.go | 8 +- .../resource_tc_mysql_remote_backup_config.go | 37 +- ...urce_tc_mysql_remote_backup_config_test.go | 10 +- ...ce_tc_mysql_renew_db_instance_operation.go | 33 +- ..._mysql_renew_db_instance_operation_test.go | 8 +- .../resource_tc_mysql_reset_root_account.go | 27 +- ...source_tc_mysql_reset_root_account_test.go | 8 +- ...tc_mysql_restart_db_instances_operation.go | 38 +- ...sql_restart_db_instances_operation_test.go | 8 +- .../cdb}/resource_tc_mysql_ro_group.go | 49 +- ...source_tc_mysql_ro_group_load_operation.go | 27 +- ...e_tc_mysql_ro_group_load_operation_test.go | 10 +- .../cdb}/resource_tc_mysql_ro_group_test.go | 10 +- .../cdb}/resource_tc_mysql_ro_instance_ip.go | 33 +- .../resource_tc_mysql_ro_instance_ip_test.go | 10 +- .../resource_tc_mysql_ro_start_replication.go | 33 +- ...urce_tc_mysql_ro_start_replication_test.go | 8 +- .../resource_tc_mysql_ro_stop_replication.go | 33 +- ...ource_tc_mysql_ro_stop_replication_test.go | 8 +- .../cdb}/resource_tc_mysql_rollback.go | 43 +- .../cdb}/resource_tc_mysql_rollback_stop.go | 26 +- .../resource_tc_mysql_rollback_stop_test.go | 10 +- .../cdb}/resource_tc_mysql_rollback_test.go | 10 +- ...rce_tc_mysql_security_groups_attachment.go | 45 +- ...c_mysql_security_groups_attachment_test.go | 8 +- .../resource_tc_mysql_switch_for_upgrade.go | 39 +- ...source_tc_mysql_switch_for_upgrade_test.go | 8 +- ..._tc_mysql_switch_master_slave_operation.go | 33 +- ...ysql_switch_master_slave_operation_test.go | 10 +- .../cdb/resource_tc_mysql_switch_proxy.go | 111 + .../cdb/resource_tc_mysql_switch_proxy.md | 77 + .../resource_tc_mysql_switch_proxy_test.go | 8 +- .../cdb}/resource_tc_mysql_time_window.go | 43 +- .../resource_tc_mysql_time_window_test.go | 8 +- .../resource_tc_mysql_verify_root_account.go | 33 +- ...ource_tc_mysql_verify_root_account_test.go | 8 +- .../cdb/service_tencentcloud_mysql.go | 3322 +++++++++++++++++ .../services/cdb/service_tencentcloud_tag.go | 415 ++ 140 files changed, 5973 insertions(+), 1779 deletions(-) delete mode 100644 tencentcloud/resource_tc_mysql_switch_proxy.go rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_backup_list.go (86%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_backup_list_test.go (60%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_backup_overview.go (84%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_backup_overview_test.go (84%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_backup_summaries.go (89%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_backup_summaries_test.go (87%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_bin_log.go (91%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_bin_log_test.go (86%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_binlog_backup_overview.go (84%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_binlog_backup_overview_test.go (86%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_clone_list.go (87%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_clone_list_test.go (68%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_data_backup_overview.go (88%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_data_backup_overview_test.go (89%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_databases.go (84%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_databases_test.go (78%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_db_features.go (85%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_db_features_test.go (84%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_default_params.go (86%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_default_params_test.go (89%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_error_log.go (84%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_error_log_test.go (78%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_inst_tables.go (76%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_inst_tables_test.go (74%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_instance.go (92%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_instance_charset.go (72%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_instance_charset_test.go (71%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_instance_info.go (78%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_instance_info_test.go (79%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_instance_param_record.go (84%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_instance_param_record_test.go (82%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_instance_reboot_time.go (80%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_instance_reboot_time_test.go (78%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_instance_test.go (83%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_parameter_list.go (87%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_parameter_list_test.go (87%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_project_security_group.go (91%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_project_security_group_test.go (81%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_proxy_custom.go (83%) create mode 100644 tencentcloud/services/cdb/data_source_tc_mysql_proxy_custom.md rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_proxy_custom_test.go (61%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_ro_min_scale.go (80%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_ro_min_scale_test.go (74%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_rollback_range_time.go (87%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_rollback_range_time_test.go (81%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_slow_log.go (83%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_slow_log_data.go (90%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_slow_log_data_test.go (86%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_slow_log_test.go (82%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_supported_privileges.go (80%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_supported_privileges_test.go (80%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_switch_record.go (77%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_switch_record_test.go (77%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_user_task.go (92%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_user_task_test.go (85%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_zone_config.go (94%) rename tencentcloud/{ => services/cdb}/data_source_tc_mysql_zone_config_test.go (92%) create mode 100644 tencentcloud/services/cdb/extension_mysql.go create mode 100644 tencentcloud/services/cdb/extension_tags.go rename tencentcloud/{ => services/cdb}/resource_tc_mysql_account.go (80%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_account_privilege.go (83%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_account_privilege_test.go (80%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_account_test.go (76%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_account_testing_test.go (89%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_audit_log_file.go (85%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_audit_log_file_test.go (81%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_backup_download_restriction.go (83%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_backup_download_restriction_test.go (91%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_backup_encryption_status.go (71%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_backup_encryption_status_test.go (87%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_backup_policy.go (79%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_backup_policy_test.go (82%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_database.go (70%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_database_test.go (81%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_db_import_job_operation.go (58%) create mode 100644 tencentcloud/services/cdb/resource_tc_mysql_db_import_job_operation.md rename tencentcloud/{ => services/cdb}/resource_tc_mysql_db_import_job_operation_test.go (91%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_deploy_group.go (75%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_deploy_group_test.go (82%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_dr_instance_to_mater.go (70%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_dr_instance_to_mater_test.go (83%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_instance.go (90%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_instance_encryption_operation.go (74%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_instance_encryption_operation_test.go (91%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_instance_test.go (92%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_isolate_instance.go (75%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_isolate_instance_test.go (88%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_local_binlog_config.go (73%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_local_binlog_config_test.go (82%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_param_template.go (83%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_param_template_test.go (87%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_password_complexity.go (77%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_password_complexity_test.go (90%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_privilege.go (87%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_privilege_test.go (82%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_proxy.go (85%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_proxy_test.go (80%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_readonly_instance.go (83%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_readonly_instance_test.go (82%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_reload_balance_proxy_node.go (70%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_reload_balance_proxy_node_test.go (88%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_remote_backup_config.go (78%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_remote_backup_config_test.go (88%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_renew_db_instance_operation.go (76%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_renew_db_instance_operation_test.go (84%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_reset_root_account.go (68%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_reset_root_account_test.go (80%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_restart_db_instances_operation.go (72%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_restart_db_instances_operation_test.go (85%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_ro_group.go (86%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_ro_group_load_operation.go (67%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_ro_group_load_operation_test.go (91%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_ro_group_test.go (94%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_ro_instance_ip.go (77%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_ro_instance_ip_test.go (92%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_ro_start_replication.go (71%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_ro_start_replication_test.go (80%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_ro_stop_replication.go (71%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_ro_stop_replication_test.go (78%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_rollback.go (87%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_rollback_stop.go (70%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_rollback_stop_test.go (74%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_rollback_test.go (82%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_security_groups_attachment.go (68%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_security_groups_attachment_test.go (83%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_switch_for_upgrade.go (70%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_switch_for_upgrade_test.go (78%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_switch_master_slave_operation.go (78%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_switch_master_slave_operation_test.go (80%) create mode 100644 tencentcloud/services/cdb/resource_tc_mysql_switch_proxy.go create mode 100644 tencentcloud/services/cdb/resource_tc_mysql_switch_proxy.md rename tencentcloud/{ => services/cdb}/resource_tc_mysql_switch_proxy_test.go (80%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_time_window.go (80%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_time_window_test.go (83%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_verify_root_account.go (73%) rename tencentcloud/{ => services/cdb}/resource_tc_mysql_verify_root_account_test.go (82%) create mode 100644 tencentcloud/services/cdb/service_tencentcloud_mysql.go create mode 100644 tencentcloud/services/cdb/service_tencentcloud_tag.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 63e500c1c5..f5f74537b6 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,10 +1,6 @@ package tencentcloud import ( - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdh" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ccn" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cat" "encoding/json" "fmt" "io/ioutil" @@ -14,6 +10,12 @@ import ( "strconv" "strings" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cat" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ccn" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdb" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdh" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -261,34 +263,34 @@ func Provider() *schema.Provider { "tencentcloud_eks_cluster_credential": datasourceTencentCloudEksClusterCredential(), "tencentcloud_container_clusters": dataSourceTencentCloudContainerClusters(), "tencentcloud_container_cluster_instances": dataSourceTencentCloudContainerClusterInstances(), - "tencentcloud_mysql_backup_list": dataSourceTencentMysqlBackupList(), - "tencentcloud_mysql_zone_config": dataSourceTencentMysqlZoneConfig(), - "tencentcloud_mysql_parameter_list": dataSourceTencentCloudMysqlParameterList(), - "tencentcloud_mysql_default_params": datasourceTencentCloudMysqlDefaultParams(), - "tencentcloud_mysql_instance": dataSourceTencentCloudMysqlInstance(), - "tencentcloud_mysql_backup_overview": dataSourceTencentCloudMysqlBackupOverview(), - "tencentcloud_mysql_backup_summaries": dataSourceTencentCloudMysqlBackupSummaries(), - "tencentcloud_mysql_bin_log": dataSourceTencentCloudMysqlBinLog(), - "tencentcloud_mysql_binlog_backup_overview": dataSourceTencentCloudMysqlBinlogBackupOverview(), - "tencentcloud_mysql_clone_list": dataSourceTencentCloudMysqlCloneList(), - "tencentcloud_mysql_data_backup_overview": dataSourceTencentCloudMysqlDataBackupOverview(), - "tencentcloud_mysql_db_features": dataSourceTencentCloudMysqlDbFeatures(), - "tencentcloud_mysql_inst_tables": dataSourceTencentCloudMysqlInstTables(), - "tencentcloud_mysql_instance_charset": dataSourceTencentCloudMysqlInstanceCharset(), - "tencentcloud_mysql_instance_info": dataSourceTencentCloudMysqlInstanceInfo(), - "tencentcloud_mysql_instance_param_record": dataSourceTencentCloudMysqlInstanceParamRecord(), - "tencentcloud_mysql_instance_reboot_time": dataSourceTencentCloudMysqlInstanceRebootTime(), - "tencentcloud_mysql_proxy_custom": dataSourceTencentCloudMysqlProxyCustom(), - "tencentcloud_mysql_rollback_range_time": dataSourceTencentCloudMysqlRollbackRangeTime(), - "tencentcloud_mysql_slow_log": dataSourceTencentCloudMysqlSlowLog(), - "tencentcloud_mysql_slow_log_data": dataSourceTencentCloudMysqlSlowLogData(), - "tencentcloud_mysql_supported_privileges": dataSourceTencentCloudMysqlSupportedPrivileges(), - "tencentcloud_mysql_switch_record": dataSourceTencentCloudMysqlSwitchRecord(), - "tencentcloud_mysql_user_task": dataSourceTencentCloudMysqlUserTask(), - "tencentcloud_mysql_databases": dataSourceTencentCloudMysqlDatabases(), - "tencentcloud_mysql_error_log": dataSourceTencentCloudMysqlErrorLog(), - "tencentcloud_mysql_project_security_group": dataSourceTencentCloudMysqlProjectSecurityGroup(), - "tencentcloud_mysql_ro_min_scale": dataSourceTencentCloudMysqlRoMinScale(), + "tencentcloud_mysql_backup_list": cdb.DataSourceTencentCloudMysqlBackupList(), + "tencentcloud_mysql_zone_config": cdb.DataSourceTencentCloudMysqlZoneConfig(), + "tencentcloud_mysql_parameter_list": cdb.DataSourceTencentCloudMysqlParameterList(), + "tencentcloud_mysql_default_params": cdb.DataSourceTencentCloudMysqlDefaultParams(), + "tencentcloud_mysql_instance": cdb.DataSourceTencentCloudMysqlInstance(), + "tencentcloud_mysql_backup_overview": cdb.DataSourceTencentCloudMysqlBackupOverview(), + "tencentcloud_mysql_backup_summaries": cdb.DataSourceTencentCloudMysqlBackupSummaries(), + "tencentcloud_mysql_bin_log": cdb.DataSourceTencentCloudMysqlBinLog(), + "tencentcloud_mysql_binlog_backup_overview": cdb.DataSourceTencentCloudMysqlBinlogBackupOverview(), + "tencentcloud_mysql_clone_list": cdb.DataSourceTencentCloudMysqlCloneList(), + "tencentcloud_mysql_data_backup_overview": cdb.DataSourceTencentCloudMysqlDataBackupOverview(), + "tencentcloud_mysql_db_features": cdb.DataSourceTencentCloudMysqlDbFeatures(), + "tencentcloud_mysql_inst_tables": cdb.DataSourceTencentCloudMysqlInstTables(), + "tencentcloud_mysql_instance_charset": cdb.DataSourceTencentCloudMysqlInstanceCharset(), + "tencentcloud_mysql_instance_info": cdb.DataSourceTencentCloudMysqlInstanceInfo(), + "tencentcloud_mysql_instance_param_record": cdb.DataSourceTencentCloudMysqlInstanceParamRecord(), + "tencentcloud_mysql_instance_reboot_time": cdb.DataSourceTencentCloudMysqlInstanceRebootTime(), + "tencentcloud_mysql_proxy_custom": cdb.DataSourceTencentCloudMysqlProxyCustom(), + "tencentcloud_mysql_rollback_range_time": cdb.DataSourceTencentCloudMysqlRollbackRangeTime(), + "tencentcloud_mysql_slow_log": cdb.DataSourceTencentCloudMysqlSlowLog(), + "tencentcloud_mysql_slow_log_data": cdb.DataSourceTencentCloudMysqlSlowLogData(), + "tencentcloud_mysql_supported_privileges": cdb.DataSourceTencentCloudMysqlSupportedPrivileges(), + "tencentcloud_mysql_switch_record": cdb.DataSourceTencentCloudMysqlSwitchRecord(), + "tencentcloud_mysql_user_task": cdb.DataSourceTencentCloudMysqlUserTask(), + "tencentcloud_mysql_databases": cdb.DataSourceTencentCloudMysqlDatabases(), + "tencentcloud_mysql_error_log": cdb.DataSourceTencentCloudMysqlErrorLog(), + "tencentcloud_mysql_project_security_group": cdb.DataSourceTencentCloudMysqlProjectSecurityGroup(), + "tencentcloud_mysql_ro_min_scale": cdb.DataSourceTencentCloudMysqlRoMinScale(), "tencentcloud_cos_bucket_object": dataSourceTencentCloudCosBucketObject(), "tencentcloud_cos_buckets": dataSourceTencentCloudCosBuckets(), "tencentcloud_cos_batchs": dataSourceTencentCloudCosBatchs(), @@ -1030,43 +1032,43 @@ func Provider() *schema.Provider { "tencentcloud_kubernetes_serverless_node_pool": resourceTkeServerLessNodePool(), "tencentcloud_kubernetes_backup_storage_location": resourceTencentCloudTkeBackupStorageLocation(), "tencentcloud_kubernetes_encryption_protection": resourceTencentCloudKubernetesEncryptionProtection(), - "tencentcloud_mysql_backup_policy": resourceTencentCloudMysqlBackupPolicy(), - "tencentcloud_mysql_account": resourceTencentCloudMysqlAccount(), - "tencentcloud_mysql_account_privilege": resourceTencentCloudMysqlAccountPrivilege(), - "tencentcloud_mysql_privilege": resourceTencentCloudMysqlPrivilege(), - "tencentcloud_mysql_instance": resourceTencentCloudMysqlInstance(), - "tencentcloud_mysql_database": resourceTencentCloudMysqlDatabase(), - "tencentcloud_mysql_readonly_instance": resourceTencentCloudMysqlReadonlyInstance(), - "tencentcloud_mysql_time_window": resourceTencentCloudMysqlTimeWindow(), - "tencentcloud_mysql_param_template": resourceTencentCloudMysqlParamTemplate(), - "tencentcloud_mysql_security_groups_attachment": resourceTencentCloudMysqlSecurityGroupsAttachment(), - "tencentcloud_mysql_deploy_group": resourceTencentCloudMysqlDeployGroup(), - "tencentcloud_mysql_local_binlog_config": resourceTencentCloudMysqlLocalBinlogConfig(), - "tencentcloud_mysql_audit_log_file": resourceTencentCloudMysqlAuditLogFile(), - "tencentcloud_mysql_backup_download_restriction": resourceTencentCloudMysqlBackupDownloadRestriction(), - "tencentcloud_mysql_renew_db_instance_operation": resourceTencentCloudMysqlRenewDbInstanceOperation(), - "tencentcloud_mysql_backup_encryption_status": resourceTencentCloudMysqlBackupEncryptionStatus(), - "tencentcloud_mysql_db_import_job_operation": resourceTencentCloudMysqlDbImportJobOperation(), - "tencentcloud_mysql_dr_instance_to_mater": resourceTencentCloudMysqlDrInstanceToMater(), - "tencentcloud_mysql_instance_encryption_operation": resourceTencentCloudMysqlInstanceEncryptionOperation(), - "tencentcloud_mysql_isolate_instance": resourceTencentCloudMysqlIsolateInstance(), - "tencentcloud_mysql_password_complexity": resourceTencentCloudMysqlPasswordComplexity(), - "tencentcloud_mysql_remote_backup_config": resourceTencentCloudMysqlRemoteBackupConfig(), - "tencentcloud_mysql_restart_db_instances_operation": resourceTencentCloudMysqlRestartDbInstancesOperation(), - "tencentcloud_mysql_switch_for_upgrade": resourceTencentCloudMysqlSwitchForUpgrade(), - "tencentcloud_mysql_rollback": resourceTencentCloudMysqlRollback(), - "tencentcloud_mysql_rollback_stop": resourceTencentCloudMysqlRollbackStop(), - "tencentcloud_mysql_ro_group": resourceTencentCloudMysqlRoGroup(), - "tencentcloud_mysql_ro_instance_ip": resourceTencentCloudMysqlRoInstanceIp(), - "tencentcloud_mysql_ro_group_load_operation": resourceTencentCloudMysqlRoGroupLoadOperation(), - "tencentcloud_mysql_switch_master_slave_operation": resourceTencentCloudMysqlSwitchMasterSlaveOperation(), - "tencentcloud_mysql_proxy": resourceTencentCloudMysqlProxy(), - "tencentcloud_mysql_reset_root_account": resourceTencentCloudMysqlResetRootAccount(), - "tencentcloud_mysql_verify_root_account": resourceTencentCloudMysqlVerifyRootAccount(), - "tencentcloud_mysql_reload_balance_proxy_node": resourceTencentCloudMysqlReloadBalanceProxyNode(), - "tencentcloud_mysql_ro_start_replication": resourceTencentCloudMysqlRoStartReplication(), - "tencentcloud_mysql_ro_stop_replication": resourceTencentCloudMysqlRoStopReplication(), - "tencentcloud_mysql_switch_proxy": resourceTencentCloudMysqlSwitchProxy(), + "tencentcloud_mysql_backup_policy": cdb.ResourceTencentCloudMysqlBackupPolicy(), + "tencentcloud_mysql_account": cdb.ResourceTencentCloudMysqlAccount(), + "tencentcloud_mysql_account_privilege": cdb.ResourceTencentCloudMysqlAccountPrivilege(), + "tencentcloud_mysql_privilege": cdb.ResourceTencentCloudMysqlPrivilege(), + "tencentcloud_mysql_instance": cdb.ResourceTencentCloudMysqlInstance(), + "tencentcloud_mysql_database": cdb.ResourceTencentCloudMysqlDatabase(), + "tencentcloud_mysql_readonly_instance": cdb.ResourceTencentCloudMysqlReadonlyInstance(), + "tencentcloud_mysql_time_window": cdb.ResourceTencentCloudMysqlTimeWindow(), + "tencentcloud_mysql_param_template": cdb.ResourceTencentCloudMysqlParamTemplate(), + "tencentcloud_mysql_security_groups_attachment": cdb.ResourceTencentCloudMysqlSecurityGroupsAttachment(), + "tencentcloud_mysql_deploy_group": cdb.ResourceTencentCloudMysqlDeployGroup(), + "tencentcloud_mysql_local_binlog_config": cdb.ResourceTencentCloudMysqlLocalBinlogConfig(), + "tencentcloud_mysql_audit_log_file": cdb.ResourceTencentCloudMysqlAuditLogFile(), + "tencentcloud_mysql_backup_download_restriction": cdb.ResourceTencentCloudMysqlBackupDownloadRestriction(), + "tencentcloud_mysql_renew_db_instance_operation": cdb.ResourceTencentCloudMysqlRenewDbInstanceOperation(), + "tencentcloud_mysql_backup_encryption_status": cdb.ResourceTencentCloudMysqlBackupEncryptionStatus(), + "tencentcloud_mysql_db_import_job_operation": cdb.ResourceTencentCloudMysqlDbImportJobOperation(), + "tencentcloud_mysql_dr_instance_to_mater": cdb.ResourceTencentCloudMysqlDrInstanceToMater(), + "tencentcloud_mysql_instance_encryption_operation": cdb.ResourceTencentCloudMysqlInstanceEncryptionOperation(), + "tencentcloud_mysql_isolate_instance": cdb.ResourceTencentCloudMysqlIsolateInstance(), + "tencentcloud_mysql_password_complexity": cdb.ResourceTencentCloudMysqlPasswordComplexity(), + "tencentcloud_mysql_remote_backup_config": cdb.ResourceTencentCloudMysqlRemoteBackupConfig(), + "tencentcloud_mysql_restart_db_instances_operation": cdb.ResourceTencentCloudMysqlRestartDbInstancesOperation(), + "tencentcloud_mysql_switch_for_upgrade": cdb.ResourceTencentCloudMysqlSwitchForUpgrade(), + "tencentcloud_mysql_rollback": cdb.ResourceTencentCloudMysqlRollback(), + "tencentcloud_mysql_rollback_stop": cdb.ResourceTencentCloudMysqlRollbackStop(), + "tencentcloud_mysql_ro_group": cdb.ResourceTencentCloudMysqlRoGroup(), + "tencentcloud_mysql_ro_instance_ip": cdb.ResourceTencentCloudMysqlRoInstanceIp(), + "tencentcloud_mysql_ro_group_load_operation": cdb.ResourceTencentCloudMysqlRoGroupLoadOperation(), + "tencentcloud_mysql_switch_master_slave_operation": cdb.ResourceTencentCloudMysqlSwitchMasterSlaveOperation(), + "tencentcloud_mysql_proxy": cdb.ResourceTencentCloudMysqlProxy(), + "tencentcloud_mysql_reset_root_account": cdb.ResourceTencentCloudMysqlResetRootAccount(), + "tencentcloud_mysql_verify_root_account": cdb.ResourceTencentCloudMysqlVerifyRootAccount(), + "tencentcloud_mysql_reload_balance_proxy_node": cdb.ResourceTencentCloudMysqlReloadBalanceProxyNode(), + "tencentcloud_mysql_ro_start_replication": cdb.ResourceTencentCloudMysqlRoStartReplication(), + "tencentcloud_mysql_ro_stop_replication": cdb.ResourceTencentCloudMysqlRoStopReplication(), + "tencentcloud_mysql_switch_proxy": cdb.ResourceTencentCloudMysqlSwitchProxy(), "tencentcloud_cos_bucket": resourceTencentCloudCosBucket(), "tencentcloud_cos_bucket_object": resourceTencentCloudCosBucketObject(), "tencentcloud_cos_bucket_referer": resourceTencentCloudCosBucketReferer(), diff --git a/tencentcloud/resource_tc_mysql_switch_proxy.go b/tencentcloud/resource_tc_mysql_switch_proxy.go deleted file mode 100644 index aea16f9f47..0000000000 --- a/tencentcloud/resource_tc_mysql_switch_proxy.go +++ /dev/null @@ -1,188 +0,0 @@ -/* -Provides a resource to create a mysql switch_proxy - -Example Usage - -```hcl -data "tencentcloud_availability_zones_by_product" "zones" { - product = "cdb" -} - -resource "tencentcloud_vpc" "vpc" { - name = "vpc-mysql" - cidr_block = "10.0.0.0/16" -} - -resource "tencentcloud_subnet" "subnet" { - availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.0.name - name = "subnet-mysql" - vpc_id = tencentcloud_vpc.vpc.id - cidr_block = "10.0.0.0/16" - is_multicast = false -} - -resource "tencentcloud_security_group" "security_group" { - name = "sg-mysql" - description = "mysql test" -} - -resource "tencentcloud_mysql_instance" "example" { - internet_service = 1 - engine_version = "5.7" - charge_type = "POSTPAID" - root_password = "PassWord123" - slave_deploy_mode = 1 - availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.0.name - first_slave_zone = data.tencentcloud_availability_zones_by_product.zones.zones.1.name - slave_sync_mode = 1 - instance_name = "tf-example-mysql" - mem_size = 4000 - volume_size = 200 - vpc_id = tencentcloud_vpc.vpc.id - subnet_id = tencentcloud_subnet.subnet.id - intranet_port = 3306 - security_groups = [tencentcloud_security_group.security_group.id] - - tags = { - name = "test" - } - - parameters = { - character_set_server = "utf8" - max_connections = "1000" - } -} - -resource "tencentcloud_mysql_proxy" "example" { - instance_id = tencentcloud_mysql_instance.example.id - uniq_vpc_id = tencentcloud_vpc.vpc.id - uniq_subnet_id = tencentcloud_subnet.subnet.id - proxy_node_custom { - node_count = 2 - cpu = 2 - mem = 4000 - region = "ap-guangzhou" - zone = "ap-guangzhou-3" - } - security_group = [tencentcloud_security_group.security_group.id] - desc = "desc." - connection_pool_limit = 2 - vip = "10.0.0.120" - vport = 3306 -} - -resource "tencentcloud_mysql_switch_proxy" "switch_proxy" { - instance_id = tencentcloud_mysql_instance.example.id - proxy_group_id = tencentcloud_mysql_proxy.example.proxy_group_id -} -``` -*/ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" -) - -func resourceTencentCloudMysqlSwitchProxy() *schema.Resource { - return &schema.Resource{ - Create: resourceTencentCloudMysqlSwitchProxyCreate, - Read: resourceTencentCloudMysqlSwitchProxyRead, - Delete: resourceTencentCloudMysqlSwitchProxyDelete, - - Schema: map[string]*schema.Schema{ - "instance_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Instance id.", - }, - - "proxy_group_id": { - Required: true, - ForceNew: true, - Type: schema.TypeString, - Description: "Proxy group id.", - }, - }, - } -} - -func resourceTencentCloudMysqlSwitchProxyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_switch_proxy.create")() - defer inconsistentCheck(d, meta)() - - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - - var ( - request = mysql.NewSwitchCDBProxyRequest() - instanceId string - proxyGroupId string - ) - if v, ok := d.GetOk("instance_id"); ok { - instanceId = v.(string) - request.InstanceId = helper.String(v.(string)) - } - - if v, ok := d.GetOk("proxy_group_id"); ok { - proxyGroupId = v.(string) - request.ProxyGroupId = helper.String(v.(string)) - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().SwitchCDBProxy(request) - if e != nil { - return 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 operate mysql switchProxy failed, reason:%+v", logId, err) - return err - } - - d.SetId(instanceId + FILED_SP + proxyGroupId) - - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - proxy, err := service.DescribeMysqlProxyById(ctx, instanceId, proxyGroupId) - if err != nil { - return resource.NonRetryableError(err) - } - if *proxy.Status != "online" { - return resource.RetryableError(fmt.Errorf("%s Switch mysql proxy status is %s", instanceId, *proxy.Status)) - } - err = fmt.Errorf("%s Switch mysql proxy status is %s,we won't wait for it finish", instanceId, *proxy.Status) - return resource.NonRetryableError(err) - }) - - if err != nil { - log.Printf("[CRITAL]%s Switch mysql proxy fail, reason:%s\n ", logId, err.Error()) - return err - } - - return resourceTencentCloudMysqlSwitchProxyRead(d, meta) -} - -func resourceTencentCloudMysqlSwitchProxyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_switch_proxy.read")() - defer inconsistentCheck(d, meta)() - - return nil -} - -func resourceTencentCloudMysqlSwitchProxyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_switch_proxy.delete")() - defer inconsistentCheck(d, meta)() - - return nil -} diff --git a/tencentcloud/data_source_tc_mysql_backup_list.go b/tencentcloud/services/cdb/data_source_tc_mysql_backup_list.go similarity index 86% rename from tencentcloud/data_source_tc_mysql_backup_list.go rename to tencentcloud/services/cdb/data_source_tc_mysql_backup_list.go index 281405dada..6ddc210740 100644 --- a/tencentcloud/data_source_tc_mysql_backup_list.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_backup_list.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdb import ( "context" @@ -6,11 +6,14 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentMysqlBackupList() *schema.Resource { +func DataSourceTencentCloudMysqlBackupList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentMysqlBackupListRead, @@ -24,7 +27,7 @@ func dataSourceTencentMysqlBackupList() *schema.Resource { Type: schema.TypeInt, Optional: true, Default: 10, - ValidateFunc: validateIntegerInRange(1, 10000), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 10000), Description: "The latest files to list, rang from 1 to 10000. And the default value is `10`.", }, "result_output_file": { @@ -87,12 +90,12 @@ func dataSourceTencentMysqlBackupList() *schema.Resource { } func dataSourceTencentMysqlBackupListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_backup_list.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_backup_list.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} max_number, _ := d.Get("max_number").(int) backInfoItems, err := mysqlService.DescribeBackupsByMysqlId(ctx, d.Get("mysql_id").(string), int64(max_number)) @@ -126,7 +129,7 @@ func dataSourceTencentMysqlBackupListRead(d *schema.ResourceData, meta interface if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), itemShemas); err != nil { + if err := tccommon.WriteToFile(output.(string), itemShemas); err != nil { log.Printf("[CRITAL]%s output file[%s] fail, reason[%s]\n", logId, output.(string), err.Error()) } diff --git a/tencentcloud/data_source_tc_mysql_backup_list_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_backup_list_test.go similarity index 60% rename from tencentcloud/data_source_tc_mysql_backup_list_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_backup_list_test.go index 2fd6803a60..069625e11e 100644 --- a/tencentcloud/data_source_tc_mysql_backup_list_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_backup_list_test.go @@ -1,21 +1,23 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccDataSourceMysqlBackupListDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccDataSourceMysqlBackupListConfig(), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_backup_list.test"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_backup_list.test"), ), }, }, @@ -23,7 +25,7 @@ func TestAccDataSourceMysqlBackupListDataSource_basic(t *testing.T) { } func testAccDataSourceMysqlBackupListConfig() string { - return CommonPresetMysql + ` + return tcacctest.CommonPresetMysql + ` data "tencentcloud_mysql_backup_list" "test" { mysql_id = local.mysql_id }` diff --git a/tencentcloud/data_source_tc_mysql_backup_overview.go b/tencentcloud/services/cdb/data_source_tc_mysql_backup_overview.go similarity index 84% rename from tencentcloud/data_source_tc_mysql_backup_overview.go rename to tencentcloud/services/cdb/data_source_tc_mysql_backup_overview.go index 11eb7a1755..cbd9dfb9b8 100644 --- a/tencentcloud/data_source_tc_mysql_backup_overview.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_backup_overview.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlBackupOverview() *schema.Resource { +func DataSourceTencentCloudMysqlBackupOverview() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlBackupOverviewRead, Schema: map[string]*schema.Schema{ @@ -71,11 +74,11 @@ func dataSourceTencentCloudMysqlBackupOverview() *schema.Resource { } func dataSourceTencentCloudMysqlBackupOverviewRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_backup_overview.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_backup_overview.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) product := "" paramMap := make(map[string]interface{}) @@ -85,11 +88,11 @@ func dataSourceTencentCloudMysqlBackupOverviewRead(d *schema.ResourceData, meta } var backupCount *cdb.DescribeBackupOverviewResponseParams - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlBackupOverviewByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } backupCount = result return nil @@ -129,7 +132,7 @@ func dataSourceTencentCloudMysqlBackupOverviewRead(d *schema.ResourceData, meta d.SetId(helper.DataResourceIdsHash([]string{product})) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), backupCount); e != nil { + if e := tccommon.WriteToFile(output.(string), backupCount); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_backup_overview_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_backup_overview_test.go similarity index 84% rename from tencentcloud/data_source_tc_mysql_backup_overview_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_backup_overview_test.go index 8f33d869cc..cb2450e889 100644 --- a/tencentcloud/data_source_tc_mysql_backup_overview_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_backup_overview_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlBackupOverviewDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlBackupOverviewDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_backup_overview.backup_overview"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_backup_overview.backup_overview"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_backup_overview.backup_overview", "backup_archive_volume"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_backup_overview.backup_overview", "backup_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_backup_overview.backup_overview", "backup_standby_volume"), diff --git a/tencentcloud/data_source_tc_mysql_backup_summaries.go b/tencentcloud/services/cdb/data_source_tc_mysql_backup_summaries.go similarity index 89% rename from tencentcloud/data_source_tc_mysql_backup_summaries.go rename to tencentcloud/services/cdb/data_source_tc_mysql_backup_summaries.go index 3266397c9b..7dc855cfa9 100644 --- a/tencentcloud/data_source_tc_mysql_backup_summaries.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_backup_summaries.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlBackupSummaries() *schema.Resource { +func DataSourceTencentCloudMysqlBackupSummaries() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlBackupSummariesRead, Schema: map[string]*schema.Schema{ @@ -101,12 +104,12 @@ func dataSourceTencentCloudMysqlBackupSummaries() *schema.Resource { } func dataSourceTencentCloudMysqlBackupSummariesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_backup_summaries.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_backup_summaries.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("product"); ok { @@ -121,12 +124,12 @@ func dataSourceTencentCloudMysqlBackupSummariesRead(d *schema.ResourceData, meta paramMap["OrderDirection"] = helper.String(v.(string)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var backupSummaries []*cdb.BackupSummaryItem - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlBackupSummariesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } backupSummaries = result return nil @@ -192,7 +195,7 @@ func dataSourceTencentCloudMysqlBackupSummariesRead(d *schema.ResourceData, meta d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_backup_summaries_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_backup_summaries_test.go similarity index 87% rename from tencentcloud/data_source_tc_mysql_backup_summaries_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_backup_summaries_test.go index 8585d75a1d..62d6656d6e 100644 --- a/tencentcloud/data_source_tc_mysql_backup_summaries_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_backup_summaries_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlBackupSummariesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlBackupSummariesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_backup_summaries.backup_summaries"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_backup_summaries.backup_summaries"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_backup_summaries.backup_summaries", "items.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_backup_summaries.backup_summaries", "items.0.auto_backup_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_backup_summaries.backup_summaries", "items.0.auto_backup_volume"), diff --git a/tencentcloud/data_source_tc_mysql_bin_log.go b/tencentcloud/services/cdb/data_source_tc_mysql_bin_log.go similarity index 91% rename from tencentcloud/data_source_tc_mysql_bin_log.go rename to tencentcloud/services/cdb/data_source_tc_mysql_bin_log.go index 4c98f5eb76..329653a7e9 100644 --- a/tencentcloud/data_source_tc_mysql_bin_log.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_bin_log.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlBinLog() *schema.Resource { +func DataSourceTencentCloudMysqlBinLog() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlBinLogRead, Schema: map[string]*schema.Schema{ @@ -141,24 +144,24 @@ func dataSourceTencentCloudMysqlBinLog() *schema.Resource { } func dataSourceTencentCloudMysqlBinLogRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_bin_log.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_bin_log.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { paramMap["InstanceId"] = helper.String(v.(string)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var binLog []*cdb.BinlogInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlBinLogByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } binLog = result return nil @@ -269,7 +272,7 @@ func dataSourceTencentCloudMysqlBinLogRead(d *schema.ResourceData, meta interfac d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_bin_log_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_bin_log_test.go similarity index 86% rename from tencentcloud/data_source_tc_mysql_bin_log_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_bin_log_test.go index c5fae9d8b8..32f826f609 100644 --- a/tencentcloud/data_source_tc_mysql_bin_log_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_bin_log_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlBinLogDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlBinLogDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_bin_log.bin_log"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_bin_log.bin_log"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_bin_log.bin_log", "items.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_bin_log.bin_log", "items.0.name"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_bin_log.bin_log", "items.0.region"), @@ -40,7 +42,7 @@ func TestAccTencentCloudMysqlBinLogDataSource_basic(t *testing.T) { const testAccMysqlBinLogDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` const testAccMysqlBinLogDataSource = testAccMysqlBinLogDataSourceVar + ` diff --git a/tencentcloud/data_source_tc_mysql_binlog_backup_overview.go b/tencentcloud/services/cdb/data_source_tc_mysql_binlog_backup_overview.go similarity index 84% rename from tencentcloud/data_source_tc_mysql_binlog_backup_overview.go rename to tencentcloud/services/cdb/data_source_tc_mysql_binlog_backup_overview.go index 09f8c99fa6..eae76f8f94 100644 --- a/tencentcloud/data_source_tc_mysql_binlog_backup_overview.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_binlog_backup_overview.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlBinlogBackupOverview() *schema.Resource { +func DataSourceTencentCloudMysqlBinlogBackupOverview() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlBinlogBackupOverviewRead, Schema: map[string]*schema.Schema{ @@ -77,12 +80,12 @@ func dataSourceTencentCloudMysqlBinlogBackupOverview() *schema.Resource { } func dataSourceTencentCloudMysqlBinlogBackupOverviewRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_binlog_backup_overview.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_binlog_backup_overview.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) product := "" paramMap := make(map[string]interface{}) @@ -91,12 +94,12 @@ func dataSourceTencentCloudMysqlBinlogBackupOverviewRead(d *schema.ResourceData, paramMap["Product"] = helper.String(v.(string)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var binlogBackupOverview *cdb.DescribeBinlogBackupOverviewResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlBinlogBackupOverviewByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } binlogBackupOverview = result return nil @@ -140,7 +143,7 @@ func dataSourceTencentCloudMysqlBinlogBackupOverviewRead(d *schema.ResourceData, d.SetId(helper.DataResourceIdsHash([]string{product})) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), binlogBackupOverview); e != nil { + if e := tccommon.WriteToFile(output.(string), binlogBackupOverview); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_binlog_backup_overview_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_binlog_backup_overview_test.go similarity index 86% rename from tencentcloud/data_source_tc_mysql_binlog_backup_overview_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_binlog_backup_overview_test.go index 2c639762c1..389e50d28d 100644 --- a/tencentcloud/data_source_tc_mysql_binlog_backup_overview_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_binlog_backup_overview_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlBinlogBackupOverviewDataSource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlBinlogBackupOverviewDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_binlog_backup_overview.binlog_backup_overview"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_binlog_backup_overview.binlog_backup_overview"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_binlog_backup_overview.binlog_backup_overview", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_binlog_backup_overview.binlog_backup_overview", "binlog_archive_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_binlog_backup_overview.binlog_backup_overview", "binlog_archive_volume"), diff --git a/tencentcloud/data_source_tc_mysql_clone_list.go b/tencentcloud/services/cdb/data_source_tc_mysql_clone_list.go similarity index 87% rename from tencentcloud/data_source_tc_mysql_clone_list.go rename to tencentcloud/services/cdb/data_source_tc_mysql_clone_list.go index eeb933a7c2..2e8e6116f2 100644 --- a/tencentcloud/data_source_tc_mysql_clone_list.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_clone_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlCloneList() *schema.Resource { +func DataSourceTencentCloudMysqlCloneList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlCloneListRead, Schema: map[string]*schema.Schema{ @@ -89,12 +92,12 @@ func dataSourceTencentCloudMysqlCloneList() *schema.Resource { } func dataSourceTencentCloudMysqlCloneListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_clone_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_clone_list.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instanceId := "" paramMap := make(map[string]interface{}) @@ -103,12 +106,12 @@ func dataSourceTencentCloudMysqlCloneListRead(d *schema.ResourceData, meta inter paramMap["InstanceId"] = helper.String(v.(string)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var cloneList []*cdb.CloneItem - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlCloneListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } cloneList = result return nil @@ -174,7 +177,7 @@ func dataSourceTencentCloudMysqlCloneListRead(d *schema.ResourceData, meta inter d.SetId(helper.DataResourceIdsHash([]string{instanceId})) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_clone_list_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_clone_list_test.go similarity index 68% rename from tencentcloud/data_source_tc_mysql_clone_list_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_clone_list_test.go index 4741b464e4..842db2983a 100644 --- a/tencentcloud/data_source_tc_mysql_clone_list_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_clone_list_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlCloneListDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlCloneListDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_clone_list.clone_list"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_clone_list.clone_list"), ), }, }, @@ -27,7 +29,7 @@ func TestAccTencentCloudMysqlCloneListDataSource_basic(t *testing.T) { const testAccMysqlCloneListDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/data_source_tc_mysql_data_backup_overview.go b/tencentcloud/services/cdb/data_source_tc_mysql_data_backup_overview.go similarity index 88% rename from tencentcloud/data_source_tc_mysql_data_backup_overview.go rename to tencentcloud/services/cdb/data_source_tc_mysql_data_backup_overview.go index fdf19a7ecc..2b1d362000 100644 --- a/tencentcloud/data_source_tc_mysql_data_backup_overview.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_data_backup_overview.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlDataBackupOverview() *schema.Resource { +func DataSourceTencentCloudMysqlDataBackupOverview() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlDataBackupOverviewRead, Schema: map[string]*schema.Schema{ @@ -101,12 +104,12 @@ func dataSourceTencentCloudMysqlDataBackupOverview() *schema.Resource { } func dataSourceTencentCloudMysqlDataBackupOverviewRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_data_backup_overview.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_data_backup_overview.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) product := "" paramMap := make(map[string]interface{}) @@ -115,12 +118,12 @@ func dataSourceTencentCloudMysqlDataBackupOverviewRead(d *schema.ResourceData, m paramMap["Product"] = helper.String(v.(string)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var dataBackupOverview *cdb.DescribeDataBackupOverviewResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlDataBackupOverviewByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } dataBackupOverview = result return nil @@ -180,7 +183,7 @@ func dataSourceTencentCloudMysqlDataBackupOverviewRead(d *schema.ResourceData, m d.SetId(helper.DataResourceIdsHash([]string{product})) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), dataBackupOverview); e != nil { + if e := tccommon.WriteToFile(output.(string), dataBackupOverview); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_data_backup_overview_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_data_backup_overview_test.go similarity index 89% rename from tencentcloud/data_source_tc_mysql_data_backup_overview_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_data_backup_overview_test.go index 61d29c88d6..2f82034277 100644 --- a/tencentcloud/data_source_tc_mysql_data_backup_overview_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_data_backup_overview_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlDataBackupOverviewDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlDataBackupOverviewDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_data_backup_overview.data_backup_overview"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_data_backup_overview.data_backup_overview"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_data_backup_overview.data_backup_overview", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_data_backup_overview.data_backup_overview", "auto_backup_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_data_backup_overview.data_backup_overview", "auto_backup_volume"), diff --git a/tencentcloud/data_source_tc_mysql_databases.go b/tencentcloud/services/cdb/data_source_tc_mysql_databases.go similarity index 84% rename from tencentcloud/data_source_tc_mysql_databases.go rename to tencentcloud/services/cdb/data_source_tc_mysql_databases.go index 6dc1c16e4b..65a557b4df 100644 --- a/tencentcloud/data_source_tc_mysql_databases.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_databases.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlDatabases() *schema.Resource { +func DataSourceTencentCloudMysqlDatabases() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlDatabasesRead, Schema: map[string]*schema.Schema{ @@ -76,12 +79,12 @@ func dataSourceTencentCloudMysqlDatabases() *schema.Resource { } func dataSourceTencentCloudMysqlDatabasesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_databases.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_databases.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { @@ -92,13 +95,13 @@ func dataSourceTencentCloudMysqlDatabasesRead(d *schema.ResourceData, meta inter paramMap["DatabaseRegexp"] = helper.String(v.(string)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var databases *cdb.DescribeDatabasesResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlDatabasesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } databases = result return nil @@ -135,7 +138,7 @@ func dataSourceTencentCloudMysqlDatabasesRead(d *schema.ResourceData, meta inter d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), map[string]interface{}{ + if e := tccommon.WriteToFile(output.(string), map[string]interface{}{ "items": databases.Items, "database_list": tmpList, }); e != nil { diff --git a/tencentcloud/data_source_tc_mysql_databases_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_databases_test.go similarity index 78% rename from tencentcloud/data_source_tc_mysql_databases_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_databases_test.go index 21071e3750..3ae9856a08 100644 --- a/tencentcloud/data_source_tc_mysql_databases_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_databases_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlDatabasesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlDatabasesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_databases.databases"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_databases.databases"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_databases.databases", "database_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_databases.databases", "database_list.0.character_set"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_databases.databases", "database_list.0.database_name"), @@ -31,7 +33,7 @@ func TestAccTencentCloudMysqlDatabasesDataSource_basic(t *testing.T) { const testAccMysqlDatabasesDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/data_source_tc_mysql_db_features.go b/tencentcloud/services/cdb/data_source_tc_mysql_db_features.go similarity index 85% rename from tencentcloud/data_source_tc_mysql_db_features.go rename to tencentcloud/services/cdb/data_source_tc_mysql_db_features.go index 31499048d5..0830ef0a00 100644 --- a/tencentcloud/data_source_tc_mysql_db_features.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_db_features.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlDbFeatures() *schema.Resource { +func DataSourceTencentCloudMysqlDbFeatures() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlDbFeaturesRead, Schema: map[string]*schema.Schema{ @@ -83,11 +86,11 @@ func dataSourceTencentCloudMysqlDbFeatures() *schema.Resource { } func dataSourceTencentCloudMysqlDbFeaturesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_db_features.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_db_features.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instanceId string paramMap := make(map[string]interface{}) @@ -96,12 +99,12 @@ func dataSourceTencentCloudMysqlDbFeaturesRead(d *schema.ResourceData, meta inte paramMap["InstanceId"] = helper.String(v.(string)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var dbFeatures *cdb.DescribeDBFeaturesResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlDbFeaturesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } dbFeatures = result return nil @@ -149,7 +152,7 @@ func dataSourceTencentCloudMysqlDbFeaturesRead(d *schema.ResourceData, meta inte d.SetId(instanceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_db_features_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_db_features_test.go similarity index 84% rename from tencentcloud/data_source_tc_mysql_db_features_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_db_features_test.go index f7a54196c3..d4c5a4f859 100644 --- a/tencentcloud/data_source_tc_mysql_db_features_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_db_features_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlDbFeaturesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlDbFeaturesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_db_features.db_features"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_db_features.db_features"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_db_features.db_features", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_db_features.db_features", "audit_need_upgrade"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_db_features.db_features", "current_sub_version"), @@ -37,7 +39,7 @@ func TestAccTencentCloudMysqlDbFeaturesDataSource_basic(t *testing.T) { const testAccMysqlDbFeaturesDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/data_source_tc_mysql_default_params.go b/tencentcloud/services/cdb/data_source_tc_mysql_default_params.go similarity index 86% rename from tencentcloud/data_source_tc_mysql_default_params.go rename to tencentcloud/services/cdb/data_source_tc_mysql_default_params.go index 81be7165c3..6fcc4662c6 100644 --- a/tencentcloud/data_source_tc_mysql_default_params.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_default_params.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "context" "fmt" "math/rand" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func datasourceTencentCloudMysqlDefaultParams() *schema.Resource { +func DataSourceTencentCloudMysqlDefaultParams() *schema.Resource { return &schema.Resource{ Read: datasourceTencentCloudMysqlDefaultParamsRead, Importer: &schema.ResourceImporter{ @@ -91,13 +94,13 @@ func datasourceTencentCloudMysqlDefaultParams() *schema.Resource { } func datasourceTencentCloudMysqlDefaultParamsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("datasource.tencentcloud_mysql_default_params.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("datasource.tencentcloud_mysql_default_params.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := MysqlService{client: client} engineVersion := d.Get("db_version").(string) @@ -141,7 +144,7 @@ func datasourceTencentCloudMysqlDefaultParamsRead(d *schema.ResourceData, meta i output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), params); e != nil { + if e := tccommon.WriteToFile(output.(string), params); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_default_params_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_default_params_test.go similarity index 89% rename from tencentcloud/data_source_tc_mysql_default_params_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_default_params_test.go index 2c7570d76f..fd707ab55f 100644 --- a/tencentcloud/data_source_tc_mysql_default_params_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_default_params_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudDataSourceMysqlDefaultParamsDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccDataSourceMysqlDefaultParamBasic, diff --git a/tencentcloud/data_source_tc_mysql_error_log.go b/tencentcloud/services/cdb/data_source_tc_mysql_error_log.go similarity index 84% rename from tencentcloud/data_source_tc_mysql_error_log.go rename to tencentcloud/services/cdb/data_source_tc_mysql_error_log.go index 71dd630a28..2386bc25e2 100644 --- a/tencentcloud/data_source_tc_mysql_error_log.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_error_log.go @@ -1,16 +1,19 @@ -package tencentcloud +package cdb import ( "context" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlErrorLog() *schema.Resource { +func DataSourceTencentCloudMysqlErrorLog() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlErrorLogRead, Schema: map[string]*schema.Schema{ @@ -77,12 +80,12 @@ func dataSourceTencentCloudMysqlErrorLog() *schema.Resource { } func dataSourceTencentCloudMysqlErrorLogRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_error_log.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_error_log.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { @@ -106,12 +109,12 @@ func dataSourceTencentCloudMysqlErrorLogRead(d *schema.ResourceData, meta interf paramMap["InstType"] = helper.String(v.(string)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result []*cdb.ErrlogItem - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeMysqlErrorLogByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -144,7 +147,7 @@ func dataSourceTencentCloudMysqlErrorLogRead(d *schema.ResourceData, meta interf d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_error_log_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_error_log_test.go similarity index 78% rename from tencentcloud/data_source_tc_mysql_error_log_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_error_log_test.go index 926b261d73..be2712ea4e 100644 --- a/tencentcloud/data_source_tc_mysql_error_log_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_error_log_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package cdb_test import ( "fmt" "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -17,14 +19,14 @@ func TestAccTencentCloudMysqlErrorLogDataSource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: fmt.Sprintf(testAccMysqlErrorLogDataSource, startTime, endTime), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_error_log.error_log"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_error_log.error_log"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_error_log.error_log", "items.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_error_log.error_log", "items.0.content"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_error_log.error_log", "items.0.timestamp"), @@ -36,7 +38,7 @@ func TestAccTencentCloudMysqlErrorLogDataSource_basic(t *testing.T) { const testAccMysqlErrorLogDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/data_source_tc_mysql_inst_tables.go b/tencentcloud/services/cdb/data_source_tc_mysql_inst_tables.go similarity index 76% rename from tencentcloud/data_source_tc_mysql_inst_tables.go rename to tencentcloud/services/cdb/data_source_tc_mysql_inst_tables.go index 470ad529fc..f2573e93f2 100644 --- a/tencentcloud/data_source_tc_mysql_inst_tables.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_inst_tables.go @@ -1,14 +1,17 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlInstTables() *schema.Resource { +func DataSourceTencentCloudMysqlInstTables() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlInstTablesRead, Schema: map[string]*schema.Schema{ @@ -49,12 +52,12 @@ func dataSourceTencentCloudMysqlInstTables() *schema.Resource { } func dataSourceTencentCloudMysqlInstTablesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_inst_tables.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_inst_tables.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { @@ -69,12 +72,12 @@ func dataSourceTencentCloudMysqlInstTablesRead(d *schema.ResourceData, meta inte paramMap["TableRegexp"] = helper.String(v.(string)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var tables []*string - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlInstTablesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } tables = result return nil @@ -91,7 +94,7 @@ func dataSourceTencentCloudMysqlInstTablesRead(d *schema.ResourceData, meta inte d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_inst_tables_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_inst_tables_test.go similarity index 74% rename from tencentcloud/data_source_tc_mysql_inst_tables_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_inst_tables_test.go index 532ab38b05..e33e15ec9b 100644 --- a/tencentcloud/data_source_tc_mysql_inst_tables_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_inst_tables_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlInstTablesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlInstTablesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_inst_tables.inst_tables"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_inst_tables.inst_tables"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_inst_tables.inst_tables", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_inst_tables.inst_tables", "items.#"), ), @@ -29,7 +31,7 @@ func TestAccTencentCloudMysqlInstTablesDataSource_basic(t *testing.T) { const testAccMysqlInstTablesDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/data_source_tc_mysql_instance.go b/tencentcloud/services/cdb/data_source_tc_mysql_instance.go similarity index 92% rename from tencentcloud/data_source_tc_mysql_instance.go rename to tencentcloud/services/cdb/data_source_tc_mysql_instance.go index 00d918115e..2a47f4364f 100644 --- a/tencentcloud/data_source_tc_mysql_instance.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_instance.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlInstance() *schema.Resource { +func DataSourceTencentCloudMysqlInstance() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlInstanceRead, Schema: map[string]*schema.Schema{ @@ -21,13 +24,13 @@ func dataSourceTencentCloudMysqlInstance() *schema.Resource { "instance_role": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue([]string{"master", "ro", "dr"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"master", "ro", "dr"}), Description: "Instance type. Supported values include: `master` - master instance, `dr` - disaster recovery instance, and `ro` - read-only instance.", }, "status": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1, 4, 5}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1, 4, 5}), Description: "Instance status. Available values: `0` - Creating; `1` - Running; `4` - Isolating; `5` - Isolated.", }, "security_group_id": { @@ -39,13 +42,13 @@ func dataSourceTencentCloudMysqlInstance() *schema.Resource { Type: schema.TypeInt, Optional: true, Deprecated: "It has been deprecated from version 1.36.0. Please use `charge_type` instead.", - ValidateFunc: validateAllowedIntValue([]int{0, 1}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), Description: "Pay type of instance, `0`: prepay, `1`: postpaid.", }, "charge_type": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue([]string{MYSQL_CHARGE_TYPE_PREPAID, MYSQL_CHARGE_TYPE_POSTPAID}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{MYSQL_CHARGE_TYPE_PREPAID, MYSQL_CHARGE_TYPE_POSTPAID}), Description: "Pay type of instance, valid values are `PREPAID` and `POSTPAID`.", }, "instance_name": { @@ -56,45 +59,45 @@ func dataSourceTencentCloudMysqlInstance() *schema.Resource { "engine_version": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue([]string{"5.1", "5.5", "5.6", "5.7", "8.0"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"5.1", "5.5", "5.6", "5.7", "8.0"}), Description: "The version number of the database engine to use. Supported versions include 5.5/5.6/5.7/8.0.", }, "init_flag": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), Description: "Initialization mark. Available values: `0` - Uninitialized; `1` - Initialized.", }, "with_dr": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), Description: "Indicates whether to query disaster recovery instances.", }, "with_ro": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), Description: "Indicates whether to query read-only instances.", }, "with_master": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), Description: "Indicates whether to query master instances.", }, "offset": { Type: schema.TypeInt, Optional: true, Default: 0, - ValidateFunc: validateIntegerInRange(0, 1000), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 1000), Description: "Record offset. Default is 0.", }, "limit": { Type: schema.TypeInt, Optional: true, Default: 20, - ValidateFunc: validateIntegerInRange(1, 2000), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 2000), Description: "Number of results returned for a single request. Default is `20`, and maximum is 2000.", }, "result_output_file": { @@ -285,9 +288,9 @@ func dataSourceTencentCloudMysqlInstance() *schema.Resource { } func dataSourceTencentCloudMysqlInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_instance.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_instance.read")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cdb.NewDescribeDBInstancesRequest() @@ -362,7 +365,7 @@ func dataSourceTencentCloudMysqlInstanceRead(d *schema.ResourceData, meta interf limitValue := uint64(limit.(int)) request.Limit = &limitValue - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() response, err := client.UseMysqlClient().DescribeDBInstances(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", @@ -443,7 +446,7 @@ func dataSourceTencentCloudMysqlInstanceRead(d *schema.ResourceData, meta interf } output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - err = writeToFile(output.(string), instanceList) + err = tccommon.WriteToFile(output.(string), instanceList) if err != nil { return err } diff --git a/tencentcloud/data_source_tc_mysql_instance_charset.go b/tencentcloud/services/cdb/data_source_tc_mysql_instance_charset.go similarity index 72% rename from tencentcloud/data_source_tc_mysql_instance_charset.go rename to tencentcloud/services/cdb/data_source_tc_mysql_instance_charset.go index 9bd58ec421..f8c3a83720 100644 --- a/tencentcloud/data_source_tc_mysql_instance_charset.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_instance_charset.go @@ -1,14 +1,16 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" ) -func dataSourceTencentCloudMysqlInstanceCharset() *schema.Resource { +func DataSourceTencentCloudMysqlInstanceCharset() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlInstanceCharsetRead, Schema: map[string]*schema.Schema{ @@ -34,24 +36,24 @@ func dataSourceTencentCloudMysqlInstanceCharset() *schema.Resource { } func dataSourceTencentCloudMysqlInstanceCharsetRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_instance_charset.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_instance_charset.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instanceId string if v, ok := d.GetOk("instance_id"); ok { instanceId = v.(string) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceCharset *cdb.DescribeDBInstanceCharsetResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlInstanceCharsetByFilter(ctx, instanceId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceCharset = result return nil @@ -67,7 +69,7 @@ func dataSourceTencentCloudMysqlInstanceCharsetRead(d *schema.ResourceData, meta d.SetId(instanceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_instance_charset_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_instance_charset_test.go similarity index 71% rename from tencentcloud/data_source_tc_mysql_instance_charset_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_instance_charset_test.go index c7d1a4e2e3..d60b5544db 100644 --- a/tencentcloud/data_source_tc_mysql_instance_charset_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_instance_charset_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlInstanceCharsetDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlInstanceCharsetDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_instance_charset.instance_charset"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_instance_charset.instance_charset"), resource.TestCheckResourceAttr("data.tencentcloud_mysql_instance_charset.instance_charset", "charset", "UTF8"), ), }, @@ -28,7 +30,7 @@ func TestAccTencentCloudMysqlInstanceCharsetDataSource_basic(t *testing.T) { const testAccMysqlInstanceCharsetDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/data_source_tc_mysql_instance_info.go b/tencentcloud/services/cdb/data_source_tc_mysql_instance_info.go similarity index 78% rename from tencentcloud/data_source_tc_mysql_instance_info.go rename to tencentcloud/services/cdb/data_source_tc_mysql_instance_info.go index 0ef79598db..c64ba7e564 100644 --- a/tencentcloud/data_source_tc_mysql_instance_info.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_instance_info.go @@ -1,14 +1,16 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" ) -func dataSourceTencentCloudMysqlInstanceInfo() *schema.Resource { +func DataSourceTencentCloudMysqlInstanceInfo() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlInstanceInfoRead, Schema: map[string]*schema.Schema{ @@ -58,23 +60,23 @@ func dataSourceTencentCloudMysqlInstanceInfo() *schema.Resource { } func dataSourceTencentCloudMysqlInstanceInfoRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_instance_info.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_instance_info.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instanceId string if v, ok := d.GetOk("instance_id"); ok { instanceId = v.(string) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceInfo *cdb.DescribeDBInstanceInfoResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlInstanceInfoById(ctx, instanceId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceInfo = result return nil @@ -106,7 +108,7 @@ func dataSourceTencentCloudMysqlInstanceInfoRead(d *schema.ResourceData, meta in d.SetId(instanceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_instance_info_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_instance_info_test.go similarity index 79% rename from tencentcloud/data_source_tc_mysql_instance_info_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_instance_info_test.go index 5ef0194659..5201d18c43 100644 --- a/tencentcloud/data_source_tc_mysql_instance_info_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_instance_info_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlInstanceInfoDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlInstanceInfoDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_instance_info.instance_info"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_instance_info.instance_info"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_instance_info.instance_info", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_instance_info.instance_info", "instance_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_instance_info.instance_info", "instance_name"), @@ -32,7 +34,7 @@ func TestAccTencentCloudMysqlInstanceInfoDataSource_basic(t *testing.T) { const testAccMysqlInstanceInfoDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/data_source_tc_mysql_instance_param_record.go b/tencentcloud/services/cdb/data_source_tc_mysql_instance_param_record.go similarity index 84% rename from tencentcloud/data_source_tc_mysql_instance_param_record.go rename to tencentcloud/services/cdb/data_source_tc_mysql_instance_param_record.go index a91e82d58d..c17a7cd878 100644 --- a/tencentcloud/data_source_tc_mysql_instance_param_record.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_instance_param_record.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlInstanceParamRecord() *schema.Resource { +func DataSourceTencentCloudMysqlInstanceParamRecord() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlInstanceParamRecordRead, Schema: map[string]*schema.Schema{ @@ -69,24 +72,24 @@ func dataSourceTencentCloudMysqlInstanceParamRecord() *schema.Resource { } func dataSourceTencentCloudMysqlInstanceParamRecordRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_instance_param_record.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_instance_param_record.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { paramMap["InstanceId"] = helper.String(v.(string)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceParamRecord []*cdb.ParamRecord - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlInstanceParamRecordByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceParamRecord = result return nil @@ -135,7 +138,7 @@ func dataSourceTencentCloudMysqlInstanceParamRecordRead(d *schema.ResourceData, d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_instance_param_record_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_instance_param_record_test.go similarity index 82% rename from tencentcloud/data_source_tc_mysql_instance_param_record_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_instance_param_record_test.go index 78f82cebcb..6da4608554 100644 --- a/tencentcloud/data_source_tc_mysql_instance_param_record_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_instance_param_record_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlInstanceParamRecordDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlInstanceParamRecordDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_instance_param_record.instance_param_record"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_instance_param_record.instance_param_record"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_instance_param_record.instance_param_record", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_instance_param_record.instance_param_record", "items.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_instance_param_record.instance_param_record", "items.0.is_success"), @@ -34,7 +36,7 @@ func TestAccTencentCloudMysqlInstanceParamRecordDataSource_basic(t *testing.T) { const testAccMysqlInstanceParamRecordDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/data_source_tc_mysql_instance_reboot_time.go b/tencentcloud/services/cdb/data_source_tc_mysql_instance_reboot_time.go similarity index 80% rename from tencentcloud/data_source_tc_mysql_instance_reboot_time.go rename to tencentcloud/services/cdb/data_source_tc_mysql_instance_reboot_time.go index 730279ffb7..a635f4a48a 100644 --- a/tencentcloud/data_source_tc_mysql_instance_reboot_time.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_instance_reboot_time.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlInstanceRebootTime() *schema.Resource { +func DataSourceTencentCloudMysqlInstanceRebootTime() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlInstanceRebootTimeRead, Schema: map[string]*schema.Schema{ @@ -52,12 +55,12 @@ func dataSourceTencentCloudMysqlInstanceRebootTime() *schema.Resource { } func dataSourceTencentCloudMysqlInstanceRebootTimeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_instance_reboot_time.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_instance_reboot_time.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_ids"); ok { @@ -65,12 +68,12 @@ func dataSourceTencentCloudMysqlInstanceRebootTimeRead(d *schema.ResourceData, m paramMap["InstanceIds"] = helper.InterfacesStringsPoint(instanceIdsSet) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceRebootTime []*cdb.InstanceRebootTime - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlInstanceRebootTimeByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceRebootTime = result return nil @@ -103,7 +106,7 @@ func dataSourceTencentCloudMysqlInstanceRebootTimeRead(d *schema.ResourceData, m d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_instance_reboot_time_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_instance_reboot_time_test.go similarity index 78% rename from tencentcloud/data_source_tc_mysql_instance_reboot_time_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_instance_reboot_time_test.go index 251431c99b..809e11d694 100644 --- a/tencentcloud/data_source_tc_mysql_instance_reboot_time_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_instance_reboot_time_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlInstanceRebootTimeDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlInstanceRebootTimeDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_instance_reboot_time.instance_reboot_time"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_instance_reboot_time.instance_reboot_time"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_instance_reboot_time.instance_reboot_time", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_instance_reboot_time.instance_reboot_time", "items.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_instance_reboot_time.instance_reboot_time", "items.0.instance_id"), @@ -31,7 +33,7 @@ func TestAccTencentCloudMysqlInstanceRebootTimeDataSource_basic(t *testing.T) { const testAccMysqlInstanceRebootTimeDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/data_source_tc_mysql_instance_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_instance_test.go similarity index 83% rename from tencentcloud/data_source_tc_mysql_instance_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_instance_test.go index 5798a301ca..a34da7882c 100644 --- a/tencentcloud/data_source_tc_mysql_instance_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_instance_test.go @@ -1,23 +1,25 @@ -package tencentcloud +package cdb_test import ( "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudMysqlInstanceDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTencentCloudMysqlInstanceDataSourceConfig(), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr("data.tencentcloud_mysql_instance.mysql", "instance_list.#", "1"), - resource.TestCheckResourceAttr("data.tencentcloud_mysql_instance.mysql", "instance_list.0.instance_name", defaultMySQLName), + resource.TestCheckResourceAttr("data.tencentcloud_mysql_instance.mysql", "instance_list.0.instance_name", tcacctest.DefaultMySQLName), resource.TestCheckResourceAttr("data.tencentcloud_mysql_instance.mysql", "instance_list.0.pay_type", "1"), resource.TestCheckResourceAttr("data.tencentcloud_mysql_instance.mysql", "instance_list.0.memory_size", "4000"), resource.TestCheckResourceAttr("data.tencentcloud_mysql_instance.mysql", "instance_list.0.volume_size", "200"), @@ -36,5 +38,5 @@ func testAccTencentCloudMysqlInstanceDataSourceConfig() string { data "tencentcloud_mysql_instance" "mysql" { instance_name = "%s" } - `, defaultMySQLName) + `, tcacctest.DefaultMySQLName) } diff --git a/tencentcloud/data_source_tc_mysql_parameter_list.go b/tencentcloud/services/cdb/data_source_tc_mysql_parameter_list.go similarity index 87% rename from tencentcloud/data_source_tc_mysql_parameter_list.go rename to tencentcloud/services/cdb/data_source_tc_mysql_parameter_list.go index 8278f994a7..6eb3ee7c49 100644 --- a/tencentcloud/data_source_tc_mysql_parameter_list.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_parameter_list.go @@ -1,12 +1,15 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -63,7 +66,7 @@ func TencentCloudMysqlParameterDetail() map[string]*schema.Schema { } } -func dataSourceTencentCloudMysqlParameterList() *schema.Resource { +func DataSourceTencentCloudMysqlParameterList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentMysqlParameterListRead, Schema: map[string]*schema.Schema{ @@ -75,7 +78,7 @@ func dataSourceTencentCloudMysqlParameterList() *schema.Resource { "engine_version": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue([]string{"5.1", "5.5", "5.6", "5.7", "8.0"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"5.1", "5.5", "5.6", "5.7", "8.0"}), Description: "The version number of the database engine to use. Supported versions include 5.5/5.6/5.7/8.0.", }, "result_output_file": { @@ -96,12 +99,12 @@ func dataSourceTencentCloudMysqlParameterList() *schema.Resource { } func dataSourceTencentMysqlParameterListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_parameter_list.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_parameter_list.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) mysqlService := MysqlService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var parameterDetails []*cdb.ParameterDetail @@ -148,7 +151,7 @@ func dataSourceTencentMysqlParameterListRead(d *schema.ResourceData, meta interf output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err = writeToFile(output.(string), parameterList); err != nil { + if err = tccommon.WriteToFile(output.(string), parameterList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_mysql_parameter_list_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_parameter_list_test.go similarity index 87% rename from tencentcloud/data_source_tc_mysql_parameter_list_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_parameter_list_test.go index 4c6c2430ab..a65e781b2c 100644 --- a/tencentcloud/data_source_tc_mysql_parameter_list_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_parameter_list_test.go @@ -1,17 +1,19 @@ -package tencentcloud +package cdb_test import ( "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudMysqlParameterListDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlParameterListDataSourceDefaultConfig(), @@ -24,7 +26,7 @@ func TestAccTencentCloudMysqlParameterListDataSource(t *testing.T) { ), }, { - Config: testAccMysqlParameterListDataSourceConfig(CommonPresetMysql), + Config: testAccMysqlParameterListDataSourceConfig(tcacctest.CommonPresetMysql), Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_parameter_list.mysql", "parameter_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_parameter_list.mysql", "parameter_list.0.parameter_name"), diff --git a/tencentcloud/data_source_tc_mysql_project_security_group.go b/tencentcloud/services/cdb/data_source_tc_mysql_project_security_group.go similarity index 91% rename from tencentcloud/data_source_tc_mysql_project_security_group.go rename to tencentcloud/services/cdb/data_source_tc_mysql_project_security_group.go index d4f3fe890a..a84a71391d 100644 --- a/tencentcloud/data_source_tc_mysql_project_security_group.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_project_security_group.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlProjectSecurityGroup() *schema.Resource { +func DataSourceTencentCloudMysqlProjectSecurityGroup() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlProjectSecurityGroupRead, Schema: map[string]*schema.Schema{ @@ -142,24 +145,24 @@ func dataSourceTencentCloudMysqlProjectSecurityGroup() *schema.Resource { } func dataSourceTencentCloudMysqlProjectSecurityGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_project_security_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_project_security_group.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, _ := d.GetOk("project_id"); v != nil { paramMap["ProjectId"] = helper.IntInt64(v.(int)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var groups []*cdb.SecurityGroup - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlProjectSecurityGroupByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } groups = result return nil @@ -274,7 +277,7 @@ func dataSourceTencentCloudMysqlProjectSecurityGroupRead(d *schema.ResourceData, d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_project_security_group_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_project_security_group_test.go similarity index 81% rename from tencentcloud/data_source_tc_mysql_project_security_group_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_project_security_group_test.go index 7421baf6bf..2cc7daa6f6 100644 --- a/tencentcloud/data_source_tc_mysql_project_security_group_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_project_security_group_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlProjectSecurityGroupDataSource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlProjectSecurityGroupDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_project_security_group.project_security_group"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_project_security_group.project_security_group"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_project_security_group.project_security_group", "groups.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_project_security_group.project_security_group", "groups.0.create_time"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_project_security_group.project_security_group", "groups.0.security_group_id"), diff --git a/tencentcloud/data_source_tc_mysql_proxy_custom.go b/tencentcloud/services/cdb/data_source_tc_mysql_proxy_custom.go similarity index 83% rename from tencentcloud/data_source_tc_mysql_proxy_custom.go rename to tencentcloud/services/cdb/data_source_tc_mysql_proxy_custom.go index 979204307d..670fb57d3d 100644 --- a/tencentcloud/data_source_tc_mysql_proxy_custom.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_proxy_custom.go @@ -1,15 +1,4 @@ -/* -Use this data source to query detailed information of mysql proxy_custom - -Example Usage - -```hcl -data "tencentcloud_mysql_proxy_custom" "proxy_custom" { - instance_id = "cdb-fitq5t9h" -} -``` -*/ -package tencentcloud +package cdb import ( "context" @@ -17,9 +6,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" ) -func dataSourceTencentCloudMysqlProxyCustom() *schema.Resource { +func DataSourceTencentCloudMysqlProxyCustom() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlProxyCustomRead, Schema: map[string]*schema.Schema{ @@ -94,24 +85,24 @@ func dataSourceTencentCloudMysqlProxyCustom() *schema.Resource { } func dataSourceTencentCloudMysqlProxyCustomRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_proxy_custom.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_proxy_custom.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instanceId string if v, ok := d.GetOk("instance_id"); ok { instanceId = v.(string) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var proxyCustom *cdb.DescribeProxyCustomConfResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlProxyCustomById(ctx, instanceId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } proxyCustom = result return nil @@ -163,7 +154,7 @@ func dataSourceTencentCloudMysqlProxyCustomRead(d *schema.ResourceData, meta int d.SetId(instanceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/services/cdb/data_source_tc_mysql_proxy_custom.md b/tencentcloud/services/cdb/data_source_tc_mysql_proxy_custom.md new file mode 100644 index 0000000000..b93f1ad5a6 --- /dev/null +++ b/tencentcloud/services/cdb/data_source_tc_mysql_proxy_custom.md @@ -0,0 +1,9 @@ +Use this data source to query detailed information of mysql proxy_custom + +Example Usage + +```hcl +data "tencentcloud_mysql_proxy_custom" "proxy_custom" { + instance_id = "cdb-fitq5t9h" +} +``` diff --git a/tencentcloud/data_source_tc_mysql_proxy_custom_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_proxy_custom_test.go similarity index 61% rename from tencentcloud/data_source_tc_mysql_proxy_custom_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_proxy_custom_test.go index 341f5a5d50..12990e09b4 100644 --- a/tencentcloud/data_source_tc_mysql_proxy_custom_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_proxy_custom_test.go @@ -1,22 +1,24 @@ -package tencentcloud +package cdb_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudNeedFixMysqlProxyCustomDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlProxyCustomDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_proxy_custom.proxy_custom")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_proxy_custom.proxy_custom")), }, }, }) @@ -24,7 +26,7 @@ func TestAccTencentCloudNeedFixMysqlProxyCustomDataSource_basic(t *testing.T) { const testAccMysqlProxyCustomDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/data_source_tc_mysql_ro_min_scale.go b/tencentcloud/services/cdb/data_source_tc_mysql_ro_min_scale.go similarity index 80% rename from tencentcloud/data_source_tc_mysql_ro_min_scale.go rename to tencentcloud/services/cdb/data_source_tc_mysql_ro_min_scale.go index e70c9ba9c8..0d9e1b2d9e 100644 --- a/tencentcloud/data_source_tc_mysql_ro_min_scale.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_ro_min_scale.go @@ -1,16 +1,19 @@ -package tencentcloud +package cdb import ( "context" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlRoMinScale() *schema.Resource { +func DataSourceTencentCloudMysqlRoMinScale() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlRoMinScaleRead, Schema: map[string]*schema.Schema{ @@ -48,12 +51,12 @@ func dataSourceTencentCloudMysqlRoMinScale() *schema.Resource { } func dataSourceTencentCloudMysqlRoMinScaleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_ro_min_scale.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_ro_min_scale.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("ro_instance_id"); ok { @@ -64,12 +67,12 @@ func dataSourceTencentCloudMysqlRoMinScaleRead(d *schema.ResourceData, meta inte paramMap["MasterInstanceId"] = helper.String(v.(string)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var minScale *cdb.DescribeRoMinScaleResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlRoMinScaleByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } minScale = result return nil @@ -89,7 +92,7 @@ func dataSourceTencentCloudMysqlRoMinScaleRead(d *schema.ResourceData, meta inte d.SetId(helper.DataResourceIdsHash([]string{strconv.FormatInt(*minScale.Memory, 10), strconv.FormatInt(*minScale.Volume, 10)})) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), map[string]interface{}{ + if e := tccommon.WriteToFile(output.(string), map[string]interface{}{ "memory": minScale.Memory, "volume": minScale.Volume, }); e != nil { diff --git a/tencentcloud/data_source_tc_mysql_ro_min_scale_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_ro_min_scale_test.go similarity index 74% rename from tencentcloud/data_source_tc_mysql_ro_min_scale_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_ro_min_scale_test.go index f671d989dd..bfc9585445 100644 --- a/tencentcloud/data_source_tc_mysql_ro_min_scale_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_ro_min_scale_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlRoMinScaleDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlRoMinScaleDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_ro_min_scale.ro_min_scale"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_ro_min_scale.ro_min_scale"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_ro_min_scale.ro_min_scale", "memory"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_ro_min_scale.ro_min_scale", "volume"), ), diff --git a/tencentcloud/data_source_tc_mysql_rollback_range_time.go b/tencentcloud/services/cdb/data_source_tc_mysql_rollback_range_time.go similarity index 87% rename from tencentcloud/data_source_tc_mysql_rollback_range_time.go rename to tencentcloud/services/cdb/data_source_tc_mysql_rollback_range_time.go index 70c1a88f4a..4e5cd6b7cb 100644 --- a/tencentcloud/data_source_tc_mysql_rollback_range_time.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_rollback_range_time.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlRollbackRangeTime() *schema.Resource { +func DataSourceTencentCloudMysqlRollbackRangeTime() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlRollbackRangeTimeRead, Schema: map[string]*schema.Schema{ @@ -88,12 +91,12 @@ func dataSourceTencentCloudMysqlRollbackRangeTime() *schema.Resource { } func dataSourceTencentCloudMysqlRollbackRangeTimeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_rollback_range_time.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_rollback_range_time.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_ids"); ok { @@ -109,12 +112,12 @@ func dataSourceTencentCloudMysqlRollbackRangeTimeRead(d *schema.ResourceData, me paramMap["BackupRegion"] = helper.String(v.(string)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var items []*cdb.InstanceRollbackRangeTime - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlRollbackRangeTimeByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } items = result return nil @@ -171,7 +174,7 @@ func dataSourceTencentCloudMysqlRollbackRangeTimeRead(d *schema.ResourceData, me d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_rollback_range_time_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_rollback_range_time_test.go similarity index 81% rename from tencentcloud/data_source_tc_mysql_rollback_range_time_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_rollback_range_time_test.go index edbbd433c5..1a76cf0857 100644 --- a/tencentcloud/data_source_tc_mysql_rollback_range_time_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_rollback_range_time_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlRollbackRangeTimeDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlRollbackRangeTimeDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_rollback_range_time.rollback_range_time"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_rollback_range_time.rollback_range_time"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_rollback_range_time.rollback_range_time", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_rollback_range_time.rollback_range_time", "items.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_rollback_range_time.rollback_range_time", "items.0.instance_id"), @@ -33,7 +35,7 @@ func TestAccTencentCloudMysqlRollbackRangeTimeDataSource_basic(t *testing.T) { const testAccMysqlRollbackRangeTimeDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` const testAccMysqlRollbackRangeTimeDataSource = testAccMysqlRollbackRangeTimeDataSourceVar + ` diff --git a/tencentcloud/data_source_tc_mysql_slow_log.go b/tencentcloud/services/cdb/data_source_tc_mysql_slow_log.go similarity index 83% rename from tencentcloud/data_source_tc_mysql_slow_log.go rename to tencentcloud/services/cdb/data_source_tc_mysql_slow_log.go index ad10797fdb..019daa0060 100644 --- a/tencentcloud/data_source_tc_mysql_slow_log.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_slow_log.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlSlowLog() *schema.Resource { +func DataSourceTencentCloudMysqlSlowLog() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlSlowLogRead, Schema: map[string]*schema.Schema{ @@ -69,12 +72,12 @@ func dataSourceTencentCloudMysqlSlowLog() *schema.Resource { } func dataSourceTencentCloudMysqlSlowLogRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_slow_log.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_slow_log.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instanceId string paramMap := make(map[string]interface{}) @@ -83,12 +86,12 @@ func dataSourceTencentCloudMysqlSlowLogRead(d *schema.ResourceData, meta interfa paramMap["InstanceId"] = helper.String(v.(string)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var items []*cdb.SlowLogInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlSlowLogByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } items = result return nil @@ -135,7 +138,7 @@ func dataSourceTencentCloudMysqlSlowLogRead(d *schema.ResourceData, meta interfa d.SetId(instanceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_slow_log_data.go b/tencentcloud/services/cdb/data_source_tc_mysql_slow_log_data.go similarity index 90% rename from tencentcloud/data_source_tc_mysql_slow_log_data.go rename to tencentcloud/services/cdb/data_source_tc_mysql_slow_log_data.go index bfae522d09..ce1f1d71bd 100644 --- a/tencentcloud/data_source_tc_mysql_slow_log_data.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_slow_log_data.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlSlowLogData() *schema.Resource { +func DataSourceTencentCloudMysqlSlowLogData() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlSlowLogDataRead, Schema: map[string]*schema.Schema{ @@ -151,11 +154,11 @@ func dataSourceTencentCloudMysqlSlowLogData() *schema.Resource { } func dataSourceTencentCloudMysqlSlowLogDataRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_slow_log_data.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_slow_log_data.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instanceId string paramMap := make(map[string]interface{}) @@ -199,12 +202,12 @@ func dataSourceTencentCloudMysqlSlowLogDataRead(d *schema.ResourceData, meta int paramMap["InstType"] = helper.String(v.(string)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var items []*cdb.SlowLogItem - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlSlowLogDataByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } items = result return nil @@ -271,7 +274,7 @@ func dataSourceTencentCloudMysqlSlowLogDataRead(d *schema.ResourceData, meta int d.SetId(instanceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_slow_log_data_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_slow_log_data_test.go similarity index 86% rename from tencentcloud/data_source_tc_mysql_slow_log_data_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_slow_log_data_test.go index 8ed865c451..28154539de 100644 --- a/tencentcloud/data_source_tc_mysql_slow_log_data_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_slow_log_data_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package cdb_test import ( "fmt" "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -16,14 +18,14 @@ func TestAccTencentCloudNeedFixMysqlSlowLogDataDataSource_basic(t *testing.T) { endTime := time.Now().Unix() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: fmt.Sprintf(testAccMysqlSlowLogDataDataSource, startTime, endTime), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_slow_log_data.slow_log_data"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_slow_log_data.slow_log_data"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_slow_log_data.slow_log_data", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_slow_log_data.slow_log_data", "items.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_slow_log_data.slow_log_data", "items.0.database"), @@ -43,7 +45,7 @@ func TestAccTencentCloudNeedFixMysqlSlowLogDataDataSource_basic(t *testing.T) { const testAccMysqlSlowLogDataDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/data_source_tc_mysql_slow_log_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_slow_log_test.go similarity index 82% rename from tencentcloud/data_source_tc_mysql_slow_log_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_slow_log_test.go index 2377b1f165..80b8c5eac1 100644 --- a/tencentcloud/data_source_tc_mysql_slow_log_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_slow_log_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlSlowLogDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlSlowLogDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_slow_log.slow_log"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_slow_log.slow_log"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_slow_log.slow_log", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_slow_log.slow_log", "items.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_slow_log.slow_log", "items.0.date"), @@ -35,7 +37,7 @@ func TestAccTencentCloudMysqlSlowLogDataSource_basic(t *testing.T) { const testAccMysqlSlowLogDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/data_source_tc_mysql_supported_privileges.go b/tencentcloud/services/cdb/data_source_tc_mysql_supported_privileges.go similarity index 80% rename from tencentcloud/data_source_tc_mysql_supported_privileges.go rename to tencentcloud/services/cdb/data_source_tc_mysql_supported_privileges.go index a53cd35ac4..7b087a1ced 100644 --- a/tencentcloud/data_source_tc_mysql_supported_privileges.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_supported_privileges.go @@ -1,14 +1,16 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" ) -func dataSourceTencentCloudMysqlSupportedPrivileges() *schema.Resource { +func DataSourceTencentCloudMysqlSupportedPrivileges() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlSupportedPrivilegesRead, Schema: map[string]*schema.Schema{ @@ -64,23 +66,23 @@ func dataSourceTencentCloudMysqlSupportedPrivileges() *schema.Resource { } func dataSourceTencentCloudMysqlSupportedPrivilegesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_supported_privileges.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_supported_privileges.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instanceId string if v, ok := d.GetOk("instance_id"); ok { instanceId = v.(string) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var supportedPrivileges *cdb.DescribeSupportedPrivilegesResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlSupportedPrivilegesById(ctx, instanceId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } supportedPrivileges = result return nil @@ -108,7 +110,7 @@ func dataSourceTencentCloudMysqlSupportedPrivilegesRead(d *schema.ResourceData, d.SetId(instanceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_supported_privileges_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_supported_privileges_test.go similarity index 80% rename from tencentcloud/data_source_tc_mysql_supported_privileges_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_supported_privileges_test.go index 0cff2b79db..a1ff0dc8c9 100644 --- a/tencentcloud/data_source_tc_mysql_supported_privileges_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_supported_privileges_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlSupportedPrivilegesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlSupportedPrivilegesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_supported_privileges.supported_privileges"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_supported_privileges.supported_privileges"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_supported_privileges.supported_privileges", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_supported_privileges.supported_privileges", "column_supported_privileges.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_supported_privileges.supported_privileges", "database_supported_privileges.#"), @@ -32,7 +34,7 @@ func TestAccTencentCloudMysqlSupportedPrivilegesDataSource_basic(t *testing.T) { const testAccMysqlSupportedPrivilegesDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/data_source_tc_mysql_switch_record.go b/tencentcloud/services/cdb/data_source_tc_mysql_switch_record.go similarity index 77% rename from tencentcloud/data_source_tc_mysql_switch_record.go rename to tencentcloud/services/cdb/data_source_tc_mysql_switch_record.go index e362cccfa2..83fc84b472 100644 --- a/tencentcloud/data_source_tc_mysql_switch_record.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_switch_record.go @@ -1,14 +1,16 @@ -package tencentcloud +package cdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" ) -func dataSourceTencentCloudMysqlSwitchRecord() *schema.Resource { +func DataSourceTencentCloudMysqlSwitchRecord() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlSwitchRecordRead, Schema: map[string]*schema.Schema{ @@ -48,24 +50,24 @@ func dataSourceTencentCloudMysqlSwitchRecord() *schema.Resource { } func dataSourceTencentCloudMysqlSwitchRecordRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_switch_record.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_switch_record.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instanceId string if v, ok := d.GetOk("instance_id"); ok { instanceId = v.(string) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var items []*cdb.DBSwitchInfo - err := resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlSwitchRecordById(ctx, instanceId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } items = result return nil @@ -96,7 +98,7 @@ func dataSourceTencentCloudMysqlSwitchRecordRead(d *schema.ResourceData, meta in d.SetId(instanceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_switch_record_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_switch_record_test.go similarity index 77% rename from tencentcloud/data_source_tc_mysql_switch_record_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_switch_record_test.go index b80a1b60fb..c5d0595f85 100644 --- a/tencentcloud/data_source_tc_mysql_switch_record_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_switch_record_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlSwitchRecordDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlSwitchRecordDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_switch_record.switch_record"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_switch_record.switch_record"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_switch_record.switch_record", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_switch_record.switch_record", "items.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_switch_record.switch_record", "items.0.switch_time"), @@ -31,7 +33,7 @@ func TestAccTencentCloudMysqlSwitchRecordDataSource_basic(t *testing.T) { const testAccMysqlSwitchRecordDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/data_source_tc_mysql_user_task.go b/tencentcloud/services/cdb/data_source_tc_mysql_user_task.go similarity index 92% rename from tencentcloud/data_source_tc_mysql_user_task.go rename to tencentcloud/services/cdb/data_source_tc_mysql_user_task.go index 5e2a3c7c72..acedae0266 100644 --- a/tencentcloud/data_source_tc_mysql_user_task.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_user_task.go @@ -1,16 +1,19 @@ -package tencentcloud +package cdb import ( "context" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudMysqlUserTask() *schema.Resource { +func DataSourceTencentCloudMysqlUserTask() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudMysqlUserTaskRead, Schema: map[string]*schema.Schema{ @@ -129,12 +132,12 @@ func dataSourceTencentCloudMysqlUserTask() *schema.Resource { } func dataSourceTencentCloudMysqlUserTaskRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_user_task.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_user_task.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { @@ -164,12 +167,12 @@ func dataSourceTencentCloudMysqlUserTaskRead(d *schema.ResourceData, meta interf paramMap["StartTimeEnd"] = helper.String(v.(string)) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var items []*cdb.TaskDetail - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeMysqlUserTaskByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } items = result return nil @@ -234,7 +237,7 @@ func dataSourceTencentCloudMysqlUserTaskRead(d *schema.ResourceData, meta interf d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_mysql_user_task_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_user_task_test.go similarity index 85% rename from tencentcloud/data_source_tc_mysql_user_task_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_user_task_test.go index c90ee8b289..067425fef2 100644 --- a/tencentcloud/data_source_tc_mysql_user_task_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_user_task_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudMysqlUserTaskDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlUserTaskDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_user_task.user_task"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_user_task.user_task"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_user_task.user_task", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_user_task.user_task", "items.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_user_task.user_task", "items.0.async_request_id"), @@ -38,7 +40,7 @@ func TestAccTencentCloudMysqlUserTaskDataSource_basic(t *testing.T) { const testAccMysqlUserTaskDataSourceVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` const testAccMysqlUserTaskDataSource = testAccMysqlUserTaskDataSourceVar + ` diff --git a/tencentcloud/data_source_tc_mysql_zone_config.go b/tencentcloud/services/cdb/data_source_tc_mysql_zone_config.go similarity index 94% rename from tencentcloud/data_source_tc_mysql_zone_config.go rename to tencentcloud/services/cdb/data_source_tc_mysql_zone_config.go index dfc3caec12..d84d057063 100644 --- a/tencentcloud/data_source_tc_mysql_zone_config.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_zone_config.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdb import ( "context" @@ -6,6 +6,8 @@ import ( "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" ) @@ -140,7 +142,7 @@ func TencentMysqlZoneConfig() map[string]*schema.Schema { } } -func dataSourceTencentMysqlZoneConfig() *schema.Resource { +func DataSourceTencentCloudMysqlZoneConfig() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentMysqlZoneConfigRead, Schema: map[string]*schema.Schema{ @@ -168,13 +170,13 @@ func dataSourceTencentMysqlZoneConfig() *schema.Resource { } func dataSourceTencentMysqlZoneConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_mysql_zone_config.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_mysql_zone_config.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region if regionInterface, ok := d.GetOk("region"); ok { region = regionInterface.(string) } else { @@ -327,7 +329,7 @@ func dataSourceTencentMysqlZoneConfigRead(d *schema.ResourceData, meta interface d.SetId("zoneconfig" + region) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), zoneConfigs); err != nil { + if err := tccommon.WriteToFile(output.(string), zoneConfigs); err != nil { log.Printf("[CRITAL]%s output file[%s] fail, reason[%s]\n", logId, output.(string), err.Error()) } diff --git a/tencentcloud/data_source_tc_mysql_zone_config_test.go b/tencentcloud/services/cdb/data_source_tc_mysql_zone_config_test.go similarity index 92% rename from tencentcloud/data_source_tc_mysql_zone_config_test.go rename to tencentcloud/services/cdb/data_source_tc_mysql_zone_config_test.go index 0ef6ea632c..9b5cf39d04 100644 --- a/tencentcloud/data_source_tc_mysql_zone_config_test.go +++ b/tencentcloud/services/cdb/data_source_tc_mysql_zone_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccDataSourceMysqlZoneConfigDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccDataSourceMysqlZoneConfig(), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_zone_config.test"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_zone_config.test"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_zone_config.test", "list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_zone_config.test", "list.0.name"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_zone_config.test", "list.0.is_default"), @@ -41,7 +43,7 @@ func TestAccDataSourceMysqlZoneConfigDataSource_basic(t *testing.T) { { Config: testAccDataSourceMysqlZoneConfigWithRegion(), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_zone_config.testWithRegion"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mysql_zone_config.testWithRegion"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_zone_config.testWithRegion", "list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_zone_config.testWithRegion", "list.0.name"), resource.TestCheckResourceAttrSet("data.tencentcloud_mysql_zone_config.testWithRegion", "list.0.is_default"), diff --git a/tencentcloud/services/cdb/extension_mysql.go b/tencentcloud/services/cdb/extension_mysql.go new file mode 100644 index 0000000000..591945bc0d --- /dev/null +++ b/tencentcloud/services/cdb/extension_mysql.go @@ -0,0 +1,129 @@ +package cdb + +const ( + ZONE_SELL_STATUS_ONLINE = 0 +) + +var MYSQL_ALLOW_BACKUP_TIME = []string{"02:00-06:00", "06:00-10:00", "10:00-14:00", "14:00-18:00", "18:00-22:00", "22:00-02:00"} + +var MYSQL_ALLOW_BACKUP_MODEL = []string{"logical", "physical"} + +// mysql Status https://cloud.tencent.com/document/api/236/15872 +const ( + MYSQL_STATUS_DELIVING = 0 + MYSQL_STATUS_RUNNING = 1 + MYSQL_STATUS_ISOLATING = 4 + MYSQL_STATUS_ISOLATED = 5 + //https://cloud.tencent.com/document/api/236/36197 + //Internal business state , not public + MYSQL_STATUS_ISOLATED_1 = 6 + MYSQL_STATUS_ISOLATED_2 = 7 +) + +// Async task status, from https://cloud.tencent.com/document/api/236/20410 +const ( + MYSQL_TASK_STATUS_INITIAL = "INITIAL" + MYSQL_TASK_STATUS_RUNNING = "RUNNING" + MYSQL_TASK_STATUS_SUCCESS = "SUCCESS" + MYSQL_TASK_STATUS_FAILED = "FAILED" + MYSQL_TASK_STATUS_REMOVED = "REMOVED" + MYSQL_TASK_STATUS_PAUSED = "PAUSED " +) + +// default to all host +var MYSQL_DEFAULT_ACCOUNT_HOST = "%" + +var MYSQL_GlOBAL_PRIVILEGE = []string{ + "ALTER", "ALTER ROUTINE", "CREATE", "CREATE ROUTINE", "CREATE TEMPORARY TABLES", + "CREATE USER", "CREATE VIEW", "DELETE", "DROP", "EVENT", "EXECUTE", "INDEX", "INSERT", + "LOCK TABLES", "PROCESS", "REFERENCES", "RELOAD", "REPLICATION CLIENT", + "REPLICATION SLAVE", "SELECT", "SHOW DATABASES", "SHOW VIEW", "TRIGGER", "UPDATE", +} +var MYSQL_DATABASE_PRIVILEGE = []string{"SELECT", "INSERT", "UPDATE", "DELETE", + "CREATE", "DROP", "REFERENCES", "INDEX", + "ALTER", "CREATE TEMPORARY TABLES", "LOCK TABLES", + "EXECUTE", "CREATE VIEW", "SHOW VIEW", + "CREATE ROUTINE", "ALTER ROUTINE", "EVENT", "TRIGGER"} + +var MYSQL_TABLE_PRIVILEGE = []string{ + "SELECT", "INSERT", "UPDATE", "DELETE", "CREATE", "DROP", "REFERENCES", "INDEX", + "ALTER", "CREATE VIEW", "SHOW VIEW", "TRIGGER", +} +var MYSQL_COLUMN_PRIVILEGE = []string{ + "SELECT", "INSERT", "UPDATE", "REFERENCES", +} + +var MYSQL_DATABASE_MUST_PRIVILEGE = "SHOW VIEW" + +var MYSQL_ROLE_MAP = map[int64]string{ + 1: "master", + 2: "ro", + 3: "dr", +} + +var MysqlDelStates = map[int64]bool{ + MYSQL_STATUS_ISOLATING: true, + MYSQL_STATUS_ISOLATED: true, + MYSQL_STATUS_ISOLATED_1: true, + MYSQL_STATUS_ISOLATED_2: true, +} + +// mysql available period value +var MYSQL_AVAILABLE_PERIOD = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36} + +var MYSQL_SUPPORTS_ENGINE = []string{"5.5", "5.6", "5.7", "8.0"} + +// automatic renewal status code +const ( + MYSQL_RENEW_NOUSE = 0 + MYSQL_RENEW_OPEN = 1 + MYSQL_RENEW_CLOSE = 2 +) + +// type of pay +var ( + MysqlPayByMonth = 0 + MysqlPayByUse = 1 +) + +const ( + MYSQL_CHARGE_TYPE_PREPAID = "PREPAID" + MYSQL_CHARGE_TYPE_POSTPAID = "POSTPAID" +) + +var MYSQL_CHARGE_TYPE = map[int]string{ + MysqlPayByMonth: MYSQL_CHARGE_TYPE_PREPAID, + MysqlPayByUse: MYSQL_CHARGE_TYPE_POSTPAID, +} + +const ( + MysqlInstanceIdNotFound = "InvalidParameter.InstanceNotFound" + MysqlInstanceIdNotFound2 = "InvalidParameter" + MysqlInstanceIdNotFound3 = "InternalError.DatabaseAccessError" +) + +var MYSQL_TASK_STATUS = map[string]int64{ + "UNDEFINED": -1, + "INITIAL": 0, + "RUNNING": 1, + "SUCCEED": 2, + "FAILED": 3, + "KILLED": 4, + "REMOVED": 5, + "PAUSED": 6, +} + +var MYSQL_TASK_TYPES = map[string]int64{ + "ROLLBACK": 1, + "SQL OPERATION": 2, + "IMPORT DATA": 3, + "MODIFY PARAM": 5, + "INITIAL": 6, + "REBOOT": 7, + "OPEN GTID": 8, + "UPGRADE RO": 9, + "BATCH ROLLBACK": 10, + "UPGRADE MASTER": 11, + "DROP TABLES": 12, + "SWITCH DR TO MASTER": 13, +} diff --git a/tencentcloud/services/cdb/extension_tags.go b/tencentcloud/services/cdb/extension_tags.go new file mode 100644 index 0000000000..a7d55851f4 --- /dev/null +++ b/tencentcloud/services/cdb/extension_tags.go @@ -0,0 +1,3 @@ +package cdb + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/resource_tc_mysql_account.go b/tencentcloud/services/cdb/resource_tc_mysql_account.go similarity index 80% rename from tencentcloud/resource_tc_mysql_account.go rename to tencentcloud/services/cdb/resource_tc_mysql_account.go index 8543160b4a..e6a7012d5c 100644 --- a/tencentcloud/resource_tc_mysql_account.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_account.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdb import ( "context" @@ -6,12 +6,14 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" ) -func resourceTencentCloudMysqlAccount() *schema.Resource { +func ResourceTencentCloudMysqlAccount() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlAccountCreate, Read: resourceTencentCloudMysqlAccountRead, @@ -43,14 +45,14 @@ func resourceTencentCloudMysqlAccount() *schema.Resource { Type: schema.TypeString, Required: true, Sensitive: true, - ValidateFunc: validateMysqlPassword, + ValidateFunc: tccommon.ValidateMysqlPassword, Description: "Operation password.", }, "description": { Type: schema.TypeString, Optional: true, Default: "--", - ValidateFunc: validateStringLengthInRange(1, 200), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 200), Description: "Database description.", }, "max_user_connections": { @@ -64,12 +66,12 @@ func resourceTencentCloudMysqlAccount() *schema.Resource { } func resourceTencentCloudMysqlAccountCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_account.create")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_account.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( mysqlId = d.Get("mysql_id").(string) @@ -84,7 +86,7 @@ func resourceTencentCloudMysqlAccountCreate(d *schema.ResourceData, meta interfa if err != nil { return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -104,10 +106,10 @@ func resourceTencentCloudMysqlAccountCreate(d *schema.ResourceData, meta interfa return err } - resourceId := fmt.Sprintf("%s%s%s", mysqlId, FILED_SP, accountName) + resourceId := fmt.Sprintf("%s%s%s", mysqlId, tccommon.FILED_SP, accountName) if accountHost != MYSQL_DEFAULT_ACCOUNT_HOST { - resourceId += FILED_SP + accountHost + resourceId += tccommon.FILED_SP + accountHost } d.SetId(resourceId) @@ -116,15 +118,15 @@ func resourceTencentCloudMysqlAccountCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudMysqlAccountRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_account.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_account.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - items := strings.Split(d.Id(), FILED_SP) + items := strings.Split(d.Id(), tccommon.FILED_SP) var ( mysqlId = items[0] @@ -138,7 +140,7 @@ func resourceTencentCloudMysqlAccountRead(d *schema.ResourceData, meta interface } var onlineHas = true - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { allAccounts, e := mysqlService.DescribeAccounts(ctx, mysqlId) if e != nil { if mysqlService.NotFoundMysqlInstance(e) { @@ -146,7 +148,7 @@ func resourceTencentCloudMysqlAccountRead(d *schema.ResourceData, meta interface onlineHas = false return nil } - return retryError(e) + return tccommon.RetryError(e) } for _, account := range allAccounts { if *account.User == accountName && *account.Host == accountHost { @@ -180,14 +182,14 @@ func resourceTencentCloudMysqlAccountRead(d *schema.ResourceData, meta interface return nil } func resourceTencentCloudMysqlAccountUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_account.update")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_account.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - items := strings.Split(d.Id(), FILED_SP) + items := strings.Split(d.Id(), tccommon.FILED_SP) var ( mysqlId = items[0] @@ -208,7 +210,7 @@ func resourceTencentCloudMysqlAccountUpdate(d *schema.ResourceData, meta interfa return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -237,7 +239,7 @@ func resourceTencentCloudMysqlAccountUpdate(d *schema.ResourceData, meta interfa return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -270,7 +272,7 @@ func resourceTencentCloudMysqlAccountUpdate(d *schema.ResourceData, meta interfa return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -299,7 +301,7 @@ func resourceTencentCloudMysqlAccountUpdate(d *schema.ResourceData, meta interfa return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -319,10 +321,10 @@ func resourceTencentCloudMysqlAccountUpdate(d *schema.ResourceData, meta interfa return err } - resourceId := fmt.Sprintf("%s%s%s", mysqlId, FILED_SP, accountName) + resourceId := fmt.Sprintf("%s%s%s", mysqlId, tccommon.FILED_SP, accountName) if newHost.(string) != MYSQL_DEFAULT_ACCOUNT_HOST { - resourceId += FILED_SP + newHost.(string) + resourceId += tccommon.FILED_SP + newHost.(string) } d.SetId(resourceId) @@ -334,14 +336,14 @@ func resourceTencentCloudMysqlAccountUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudMysqlAccountDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_account.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_account.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - items := strings.Split(d.Id(), FILED_SP) + items := strings.Split(d.Id(), tccommon.FILED_SP) var ( mysqlId = items[0] @@ -357,7 +359,7 @@ func resourceTencentCloudMysqlAccountDelete(d *schema.ResourceData, meta interfa return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) diff --git a/tencentcloud/resource_tc_mysql_account_privilege.go b/tencentcloud/services/cdb/resource_tc_mysql_account_privilege.go similarity index 83% rename from tencentcloud/resource_tc_mysql_account_privilege.go rename to tencentcloud/services/cdb/resource_tc_mysql_account_privilege.go index 74b494ef72..559bca5a1a 100644 --- a/tencentcloud/resource_tc_mysql_account_privilege.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_account_privilege.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdb import ( "context" @@ -8,20 +8,23 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" sdkError "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -type resourceTencentCloudMysqlAccountPrivilegeId struct { +type ResourceTencentCloudMysqlAccountPrivilegeId struct { MysqlId string AccountName string AccountHost string `json:"AccountHost,omitempty"` } -func resourceTencentCloudMysqlAccountPrivilege() *schema.Resource { +func ResourceTencentCloudMysqlAccountPrivilege() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This resource has been deprecated in Terraform TencentCloud provider version 1.26.0. Please use 'tencentcloud_mysql_privilege' instead.", @@ -56,7 +59,7 @@ func resourceTencentCloudMysqlAccountPrivilege() *schema.Resource { Description: "Database permissions. Valid values: `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `CREATE`, `DROP`, `REFERENCES`, `INDEX`, `ALTER`, `CREATE TEMPORARY TABLES`, `LOCK TABLES`, `EXECUTE`, `CREATE VIEW`, `SHOW VIEW`, `CREATE ROUTINE`, `ALTER ROUTINE`, `EVENT` and `TRIGGER``.", Elem: &schema.Schema{ Type: schema.TypeString, - ValidateFunc: validateAllowedStringValueIgnoreCase(MYSQL_DATABASE_PRIVILEGE), + ValidateFunc: tccommon.ValidateAllowedStringValueIgnoreCase(MYSQL_DATABASE_PRIVILEGE), }, Set: func(v interface{}) int { return helper.HashString(strings.ToLower(v.(string))) @@ -74,13 +77,13 @@ func resourceTencentCloudMysqlAccountPrivilege() *schema.Resource { } func resourceTencentCloudMysqlAccountPrivilegeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_account_privilege.create")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_account_privilege.create")() var ( mysqlId = d.Get("mysql_id").(string) accountName = d.Get("account_name").(string) accountHost = d.Get("account_host").(string) - privilegeId = resourceTencentCloudMysqlAccountPrivilegeId{MysqlId: mysqlId, + privilegeId = ResourceTencentCloudMysqlAccountPrivilegeId{MysqlId: mysqlId, AccountName: accountName} ) @@ -96,13 +99,13 @@ func resourceTencentCloudMysqlAccountPrivilegeCreate(d *schema.ResourceData, met } func resourceTencentCloudMysqlAccountPrivilegeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_account_privilege.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_account_privilege.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - var privilegeId resourceTencentCloudMysqlAccountPrivilegeId + var privilegeId ResourceTencentCloudMysqlAccountPrivilegeId if err := json.Unmarshal([]byte(d.Id()), &privilegeId); err != nil { err = fmt.Errorf("Local data[terraform.tfstate] corruption,can not got old account privilege id") @@ -114,12 +117,12 @@ func resourceTencentCloudMysqlAccountPrivilegeRead(d *schema.ResourceData, meta privilegeId.AccountHost = MYSQL_DEFAULT_ACCOUNT_HOST } - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} //check if the account is delete var accountInfo *cdb.AccountInfo = nil var onlineHas = true - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { accountInfos, e := mysqlService.DescribeAccounts(ctx, privilegeId.MysqlId) if e != nil { if mysqlService.NotFoundMysqlInstance(e) { @@ -127,7 +130,7 @@ func resourceTencentCloudMysqlAccountPrivilegeRead(d *schema.ResourceData, meta onlineHas = false return nil } - return retryError(e) + return tccommon.RetryError(e) } for _, account := range accountInfos { if *account.User == privilegeId.AccountName && *account.Host == privilegeId.AccountHost { @@ -154,7 +157,7 @@ func resourceTencentCloudMysqlAccountPrivilegeRead(d *schema.ResourceData, meta dbNames = append(dbNames, v.(string)) } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { privileges, e := mysqlService.DescribeAccountPrivileges(ctx, privilegeId.MysqlId, privilegeId.AccountName, @@ -176,7 +179,7 @@ func resourceTencentCloudMysqlAccountPrivilegeRead(d *schema.ResourceData, meta return nil } } - return retryError(e) + return tccommon.RetryError(e) } if !onlineHas { @@ -212,14 +215,14 @@ func resourceTencentCloudMysqlAccountPrivilegeRead(d *schema.ResourceData, meta } func resourceTencentCloudMysqlAccountPrivilegeUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_account_privilege.update")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_account_privilege.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - var privilegeId resourceTencentCloudMysqlAccountPrivilegeId + var privilegeId ResourceTencentCloudMysqlAccountPrivilegeId if err := json.Unmarshal([]byte(d.Id()), &privilegeId); err != nil { err = fmt.Errorf("Local data[terraform.tfstate] corruption,can not got old account privilege id") @@ -259,7 +262,7 @@ func resourceTencentCloudMysqlAccountPrivilegeUpdate(d *schema.ResourceData, met return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -290,14 +293,14 @@ func resourceTencentCloudMysqlAccountPrivilegeUpdate(d *schema.ResourceData, met } func resourceTencentCloudMysqlAccountPrivilegeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_account_privilege.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_account_privilege.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - var privilegeId resourceTencentCloudMysqlAccountPrivilegeId + var privilegeId ResourceTencentCloudMysqlAccountPrivilegeId if err := json.Unmarshal([]byte(d.Id()), &privilegeId); err != nil { err = fmt.Errorf("Local data[terraform.tfstate] corruption,can not got old account privilege id") @@ -326,7 +329,7 @@ func resourceTencentCloudMysqlAccountPrivilegeDelete(d *schema.ResourceData, met if err != nil { return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) diff --git a/tencentcloud/resource_tc_mysql_account_privilege_test.go b/tencentcloud/services/cdb/resource_tc_mysql_account_privilege_test.go similarity index 80% rename from tencentcloud/resource_tc_mysql_account_privilege_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_account_privilege_test.go index 02f195b42a..04cfeddc39 100644 --- a/tencentcloud/resource_tc_mysql_account_privilege_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_account_privilege_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdb_test import ( "context" @@ -7,17 +7,22 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" sdkError "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + + localcdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdb" ) func TestAccTencentCloudMysqlAccountPrivilegeResource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccMysqlAccountPrivilegeDestroy, Steps: []resource.TestStep{ { @@ -53,15 +58,15 @@ func TestAccTencentCloudMysqlAccountPrivilegeResource(t *testing.T) { func testAccMysqlAccountPrivilegeExists(r string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - mysqlService := MysqlService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + mysqlService := localcdb.NewMysqlService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[r] if !ok { return fmt.Errorf("resource %s is not found", r) } - var privilegeId resourceTencentCloudMysqlAccountPrivilegeId + var privilegeId localcdb.ResourceTencentCloudMysqlAccountPrivilegeId if err := json.Unmarshal([]byte(rs.Primary.ID), &privilegeId); err != nil { return fmt.Errorf("Local data[terraform.tfstate] corruption,can not got old account privilege id") @@ -69,11 +74,11 @@ func testAccMysqlAccountPrivilegeExists(r string) resource.TestCheckFunc { var inErr, outErr error - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, inErr = mysqlService.DescribeAccountPrivileges(ctx, privilegeId.MysqlId, privilegeId.AccountName, privilegeId.AccountHost, []string{"test"}) if inErr != nil { if sdkErr, ok := inErr.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == MysqlInstanceIdNotFound { + if sdkErr.Code == localcdb.MysqlInstanceIdNotFound { return resource.NonRetryableError(fmt.Errorf("privilege not exists in mysql")) } if sdkErr.Code == "InvalidParameter" && strings.Contains(sdkErr.GetMessage(), "instance not found") { @@ -93,14 +98,14 @@ func testAccMysqlAccountPrivilegeExists(r string) resource.TestCheckFunc { } var accountInfos []*cdb.AccountInfo - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { accountInfos, inErr = mysqlService.DescribeAccounts(ctx, privilegeId.MysqlId) if inErr != nil { sdkErr, ok := inErr.(*sdkError.TencentCloudSDKError) - if ok && sdkErr.Code == MysqlInstanceIdNotFound { + if ok && sdkErr.Code == localcdb.MysqlInstanceIdNotFound { return resource.NonRetryableError(fmt.Errorf("mysql account %s is not found", rs.Primary.ID)) } - return retryError(inErr, InternalError) + return tccommon.RetryError(inErr, tccommon.InternalError) } return nil @@ -119,16 +124,16 @@ func testAccMysqlAccountPrivilegeExists(r string) resource.TestCheckFunc { } func testAccMysqlAccountPrivilegeDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + mysqlService := localcdb.NewMysqlService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_mysql_account_privilege" { continue } - var privilegeId resourceTencentCloudMysqlAccountPrivilegeId + var privilegeId localcdb.ResourceTencentCloudMysqlAccountPrivilegeId if err := json.Unmarshal([]byte(rs.Primary.ID), &privilegeId); err != nil { return fmt.Errorf("Local data[terraform.tfstate] corruption,can not got old account privilege id") @@ -142,11 +147,11 @@ func testAccMysqlAccountPrivilegeDestroy(s *terraform.State) error { var privileges []string var inErr, outErr error - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { privileges, inErr = mysqlService.DescribeAccountPrivileges(ctx, privilegeId.MysqlId, privilegeId.AccountName, privilegeId.AccountHost, []string{"test"}) if inErr != nil { if sdkErr, ok := inErr.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == MysqlInstanceIdNotFound { + if sdkErr.Code == localcdb.MysqlInstanceIdNotFound { return nil } if sdkErr.Code == "InvalidParameter" && strings.Contains(sdkErr.GetMessage(), "instance not found") { @@ -169,7 +174,7 @@ func testAccMysqlAccountPrivilegeDestroy(s *terraform.State) error { return nil } - if len(privileges) != 1 || privileges[0] != MYSQL_DATABASE_MUST_PRIVILEGE { + if len(privileges) != 1 || privileges[0] != localcdb.MYSQL_DATABASE_MUST_PRIVILEGE { return fmt.Errorf("mysql aacount privilege not clean ok") } } @@ -193,7 +198,7 @@ resource "tencentcloud_mysql_account_privilege" "mysql_account_privilege" { account_host = tencentcloud_mysql_account.mysql_account.host privileges = ["SELECT", "INSERT", "UPDATE", "DELETE"] database_names = ["test"] -}`, CommonPresetMysql) +}`, tcacctest.CommonPresetMysql) } func testAccMysqlAccountPrivilegeUpdate() string { @@ -212,6 +217,6 @@ resource "tencentcloud_mysql_account_privilege" "mysql_account_privilege" { account_host = tencentcloud_mysql_account.mysql_account.host privileges = ["TRIGGER"] database_names = ["test"] -}`, CommonPresetMysql) +}`, tcacctest.CommonPresetMysql) } diff --git a/tencentcloud/resource_tc_mysql_account_test.go b/tencentcloud/services/cdb/resource_tc_mysql_account_test.go similarity index 76% rename from tencentcloud/resource_tc_mysql_account_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_account_test.go index 5507b662c2..a47de131cd 100644 --- a/tencentcloud/resource_tc_mysql_account_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_account_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cdb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdb" + "context" "fmt" "log" @@ -21,16 +25,16 @@ func init() { resource.AddTestSweepers("tencentcloud_mysql_account", &resource.Sweeper{ Name: "tencentcloud_mysql_account", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() - service := MysqlService{client} + service := localcdb.NewMysqlService(client) request := cdb.NewDescribeDBInstancesRequest() request.InstanceNames = []*string{ - helper.String(defaultMySQLName), + helper.String(tcacctest.DefaultMySQLName), } response, err := client.UseMysqlClient().DescribeDBInstances(request) if err != nil { @@ -59,7 +63,7 @@ func init() { if err != nil { created = time.Time{} } - if isResourcePersist(name, &created) { + if tcacctest.IsResourcePersist(name, &created) { continue } if !strings.Contains(name, "test") { @@ -81,8 +85,8 @@ func init() { func TestAccTencentCloudMysqlAccountResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckMysqlAccountDestroy, Steps: []resource.TestStep{ { @@ -119,30 +123,30 @@ func TestAccTencentCloudMysqlAccountResource_basic(t *testing.T) { func testAccCheckMysqlAccountExists(r string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[r] if !ok { return fmt.Errorf("resource %s is not found", r) } - mysqlService := MysqlService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - split := strings.Split(rs.Primary.ID, FILED_SP) + mysqlService := localcdb.NewMysqlService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + split := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(split) < 2 { return fmt.Errorf("mysql account is not set") } var accountInfos []*cdb.AccountInfo var inErr, outErr error - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { accountInfos, inErr = mysqlService.DescribeAccounts(ctx, split[0]) if inErr != nil { sdkErr, ok := inErr.(*sdkError.TencentCloudSDKError) - if ok && sdkErr.Code == MysqlInstanceIdNotFound { + if ok && sdkErr.Code == localcdb.MysqlInstanceIdNotFound { return resource.NonRetryableError(fmt.Errorf("mysql account %s is not found", rs.Primary.ID)) } - return retryError(inErr, InternalError) + return tccommon.RetryError(inErr, tccommon.InternalError) } return nil @@ -160,16 +164,16 @@ func testAccCheckMysqlAccountExists(r string) resource.TestCheckFunc { } func testAccCheckMysqlAccountDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + mysqlService := localcdb.NewMysqlService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, r := range s.RootModule().Resources { if r.Type != "tencentcloud_mysql_account" { continue } - split := strings.Split(r.Primary.ID, FILED_SP) + split := strings.Split(r.Primary.ID, tccommon.FILED_SP) if len(split) < 2 { continue } @@ -180,14 +184,14 @@ func testAccCheckMysqlAccountDestroy(s *terraform.State) error { var accountInfos []*cdb.AccountInfo var inErr, outErr error - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { accountInfos, inErr = mysqlService.DescribeAccounts(ctx, split[0]) if inErr != nil { sdkErr, ok := inErr.(*sdkError.TencentCloudSDKError) - if ok && sdkErr.Code == MysqlInstanceIdNotFound { + if ok && sdkErr.Code == localcdb.MysqlInstanceIdNotFound { return nil } - return retryError(inErr, InternalError) + return tccommon.RetryError(inErr, tccommon.InternalError) } return nil @@ -220,7 +224,7 @@ resource "tencentcloud_mysql_account" "mysql_account" { description = "test from terraform" max_user_connections = 10 } - `, CommonPresetMysql) + `, tcacctest.CommonPresetMysql) } func testAccMysqlAccountUp() string { @@ -235,5 +239,5 @@ resource "tencentcloud_mysql_account" "mysql_account" { description = "test from terraform" max_user_connections = 10 } - `, CommonPresetMysql) + `, tcacctest.CommonPresetMysql) } diff --git a/tencentcloud/resource_tc_mysql_account_testing_test.go b/tencentcloud/services/cdb/resource_tc_mysql_account_testing_test.go similarity index 89% rename from tencentcloud/resource_tc_mysql_account_testing_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_account_testing_test.go index 1c32b14f78..782851a1b1 100644 --- a/tencentcloud/resource_tc_mysql_account_testing_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_account_testing_test.go @@ -1,18 +1,20 @@ -package tencentcloud +package cdb_test import ( "fmt" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) // go test -i; go test -test.run TestAccTencentCloudTestingMysqlAccountResource_basic -v func TestAccTencentCloudTestingMysqlAccountResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckMysqlAccountDestroy, Steps: []resource.TestStep{ { @@ -51,7 +53,7 @@ resource "tencentcloud_mysql_account" "mysql_account" { description = "test from terraform" max_user_connections = 10 } - `, CommonPresetMysql) + `, tcacctest.CommonPresetMysql) } func testAccTestingMysqlAccountUp() string { @@ -66,5 +68,5 @@ resource "tencentcloud_mysql_account" "mysql_account" { description = "test from terraform" max_user_connections = 10 } - `, CommonPresetMysql) + `, tcacctest.CommonPresetMysql) } diff --git a/tencentcloud/resource_tc_mysql_audit_log_file.go b/tencentcloud/services/cdb/resource_tc_mysql_audit_log_file.go similarity index 85% rename from tencentcloud/resource_tc_mysql_audit_log_file.go rename to tencentcloud/services/cdb/resource_tc_mysql_audit_log_file.go index cd863cf11a..983985b2c3 100644 --- a/tencentcloud/resource_tc_mysql_audit_log_file.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_audit_log_file.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdb import ( "context" @@ -7,13 +7,16 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlAuditLogFile() *schema.Resource { +func ResourceTencentCloudMysqlAuditLogFile() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlAuditLogFileCreate, Read: resourceTencentCloudMysqlAuditLogFileRead, @@ -158,10 +161,10 @@ func resourceTencentCloudMysqlAuditLogFile() *schema.Resource { } func resourceTencentCloudMysqlAuditLogFileCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_audit_log_file.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_audit_log_file.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = mysql.NewCreateAuditLogFileRequest() @@ -256,10 +259,10 @@ func resourceTencentCloudMysqlAuditLogFileCreate(d *schema.ResourceData, meta in request.Filter = &auditLogFilter } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().CreateAuditLogFile(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().CreateAuditLogFile(request) if e != nil { - return retryError(e) + 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()) } @@ -272,14 +275,14 @@ func resourceTencentCloudMysqlAuditLogFileCreate(d *schema.ResourceData, meta in } fileName = *response.Response.FileName - d.SetId(instanceId + FILED_SP + fileName) + d.SetId(instanceId + tccommon.FILED_SP + fileName) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - conf := BuildStateChangeConf( + conf := tccommon.BuildStateChangeConf( []string{"creating"}, []string{"success", "failed"}, - 1*readRetryTimeout, + 1*tccommon.ReadRetryTimeout, time.Second, service.MysqlAuditLogFileStateRefreshFunc(instanceId, fileName, []string{}), ) @@ -292,16 +295,16 @@ func resourceTencentCloudMysqlAuditLogFileCreate(d *schema.ResourceData, meta in } func resourceTencentCloudMysqlAuditLogFileRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_audit_log_file.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_audit_log_file.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -331,14 +334,14 @@ func resourceTencentCloudMysqlAuditLogFileRead(d *schema.ResourceData, meta inte } func resourceTencentCloudMysqlAuditLogFileDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_audit_log_file.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_audit_log_file.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_mysql_audit_log_file_test.go b/tencentcloud/services/cdb/resource_tc_mysql_audit_log_file_test.go similarity index 81% rename from tencentcloud/resource_tc_mysql_audit_log_file_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_audit_log_file_test.go index b4e48924a2..4e5381f365 100644 --- a/tencentcloud/resource_tc_mysql_audit_log_file_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_audit_log_file_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudMysqlAuditLogFileResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlAuditLogFile, diff --git a/tencentcloud/resource_tc_mysql_backup_download_restriction.go b/tencentcloud/services/cdb/resource_tc_mysql_backup_download_restriction.go similarity index 83% rename from tencentcloud/resource_tc_mysql_backup_download_restriction.go rename to tencentcloud/services/cdb/resource_tc_mysql_backup_download_restriction.go index 46e503a92d..2b59882986 100644 --- a/tencentcloud/resource_tc_mysql_backup_download_restriction.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_backup_download_restriction.go @@ -1,18 +1,21 @@ -package tencentcloud +package cdb import ( "context" "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlBackupDownloadRestriction() *schema.Resource { +func ResourceTencentCloudMysqlBackupDownloadRestriction() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlBackupDownloadRestrictionCreate, Read: resourceTencentCloudMysqlBackupDownloadRestrictionRead, @@ -76,8 +79,8 @@ func resourceTencentCloudMysqlBackupDownloadRestriction() *schema.Resource { } func resourceTencentCloudMysqlBackupDownloadRestrictionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_backup_download_restriction.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_backup_download_restriction.create")() + defer tccommon.InconsistentCheck(d, meta)() d.SetId("BackupDownloadRestriction") @@ -85,14 +88,14 @@ func resourceTencentCloudMysqlBackupDownloadRestrictionCreate(d *schema.Resource } func resourceTencentCloudMysqlBackupDownloadRestrictionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_backup_download_restriction.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_backup_download_restriction.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} backupDownloadRestriction, err := service.DescribeMysqlBackupDownloadRestrictionById(ctx) if err != nil { @@ -145,10 +148,10 @@ func resourceTencentCloudMysqlBackupDownloadRestrictionRead(d *schema.ResourceDa } func resourceTencentCloudMysqlBackupDownloadRestrictionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_backup_download_restriction.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_backup_download_restriction.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := mysql.NewModifyBackupDownloadRestrictionRequest() @@ -192,15 +195,15 @@ func resourceTencentCloudMysqlBackupDownloadRestrictionUpdate(d *schema.Resource } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().ModifyBackupDownloadRestriction(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().ModifyBackupDownloadRestriction(request) if e != nil { if sdkerr, ok := e.(*sdkErrors.TencentCloudSDKError); ok { if strings.Contains(sdkerr.Code, "FailedOperation") { return resource.NonRetryableError(e) } } - return retryError(e) + 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()) } @@ -215,8 +218,8 @@ func resourceTencentCloudMysqlBackupDownloadRestrictionUpdate(d *schema.Resource } func resourceTencentCloudMysqlBackupDownloadRestrictionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_backup_download_restriction.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_backup_download_restriction.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_backup_download_restriction_test.go b/tencentcloud/services/cdb/resource_tc_mysql_backup_download_restriction_test.go similarity index 91% rename from tencentcloud/resource_tc_mysql_backup_download_restriction_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_backup_download_restriction_test.go index cc79c617c0..c7848fa6cb 100644 --- a/tencentcloud/resource_tc_mysql_backup_download_restriction_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_backup_download_restriction_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ import ( func TestAccTencentCloudMysqlBackupDownloadRestrictionResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlBackupDownloadRestriction, diff --git a/tencentcloud/resource_tc_mysql_backup_encryption_status.go b/tencentcloud/services/cdb/resource_tc_mysql_backup_encryption_status.go similarity index 71% rename from tencentcloud/resource_tc_mysql_backup_encryption_status.go rename to tencentcloud/services/cdb/resource_tc_mysql_backup_encryption_status.go index 9bad425f83..fda04351a0 100644 --- a/tencentcloud/resource_tc_mysql_backup_encryption_status.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_backup_encryption_status.go @@ -1,16 +1,19 @@ -package tencentcloud +package cdb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlBackupEncryptionStatus() *schema.Resource { +func ResourceTencentCloudMysqlBackupEncryptionStatus() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlBackupEncryptionStatusCreate, Read: resourceTencentCloudMysqlBackupEncryptionStatusRead, @@ -36,8 +39,8 @@ func resourceTencentCloudMysqlBackupEncryptionStatus() *schema.Resource { } func resourceTencentCloudMysqlBackupEncryptionStatusCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_backup_encryption_status.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_backup_encryption_status.create")() + defer tccommon.InconsistentCheck(d, meta)() var instanceId string if v, ok := d.GetOk("instance_id"); ok { @@ -50,13 +53,13 @@ func resourceTencentCloudMysqlBackupEncryptionStatusCreate(d *schema.ResourceDat } func resourceTencentCloudMysqlBackupEncryptionStatusRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_backup_encryption_status.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_backup_encryption_status.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -81,10 +84,10 @@ func resourceTencentCloudMysqlBackupEncryptionStatusRead(d *schema.ResourceData, } func resourceTencentCloudMysqlBackupEncryptionStatusUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_backup_encryption_status.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_backup_encryption_status.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := mysql.NewModifyBackupEncryptionStatusRequest() instanceId := d.Id() @@ -95,10 +98,10 @@ func resourceTencentCloudMysqlBackupEncryptionStatusUpdate(d *schema.ResourceDat request.EncryptionStatus = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().ModifyBackupEncryptionStatus(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().ModifyBackupEncryptionStatus(request) if e != nil { - return retryError(e) + 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()) } @@ -113,8 +116,8 @@ func resourceTencentCloudMysqlBackupEncryptionStatusUpdate(d *schema.ResourceDat } func resourceTencentCloudMysqlBackupEncryptionStatusDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_backup_encryption_status.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_backup_encryption_status.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_backup_encryption_status_test.go b/tencentcloud/services/cdb/resource_tc_mysql_backup_encryption_status_test.go similarity index 87% rename from tencentcloud/resource_tc_mysql_backup_encryption_status_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_backup_encryption_status_test.go index 721f233eeb..a76d614aa2 100644 --- a/tencentcloud/resource_tc_mysql_backup_encryption_status_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_backup_encryption_status_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,8 +13,8 @@ func TestAccTencentCloudMysqlBackupEncryptionStatusResource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlBackupEncryptionStatus, @@ -39,7 +41,7 @@ func TestAccTencentCloudMysqlBackupEncryptionStatusResource_basic(t *testing.T) const testAccMysqlBackupEncryptionStatusVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/resource_tc_mysql_backup_policy.go b/tencentcloud/services/cdb/resource_tc_mysql_backup_policy.go similarity index 79% rename from tencentcloud/resource_tc_mysql_backup_policy.go rename to tencentcloud/services/cdb/resource_tc_mysql_backup_policy.go index c4037f001f..92ef5a3c86 100644 --- a/tencentcloud/resource_tc_mysql_backup_policy.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_backup_policy.go @@ -1,15 +1,17 @@ -package tencentcloud +package cdb import ( "bytes" "context" "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudMysqlBackupPolicy() *schema.Resource { +func ResourceTencentCloudMysqlBackupPolicy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlBackupPolicyCreate, Read: resourceTencentCloudMysqlBackupPolicyRead, @@ -25,7 +27,7 @@ func resourceTencentCloudMysqlBackupPolicy() *schema.Resource { }, "retention_period": { Type: schema.TypeInt, - ValidateFunc: validateIntegerInRange(7, 1830), + ValidateFunc: tccommon.ValidateIntegerInRange(7, 1830), Optional: true, Default: 7, Description: "The retention time of backup files, in days. The minimum value is 7 days and the maximum value is 1830 days. And default value is `7`.", @@ -34,14 +36,14 @@ func resourceTencentCloudMysqlBackupPolicy() *schema.Resource { Type: schema.TypeString, Optional: true, Default: MYSQL_ALLOW_BACKUP_MODEL[1], - ValidateFunc: validateAllowedStringValue(MYSQL_ALLOW_BACKUP_MODEL), + ValidateFunc: tccommon.ValidateAllowedStringValue(MYSQL_ALLOW_BACKUP_MODEL), Description: "Backup method. Supported values include: `physical` - physical backup.", }, "backup_time": { Type: schema.TypeString, Optional: true, Default: MYSQL_ALLOW_BACKUP_TIME[0], - ValidateFunc: validateAllowedStringValue(MYSQL_ALLOW_BACKUP_TIME), + ValidateFunc: tccommon.ValidateAllowedStringValue(MYSQL_ALLOW_BACKUP_TIME), Description: "Instance backup time, in the format of 'HH:mm-HH:mm'. Time setting interval is four hours. Default to `02:00-06:00`. The following value can be supported: `02:00-06:00`, `06:00-10:00`, `10:00-14:00`, `14:00-18:00`, `18:00-22:00`, and `22:00-02:00`.", }, @@ -70,7 +72,7 @@ func resourceTencentCloudMysqlBackupPolicy() *schema.Resource { } func resourceTencentCloudMysqlBackupPolicyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_backup_policy.create")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_backup_policy.create")() d.SetId(d.Get("mysql_id").(string)) @@ -78,20 +80,20 @@ func resourceTencentCloudMysqlBackupPolicyCreate(d *schema.ResourceData, meta in } func resourceTencentCloudMysqlBackupPolicyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_backup_policy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_backup_policy.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { desResponse, e := mysqlService.DescribeBackupConfigByMysqlId(ctx, d.Id()) if e != nil { if mysqlService.NotFoundMysqlInstance(e) { d.SetId("") return nil } - return retryError(e) + return tccommon.RetryError(e) } _ = d.Set("mysql_id", d.Id()) _ = d.Set("retention_period", int(*desResponse.Response.BackupExpireDays)) @@ -127,12 +129,12 @@ func resourceTencentCloudMysqlBackupPolicyRead(d *schema.ResourceData, meta inte } func resourceTencentCloudMysqlBackupPolicyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_backup_policy.update")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_backup_policy.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( isUpdate = false @@ -176,14 +178,14 @@ func resourceTencentCloudMysqlBackupPolicyUpdate(d *schema.ResourceData, meta in return resourceTencentCloudMysqlBackupPolicyRead(d, meta) } -//set all config to default +// set all config to default func resourceTencentCloudMysqlBackupPolicyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_backup_policy.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_backup_policy.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( retentionPeriod int64 = 7 diff --git a/tencentcloud/resource_tc_mysql_backup_policy_test.go b/tencentcloud/services/cdb/resource_tc_mysql_backup_policy_test.go similarity index 82% rename from tencentcloud/resource_tc_mysql_backup_policy_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_backup_policy_test.go index 9535bdc21b..e9d0072916 100644 --- a/tencentcloud/resource_tc_mysql_backup_policy_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_backup_policy_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cdb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdb" + "context" "fmt" "testing" @@ -14,8 +18,8 @@ func TestAccTencentCloudMysqlBackupPolicyResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudMysqlBackupPolicyDestroy, Steps: []resource.TestStep{ { @@ -51,15 +55,15 @@ func TestAccTencentCloudMysqlBackupPolicyResource_basic(t *testing.T) { func testAccTencentCloudMysqlBackupPolicyExists(r string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[r] if !ok { return fmt.Errorf("resource %s is not found", r) } - mysqlService := MysqlService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + mysqlService := localcdb.NewMysqlService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, err := mysqlService.DescribeBackupConfigByMysqlId(ctx, rs.Primary.ID) if err != nil { @@ -71,10 +75,10 @@ func testAccTencentCloudMysqlBackupPolicyExists(r string) resource.TestCheckFunc } func testAccTencentCloudMysqlBackupPolicyDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + mysqlService := localcdb.NewMysqlService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_mysql_backup_policy" { continue @@ -92,7 +96,7 @@ func testAccTencentCloudMysqlBackupPolicyDestroy(s *terraform.State) error { if err != nil { sdkErr, ok := err.(*errors.TencentCloudSDKError) - if ok && sdkErr.Code == MysqlInstanceIdNotFound { + if ok && sdkErr.Code == localcdb.MysqlInstanceIdNotFound { continue } return err @@ -121,7 +125,7 @@ resource "tencentcloud_mysql_backup_policy" "mysql_backup_policy" { binlog_period = 35 enable_binlog_standby = "on" binlog_standby_days = 33 -}`, CommonPresetMysql) +}`, tcacctest.CommonPresetMysql) } func testAccMysqlBackupPolicyUpdate() string { @@ -134,5 +138,5 @@ resource "tencentcloud_mysql_backup_policy" "mysql_backup_policy" { binlog_period = 32 enable_binlog_standby = "off" binlog_standby_days = 31 -}`, CommonPresetMysql) +}`, tcacctest.CommonPresetMysql) } diff --git a/tencentcloud/resource_tc_mysql_database.go b/tencentcloud/services/cdb/resource_tc_mysql_database.go similarity index 70% rename from tencentcloud/resource_tc_mysql_database.go rename to tencentcloud/services/cdb/resource_tc_mysql_database.go index 883f4eb521..20eeb83c76 100644 --- a/tencentcloud/resource_tc_mysql_database.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_database.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdb import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlDatabase() *schema.Resource { +func ResourceTencentCloudMysqlDatabase() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlDatabaseCreate, Read: resourceTencentCloudMysqlDatabaseRead, @@ -39,7 +42,7 @@ func resourceTencentCloudMysqlDatabase() *schema.Resource { "character_set_name": { Required: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue([]string{"utf8", "gbk", "latin1", "utf8mb4"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"utf8", "gbk", "latin1", "utf8mb4"}), Description: "Character set. Valid values: `utf8`, `gbk`, `latin1`, `utf8mb4`.", }, }, @@ -47,10 +50,10 @@ func resourceTencentCloudMysqlDatabase() *schema.Resource { } func resourceTencentCloudMysqlDatabaseCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_database.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_database.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = mysql.NewCreateDatabaseRequest() @@ -71,10 +74,10 @@ func resourceTencentCloudMysqlDatabaseCreate(d *schema.ResourceData, meta interf request.CharacterSetName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().CreateDatabase(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().CreateDatabase(request) if e != nil { - return retryError(e) + 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()) } @@ -85,22 +88,22 @@ func resourceTencentCloudMysqlDatabaseCreate(d *schema.ResourceData, meta interf return err } - d.SetId(strings.Join([]string{instanceId, dBName}, FILED_SP)) + d.SetId(strings.Join([]string{instanceId, dBName}, tccommon.FILED_SP)) return resourceTencentCloudMysqlDatabaseRead(d, meta) } func resourceTencentCloudMysqlDatabaseRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_database.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_database.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -137,8 +140,8 @@ func resourceTencentCloudMysqlDatabaseRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudMysqlDatabaseUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_database.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_database.update")() + defer tccommon.InconsistentCheck(d, meta)() immutableArgs := []string{"character_set_name"} @@ -151,14 +154,14 @@ func resourceTencentCloudMysqlDatabaseUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudMysqlDatabaseDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_database.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_database.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_mysql_database_test.go b/tencentcloud/services/cdb/resource_tc_mysql_database_test.go similarity index 81% rename from tencentcloud/resource_tc_mysql_database_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_database_test.go index 50d685de01..f18061de15 100644 --- a/tencentcloud/resource_tc_mysql_database_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_database_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudMysqlDatabaseResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlDatabase, diff --git a/tencentcloud/resource_tc_mysql_db_import_job_operation.go b/tencentcloud/services/cdb/resource_tc_mysql_db_import_job_operation.go similarity index 58% rename from tencentcloud/resource_tc_mysql_db_import_job_operation.go rename to tencentcloud/services/cdb/resource_tc_mysql_db_import_job_operation.go index e67fc34f25..9d0d900f0e 100644 --- a/tencentcloud/resource_tc_mysql_db_import_job_operation.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_db_import_job_operation.go @@ -1,77 +1,4 @@ -/* -Provides a resource to create a mysql db_import_job_operation - -Example Usage - -```hcl -data "tencentcloud_availability_zones_by_product" "zones" { - product = "cdb" -} - -resource "tencentcloud_vpc" "vpc" { - name = "vpc-mysql" - cidr_block = "10.0.0.0/16" -} - -resource "tencentcloud_subnet" "subnet" { - availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.0.name - name = "subnet-mysql" - vpc_id = tencentcloud_vpc.vpc.id - cidr_block = "10.0.0.0/16" - is_multicast = false -} - -resource "tencentcloud_security_group" "security_group" { - name = "sg-mysql" - description = "mysql test" -} - -resource "tencentcloud_mysql_instance" "example" { - internet_service = 1 - engine_version = "5.7" - charge_type = "POSTPAID" - root_password = "PassWord123" - slave_deploy_mode = 0 - availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.0.name - slave_sync_mode = 1 - instance_name = "tf-example-mysql" - mem_size = 4000 - volume_size = 200 - vpc_id = tencentcloud_vpc.vpc.id - subnet_id = tencentcloud_subnet.subnet.id - intranet_port = 3306 - security_groups = [tencentcloud_security_group.security_group.id] - - tags = { - name = "test" - } - - parameters = { - character_set_server = "utf8" - max_connections = "1000" - } -} - -resource "tencentcloud_mysql_account" "example" { - mysql_id = tencentcloud_mysql_instance.example.id - name = "tf_example" - password = "Qwer@234" - description = "desc." - max_user_connections = 10 -} - -resource "tencentcloud_mysql_db_import_job_operation" "example" { - instance_id = tencentcloud_mysql_instance.example.id - user = tencentcloud_mysql_account.example.name - password = tencentcloud_mysql_account.example.password - db_name = "tf_example_db" - file_name = "tf_mysql.sql" - cos_url = "https://terraform-ci-1308919341.cos.ap-guangzhou.myqcloud.com/mysql/mysql.sql?q-sign-algorithm=sha1&q-ak=AKIDRnMWiUNr14F29GvCwOSHu9l_FdCdORqAxblrE10nDaO6mVI701oXTe-gL1QpClgW&q-sign-time=1684921483;1684925083&q-key-time=1684921483;1684925083&q-header-list=host&q-url-param-list=&q-signature=7410be4ef93075aebca459af4e617f8bcaa36f48&x-cos-security-token=EzDm9S6aRDwBLQcaxUNfb0TA30PqhOTa7d82a06a36e94b66bdbc6d09064a397bZypr0mD3oVkbJR9bRYix6BSDVYncX3Y2VCGYK6V2jFWZqIuEHoWJCe-2pDvJDNbMjF3ttWfLMqEouOkxNk28ay9NPHtMXrJgEEMb95BMAhGwi38oA2LjYfQRkk7AHesg2toSf11hiTAjVv-alf5uEidWGnFKe_6BgmnADYvtPptgXHNtsUZCxc33PF6tGBqX" -} -``` - -*/ -package tencentcloud +package cdb import ( "context" @@ -82,10 +9,12 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlDbImportJobOperation() *schema.Resource { +func ResourceTencentCloudMysqlDbImportJobOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlDbImportJobOperationCreate, Read: resourceTencentCloudMysqlDbImportJobOperationRead, @@ -144,11 +73,11 @@ func resourceTencentCloudMysqlDbImportJobOperation() *schema.Resource { } func resourceTencentCloudMysqlDbImportJobOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_db_import_job_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_db_import_job_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = mysql.NewCreateDBImportJobRequest() @@ -180,10 +109,10 @@ func resourceTencentCloudMysqlDbImportJobOperationCreate(d *schema.ResourceData, request.CosUrl = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().CreateDBImportJob(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().CreateDBImportJob(request) if e != nil { - return retryError(e) + 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()) } @@ -196,8 +125,8 @@ func resourceTencentCloudMysqlDbImportJobOperationCreate(d *schema.ResourceData, } asyncRequestId := *response.Response.AsyncRequestId - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := service.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -217,21 +146,21 @@ func resourceTencentCloudMysqlDbImportJobOperationCreate(d *schema.ResourceData, return err } - d.SetId(instanceId + FILED_SP + asyncRequestId) + d.SetId(instanceId + tccommon.FILED_SP + asyncRequestId) return resourceTencentCloudMysqlDbImportJobOperationRead(d, meta) } func resourceTencentCloudMysqlDbImportJobOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_db_import_job_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_db_import_job_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -269,8 +198,8 @@ func resourceTencentCloudMysqlDbImportJobOperationRead(d *schema.ResourceData, m } func resourceTencentCloudMysqlDbImportJobOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_db_import_job_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_db_import_job_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/services/cdb/resource_tc_mysql_db_import_job_operation.md b/tencentcloud/services/cdb/resource_tc_mysql_db_import_job_operation.md new file mode 100644 index 0000000000..1de00e6bd5 --- /dev/null +++ b/tencentcloud/services/cdb/resource_tc_mysql_db_import_job_operation.md @@ -0,0 +1,70 @@ +Provides a resource to create a mysql db_import_job_operation + +Example Usage + +```hcl +data "tencentcloud_availability_zones_by_product" "zones" { + product = "cdb" +} + +resource "tencentcloud_vpc" "vpc" { + name = "vpc-mysql" + cidr_block = "10.0.0.0/16" +} + +resource "tencentcloud_subnet" "subnet" { + availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.0.name + name = "subnet-mysql" + vpc_id = tencentcloud_vpc.vpc.id + cidr_block = "10.0.0.0/16" + is_multicast = false +} + +resource "tencentcloud_security_group" "security_group" { + name = "sg-mysql" + description = "mysql test" +} + +resource "tencentcloud_mysql_instance" "example" { + internet_service = 1 + engine_version = "5.7" + charge_type = "POSTPAID" + root_password = "PassWord123" + slave_deploy_mode = 0 + availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.0.name + slave_sync_mode = 1 + instance_name = "tf-example-mysql" + mem_size = 4000 + volume_size = 200 + vpc_id = tencentcloud_vpc.vpc.id + subnet_id = tencentcloud_subnet.subnet.id + intranet_port = 3306 + security_groups = [tencentcloud_security_group.security_group.id] + + tags = { + name = "test" + } + + parameters = { + character_set_server = "utf8" + max_connections = "1000" + } +} + +resource "tencentcloud_mysql_account" "example" { + mysql_id = tencentcloud_mysql_instance.example.id + name = "tf_example" + password = "Qwer@234" + description = "desc." + max_user_connections = 10 +} + +resource "tencentcloud_mysql_db_import_job_operation" "example" { + instance_id = tencentcloud_mysql_instance.example.id + user = tencentcloud_mysql_account.example.name + password = tencentcloud_mysql_account.example.password + db_name = "tf_example_db" + file_name = "tf_mysql.sql" + cos_url = "https://terraform-ci-1308919341.cos.ap-guangzhou.myqcloud.com/mysql/mysql.sql?q-sign-algorithm=sha1&q-ak=AKIDRnMWiUNr14F29GvCwOSHu9l_FdCdORqAxblrE10nDaO6mVI701oXTe-gL1QpClgW&q-sign-time=1684921483;1684925083&q-key-time=1684921483;1684925083&q-header-list=host&q-url-param-list=&q-signature=7410be4ef93075aebca459af4e617f8bcaa36f48&x-cos-security-token=EzDm9S6aRDwBLQcaxUNfb0TA30PqhOTa7d82a06a36e94b66bdbc6d09064a397bZypr0mD3oVkbJR9bRYix6BSDVYncX3Y2VCGYK6V2jFWZqIuEHoWJCe-2pDvJDNbMjF3ttWfLMqEouOkxNk28ay9NPHtMXrJgEEMb95BMAhGwi38oA2LjYfQRkk7AHesg2toSf11hiTAjVv-alf5uEidWGnFKe_6BgmnADYvtPptgXHNtsUZCxc33PF6tGBqX" +} +``` diff --git a/tencentcloud/resource_tc_mysql_db_import_job_operation_test.go b/tencentcloud/services/cdb/resource_tc_mysql_db_import_job_operation_test.go similarity index 91% rename from tencentcloud/resource_tc_mysql_db_import_job_operation_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_db_import_job_operation_test.go index cacef94d38..ce88c389c5 100644 --- a/tencentcloud/resource_tc_mysql_db_import_job_operation_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_db_import_job_operation_test.go @@ -1,9 +1,11 @@ -package tencentcloud +package cdb_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) // go test -i; go test -test.run TestAccTencentCloudMysqlDbImportJobOperationResource_basic -v @@ -11,9 +13,9 @@ func TestAccTencentCloudMysqlDbImportJobOperationResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlDbImportJobOperation, diff --git a/tencentcloud/resource_tc_mysql_deploy_group.go b/tencentcloud/services/cdb/resource_tc_mysql_deploy_group.go similarity index 75% rename from tencentcloud/resource_tc_mysql_deploy_group.go rename to tencentcloud/services/cdb/resource_tc_mysql_deploy_group.go index d2560f02d2..39aa379926 100644 --- a/tencentcloud/resource_tc_mysql_deploy_group.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_deploy_group.go @@ -1,17 +1,20 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlDeployGroup() *schema.Resource { +func ResourceTencentCloudMysqlDeployGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlDeployGroupCreate, Read: resourceTencentCloudMysqlDeployGroupRead, @@ -52,10 +55,10 @@ func resourceTencentCloudMysqlDeployGroup() *schema.Resource { } func resourceTencentCloudMysqlDeployGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_deploy_group.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_deploy_group.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = mysql.NewCreateDeployGroupRequest() @@ -82,10 +85,10 @@ func resourceTencentCloudMysqlDeployGroupCreate(d *schema.ResourceData, meta int } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().CreateDeployGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().CreateDeployGroup(request) if e != nil { - return retryError(e) + 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()) } @@ -104,14 +107,14 @@ func resourceTencentCloudMysqlDeployGroupCreate(d *schema.ResourceData, meta int } func resourceTencentCloudMysqlDeployGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_deploy_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_deploy_group.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} deployGroupId := d.Id() @@ -146,10 +149,10 @@ func resourceTencentCloudMysqlDeployGroupRead(d *schema.ResourceData, meta inter } func resourceTencentCloudMysqlDeployGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_deploy_group.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_deploy_group.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := mysql.NewModifyNameOrDescByDpIdRequest() @@ -177,10 +180,10 @@ func resourceTencentCloudMysqlDeployGroupUpdate(d *schema.ResourceData, meta int } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().ModifyNameOrDescByDpId(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().ModifyNameOrDescByDpId(request) if e != nil { - return retryError(e) + 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()) } @@ -195,13 +198,13 @@ func resourceTencentCloudMysqlDeployGroupUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudMysqlDeployGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_deploy_group.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_deploy_group.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} deployGroupId := d.Id() if err := service.DeleteMysqlDeployGroupById(ctx, deployGroupId); err != nil { diff --git a/tencentcloud/resource_tc_mysql_deploy_group_test.go b/tencentcloud/services/cdb/resource_tc_mysql_deploy_group_test.go similarity index 82% rename from tencentcloud/resource_tc_mysql_deploy_group_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_deploy_group_test.go index 2cc8353dc9..e9a7df2bdd 100644 --- a/tencentcloud/resource_tc_mysql_deploy_group_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_deploy_group_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudMysqlDeployGroupResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlDeployGroup, diff --git a/tencentcloud/resource_tc_mysql_dr_instance_to_mater.go b/tencentcloud/services/cdb/resource_tc_mysql_dr_instance_to_mater.go similarity index 70% rename from tencentcloud/resource_tc_mysql_dr_instance_to_mater.go rename to tencentcloud/services/cdb/resource_tc_mysql_dr_instance_to_mater.go index 6a434fcb11..748712541d 100644 --- a/tencentcloud/resource_tc_mysql_dr_instance_to_mater.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_dr_instance_to_mater.go @@ -1,16 +1,18 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" ) -func resourceTencentCloudMysqlDrInstanceToMater() *schema.Resource { +func ResourceTencentCloudMysqlDrInstanceToMater() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlDrInstanceToMaterCreate, Read: resourceTencentCloudMysqlDrInstanceToMaterRead, @@ -30,8 +32,8 @@ func resourceTencentCloudMysqlDrInstanceToMater() *schema.Resource { } func resourceTencentCloudMysqlDrInstanceToMaterCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_dr_instance_to_mater.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_dr_instance_to_mater.create")() + defer tccommon.InconsistentCheck(d, meta)() var instanceId string if v, ok := d.GetOk("instance_id"); ok { @@ -44,14 +46,14 @@ func resourceTencentCloudMysqlDrInstanceToMaterCreate(d *schema.ResourceData, me } func resourceTencentCloudMysqlDrInstanceToMaterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_dr_instance_to_mater.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_dr_instance_to_mater.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -74,11 +76,11 @@ func resourceTencentCloudMysqlDrInstanceToMaterRead(d *schema.ResourceData, meta } func resourceTencentCloudMysqlDrInstanceToMaterUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_dr_instance_to_mater.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_dr_instance_to_mater.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := mysql.NewSwitchDrInstanceToMasterRequest() response := mysql.NewSwitchDrInstanceToMasterResponse() @@ -86,10 +88,10 @@ func resourceTencentCloudMysqlDrInstanceToMaterUpdate(d *schema.ResourceData, me request.InstanceId = &instanceId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().SwitchDrInstanceToMaster(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().SwitchDrInstanceToMaster(request) if e != nil { - return retryError(e) + 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()) } @@ -102,8 +104,8 @@ func resourceTencentCloudMysqlDrInstanceToMaterUpdate(d *schema.ResourceData, me } asyncRequestId := *response.Response.AsyncRequestId - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := service.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -127,8 +129,8 @@ func resourceTencentCloudMysqlDrInstanceToMaterUpdate(d *schema.ResourceData, me } func resourceTencentCloudMysqlDrInstanceToMaterDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_dr_instance_to_mater.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_dr_instance_to_mater.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_dr_instance_to_mater_test.go b/tencentcloud/services/cdb/resource_tc_mysql_dr_instance_to_mater_test.go similarity index 83% rename from tencentcloud/resource_tc_mysql_dr_instance_to_mater_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_dr_instance_to_mater_test.go index 87000d3068..aa7bcc1680 100644 --- a/tencentcloud/resource_tc_mysql_dr_instance_to_mater_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_dr_instance_to_mater_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixMysqlDrInstanceToMaterResource_basic(t *testing.T t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlDrInstanceToMater, diff --git a/tencentcloud/resource_tc_mysql_instance.go b/tencentcloud/services/cdb/resource_tc_mysql_instance.go similarity index 90% rename from tencentcloud/resource_tc_mysql_instance.go rename to tencentcloud/services/cdb/resource_tc_mysql_instance.go index 093370a277..3a54768d33 100644 --- a/tencentcloud/resource_tc_mysql_instance.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_instance.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdb import ( "context" @@ -6,10 +6,13 @@ import ( "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -20,14 +23,14 @@ func TencentMsyqlBasicInfo() map[string]*schema.Schema { "instance_name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 100), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 100), Description: "The name of a mysql instance.", }, "pay_type": { Type: schema.TypeInt, Deprecated: "It has been deprecated from version 1.36.0. Please use `charge_type` instead.", Optional: true, - ValidateFunc: validateAllowedIntValue([]int{MysqlPayByMonth, MysqlPayByUse}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{MysqlPayByMonth, MysqlPayByUse}), ConflictsWith: []string{"charge_type", "prepaid_period"}, DiffSuppressFunc: func(k, olds, news string, d *schema.ResourceData) bool { return true @@ -39,7 +42,7 @@ func TencentMsyqlBasicInfo() map[string]*schema.Schema { Type: schema.TypeString, ForceNew: true, Optional: true, - ValidateFunc: validateAllowedStringValue([]string{MYSQL_CHARGE_TYPE_PREPAID, MYSQL_CHARGE_TYPE_POSTPAID}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{MYSQL_CHARGE_TYPE_PREPAID, MYSQL_CHARGE_TYPE_POSTPAID}), ConflictsWith: []string{"pay_type", "period"}, Default: MYSQL_CHARGE_TYPE_POSTPAID, DiffSuppressFunc: func(k, olds, news string, d *schema.ResourceData) bool { @@ -64,7 +67,7 @@ func TencentMsyqlBasicInfo() map[string]*schema.Schema { Optional: true, Default: -1, ConflictsWith: []string{"charge_type", "prepaid_period"}, - ValidateFunc: validateAllowedIntValue(MYSQL_AVAILABLE_PERIOD), + ValidateFunc: tccommon.ValidateAllowedIntValue(MYSQL_AVAILABLE_PERIOD), DiffSuppressFunc: func(k, olds, news string, d *schema.ResourceData) bool { return true }, @@ -75,20 +78,20 @@ func TencentMsyqlBasicInfo() map[string]*schema.Schema { Optional: true, Default: 1, ConflictsWith: []string{"pay_type", "period"}, - ValidateFunc: validateAllowedIntValue(MYSQL_AVAILABLE_PERIOD), + ValidateFunc: tccommon.ValidateAllowedIntValue(MYSQL_AVAILABLE_PERIOD), Description: "Period of instance. NOTES: Only supported prepaid instance.", }, "auto_renew_flag": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), Default: 0, Description: "Auto renew flag. NOTES: Only supported prepaid instance.", }, "intranet_port": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerInRange(1024, 65535), + ValidateFunc: tccommon.ValidateIntegerInRange(1024, 65535), Default: 3306, Description: "Public access port. Valid value ranges: [1024~65535]. The default value is `3306`.", }, @@ -112,14 +115,14 @@ func TencentMsyqlBasicInfo() map[string]*schema.Schema { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateStringLengthInRange(1, 100), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 100), Description: "ID of VPC, which can be modified once every 24 hours and can't be removed.", }, "subnet_id": { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateStringLengthInRange(1, 100), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 100), Description: "Private network ID. If `vpc_id` is set, this value is required.", }, @@ -190,7 +193,7 @@ func TencentMsyqlBasicInfo() map[string]*schema.Schema { } } -func resourceTencentCloudMysqlInstance() *schema.Resource { +func ResourceTencentCloudMysqlInstance() *schema.Resource { specialInfo := map[string]*schema.Schema{ "parameters": { Type: schema.TypeMap, @@ -201,14 +204,14 @@ func resourceTencentCloudMysqlInstance() *schema.Resource { "internet_service": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), Default: 0, Description: "Indicates whether to enable the access to an instance from public network: 0 - No, 1 - Yes.", }, "engine_version": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(MYSQL_SUPPORTS_ENGINE), + ValidateFunc: tccommon.ValidateAllowedStringValue(MYSQL_SUPPORTS_ENGINE), Default: MYSQL_SUPPORTS_ENGINE[len(MYSQL_SUPPORTS_ENGINE)-2], Description: "The version number of the database engine to use. Supported versions include 5.5/5.6/5.7/8.0, and default is 5.7. Upgrade the instance engine version to support 5.6/5.7 and switch immediately.", }, @@ -234,13 +237,13 @@ func resourceTencentCloudMysqlInstance() *schema.Resource { Type: schema.TypeString, Optional: true, Sensitive: true, - ValidateFunc: validateMysqlPassword, + ValidateFunc: tccommon.ValidateMysqlPassword, Description: "Password of root account. This parameter can be specified when you purchase master instances, but it should be ignored when you purchase read-only instances or disaster recovery instances.", }, "slave_deploy_mode": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), Default: 0, Description: "Availability zone deployment method. Available values: 0 - Single availability zone; 1 - Multiple availability zones.", }, @@ -258,7 +261,7 @@ func resourceTencentCloudMysqlInstance() *schema.Resource { "slave_sync_mode": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1, 2}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1, 2}), Default: 0, Description: "Data replication mode. 0 - Async replication; 1 - Semisync replication; 2 - Strongsync replication.", }, @@ -526,7 +529,7 @@ func mysqlMasterInstanceRoleSet(ctx context.Context, requestInter interface{}, d func mysqlCreateInstancePayByMonth(ctx context.Context, d *schema.ResourceData, meta interface{}) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cdb.NewCreateDBInstanceRequest() clientToken := helper.BuildToken() @@ -555,15 +558,15 @@ func mysqlCreateInstancePayByMonth(ctx context.Context, d *schema.ResourceData, } var response *cdb.CreateDBInstanceResponse - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { // shadowed response will not pass to outside - r, inErr := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().CreateDBInstance(request) + r, inErr := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().CreateDBInstance(request) if inErr != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), inErr.Error()) //internal version: replace bpass begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. //internal version: replace bpass end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. - return retryError(inErr) + return tccommon.RetryError(inErr) } if r.Response.InstanceIds == nil && clientToken != "" { @@ -592,7 +595,7 @@ func mysqlCreateInstancePayByMonth(ctx context.Context, d *schema.ResourceData, func mysqlCreateInstancePayByUse(ctx context.Context, d *schema.ResourceData, meta interface{}) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cdb.NewCreateDBInstanceHourRequest() clientToken := helper.BuildToken() request.ClientToken = &clientToken @@ -606,11 +609,11 @@ func mysqlCreateInstancePayByUse(ctx context.Context, d *schema.ResourceData, me } var response *cdb.CreateDBInstanceHourResponse - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { // shadowed response will not pass to outside - r, inErr := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().CreateDBInstanceHour(request) + r, inErr := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().CreateDBInstanceHour(request) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } if r.Response.InstanceIds == nil && clientToken != "" { return resource.RetryableError(fmt.Errorf("%s returns nil instanceIds but client token provided, retrying", request.GetAction())) @@ -639,13 +642,13 @@ func mysqlCreateInstancePayByUse(ctx context.Context, d *schema.ResourceData, me } func resourceTencentCloudMysqlInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_instance.create")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_instance.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) //internal version: replace mysqlServer begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} //internal version: replace mysqlServer end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. payType := getPayType(d).(int) @@ -668,15 +671,15 @@ func resourceTencentCloudMysqlInstanceCreate(d *schema.ResourceData, meta interf //internal version: replace setTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("cdb", "instanceId", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("cdb", "instanceId", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } } //internal version: replace setTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. - err := resource.Retry(7*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(7*tccommon.ReadRetryTimeout, func() *resource.RetryError { mysqlInfo, err := mysqlService.DescribeDBInstanceById(ctx, mysqlID) if err != nil { return resource.NonRetryableError(err) @@ -707,7 +710,7 @@ func resourceTencentCloudMysqlInstanceCreate(d *schema.ResourceData, meta interf if err != nil { return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { if _, ok := err.(*errors.TencentCloudSDKError); !ok { @@ -743,9 +746,9 @@ func tencentMsyqlBasicInfoRead(ctx context.Context, d *schema.ResourceData, meta return } - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} mysqlInfo, errRet = mysqlService.DescribeDBInstanceById(ctx, d.Id()) if errRet != nil { errRet = fmt.Errorf("Describe mysql instance fails, reaseon %s", errRet.Error()) @@ -807,7 +810,7 @@ func tencentMsyqlBasicInfoRead(ctx context.Context, d *schema.ResourceData, meta _ = d.Set("gtid", int(isGTIDOpen)) } - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "cdb", "instanceId", tcClient.Region, d.Id()) if err != nil { @@ -834,16 +837,16 @@ func tencentMsyqlBasicInfoRead(ctx context.Context, d *schema.ResourceData, meta } func resourceTencentCloudMysqlInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var mysqlInfo *cdb.InstanceInfo var e error var onlineHas = true - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { mysqlInfo, e = tencentMsyqlBasicInfoRead(ctx, d, meta, true) if e != nil { if mysqlService.NotFoundMysqlInstance(e) { @@ -851,7 +854,7 @@ func resourceTencentCloudMysqlInstanceRead(d *schema.ResourceData, meta interfac onlineHas = false return nil } - return retryError(e) + return tccommon.RetryError(e) } if mysqlInfo == nil { d.SetId("") @@ -902,7 +905,7 @@ func resourceTencentCloudMysqlInstanceRead(d *schema.ResourceData, meta interfac cares = append(cares, k) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { caresParameters, e := mysqlService.DescribeCaresParameters(ctx, d.Id(), cares) if e != nil { if mysqlService.NotFoundMysqlInstance(e) { @@ -910,7 +913,7 @@ func resourceTencentCloudMysqlInstanceRead(d *schema.ResourceData, meta interfac onlineHas = false return nil } - return retryError(e) + return tccommon.RetryError(e) } if e := d.Set("parameters", caresParameters); e != nil { log.Printf("[CRITAL]%s provider set caresParameters fail, reason:%s\n ", logId, e.Error()) @@ -925,7 +928,7 @@ func resourceTencentCloudMysqlInstanceRead(d *schema.ResourceData, meta interfac return nil } } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { backConfig, e := mysqlService.DescribeDBInstanceConfig(ctx, d.Id()) if e != nil { if mysqlService.NotFoundMysqlInstance(e) { @@ -933,7 +936,7 @@ func resourceTencentCloudMysqlInstanceRead(d *schema.ResourceData, meta interfac onlineHas = false return nil } - return retryError(e) + return tccommon.RetryError(e) } _ = d.Set("slave_sync_mode", int(*backConfig.Response.ProtectMode)) _ = d.Set("slave_deploy_mode", int(*backConfig.Response.DeployMode)) @@ -960,9 +963,9 @@ func resourceTencentCloudMysqlInstanceRead(d *schema.ResourceData, meta interfac */ func mysqlAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}, isReadonly bool) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if d.HasChange("instance_name") { if err := mysqlService.ModifyDBInstanceName(ctx, d.Id(), d.Get("instance_name").(string)); err != nil { @@ -1190,10 +1193,10 @@ func mysqlAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, met oldValue, newValue := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := BuildTagResourceName("cdb", "instanceId", region, d.Id()) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := tccommon.BuildTagResourceName("cdb", "instanceId", region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -1212,9 +1215,9 @@ func mysqlAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, met [master] need set */ func mysqlMasterInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if d.HasChange("project_id") { newProjectId := int64(d.Get("project_id").(int)) @@ -1283,7 +1286,7 @@ func mysqlMasterInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, log.Printf("[CRITAL]%s update mysql %s fail, reason:%s\n ", logId, tag, err.Error()) return err } - err = resource.Retry(10*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { if _, ok := err.(*errors.TencentCloudSDKError); !ok { @@ -1328,7 +1331,7 @@ func mysqlMasterInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, log.Printf("[CRITAL]%s update mysql %s fail, reason:%s\n ", logId, tag, err.Error()) return err } - err = resource.Retry(10*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { if _, ok := err.(*errors.TencentCloudSDKError); !ok { @@ -1367,7 +1370,7 @@ func mysqlMasterInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, return err } - err = resource.Retry(10*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { if _, ok := err.(*errors.TencentCloudSDKError); !ok { @@ -1405,7 +1408,7 @@ func mysqlUpdateInstancePayByMonth(ctx context.Context, d *schema.ResourceData, if d.HasChange("auto_renew_flag") { renewFlag := int64(d.Get("auto_renew_flag").(int)) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if err := mysqlService.ModifyAutoRenewFlag(ctx, d.Id(), renewFlag); err != nil { return err } @@ -1429,10 +1432,10 @@ func mysqlUpdateInstancePayByUse(ctx context.Context, d *schema.ResourceData, me } func resourceTencentCloudMysqlInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_instance.update")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_instance.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) payType := getPayType(d).(int) @@ -1457,18 +1460,18 @@ func resourceTencentCloudMysqlInstanceUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudMysqlInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_instance.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_instance.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { _, err := mysqlService.IsolateDBInstance(ctx, d.Id()) if err != nil { //for the pay order wait - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -1481,7 +1484,7 @@ func resourceTencentCloudMysqlInstanceDelete(d *schema.ResourceData, meta interf payType := getPayType(d).(int) forceDelete := d.Get("force_delete").(bool) - err = resource.Retry(7*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(7*tccommon.ReadRetryTimeout, func() *resource.RetryError { mysqlInfo, err := mysqlService.DescribeDBInstanceById(ctx, d.Id()) if err != nil { @@ -1520,7 +1523,7 @@ func resourceTencentCloudMysqlInstanceDelete(d *schema.ResourceData, meta interf return err } - err = resource.Retry(7*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(7*tccommon.ReadRetryTimeout, func() *resource.RetryError { mysqlInfo, err := mysqlService.DescribeIsolatedDBInstanceById(ctx, d.Id()) if err != nil { if _, ok := err.(*errors.TencentCloudSDKError); !ok { diff --git a/tencentcloud/resource_tc_mysql_instance_encryption_operation.go b/tencentcloud/services/cdb/resource_tc_mysql_instance_encryption_operation.go similarity index 74% rename from tencentcloud/resource_tc_mysql_instance_encryption_operation.go rename to tencentcloud/services/cdb/resource_tc_mysql_instance_encryption_operation.go index 8fc81c860d..d13c39d9b2 100644 --- a/tencentcloud/resource_tc_mysql_instance_encryption_operation.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_instance_encryption_operation.go @@ -1,17 +1,20 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlInstanceEncryptionOperation() *schema.Resource { +func ResourceTencentCloudMysqlInstanceEncryptionOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlInstanceEncryptionOperationCreate, Read: resourceTencentCloudMysqlInstanceEncryptionOperationRead, @@ -43,11 +46,11 @@ func resourceTencentCloudMysqlInstanceEncryptionOperation() *schema.Resource { } func resourceTencentCloudMysqlInstanceEncryptionOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_instance_encryption_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_instance_encryption_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = mysql.NewOpenDBInstanceEncryptionRequest() @@ -66,10 +69,10 @@ func resourceTencentCloudMysqlInstanceEncryptionOperationCreate(d *schema.Resour request.KeyRegion = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().OpenDBInstanceEncryption(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().OpenDBInstanceEncryption(request) if e != nil { - return retryError(e) + 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()) } @@ -82,8 +85,8 @@ func resourceTencentCloudMysqlInstanceEncryptionOperationCreate(d *schema.Resour d.SetId(instanceId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instanceInfo, err := service.DescribeMysqlInstanceInfoById(ctx, instanceId) if err != nil { return resource.NonRetryableError(err) @@ -107,14 +110,14 @@ func resourceTencentCloudMysqlInstanceEncryptionOperationCreate(d *schema.Resour } func resourceTencentCloudMysqlInstanceEncryptionOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_instance_encryption_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_instance_encryption_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -143,8 +146,8 @@ func resourceTencentCloudMysqlInstanceEncryptionOperationRead(d *schema.Resource } func resourceTencentCloudMysqlInstanceEncryptionOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_instance_encryption_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_instance_encryption_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_instance_encryption_operation_test.go b/tencentcloud/services/cdb/resource_tc_mysql_instance_encryption_operation_test.go similarity index 91% rename from tencentcloud/resource_tc_mysql_instance_encryption_operation_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_instance_encryption_operation_test.go index 00b473739d..3889ca81a9 100644 --- a/tencentcloud/resource_tc_mysql_instance_encryption_operation_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_instance_encryption_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudMysqlInstanceEncryptionOperationResource_basic(t *testin resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlInstanceEncryptionOperation, diff --git a/tencentcloud/resource_tc_mysql_instance_test.go b/tencentcloud/services/cdb/resource_tc_mysql_instance_test.go similarity index 92% rename from tencentcloud/resource_tc_mysql_instance_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_instance_test.go index 0134d11be5..e87c12c677 100644 --- a/tencentcloud/resource_tc_mysql_instance_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_instance_test.go @@ -1,11 +1,16 @@ -package tencentcloud +package cdb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdb" + "context" "fmt" "testing" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -26,14 +31,14 @@ func init() { } func testSweepMySQLInstance(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, err := sharedClientForRegion(region) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, err := tcacctest.SharedClientForRegion(region) if err != nil { return err } - client := cli.(*TencentCloudClient).apiV3Conn - service := MysqlService{client: client} + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := localcdb.NewMysqlService(client) request := cdb.NewDescribeDBInstancesRequest() request.Limit = helper.IntUint64(2000) @@ -50,14 +55,14 @@ func testSweepMySQLInstance(region string) error { for _, v := range response.Response.Items { id := *v.InstanceId name := *v.InstanceName - if isResourcePersist(name, nil) { + if tcacctest.IsResourcePersist(name, nil) { continue } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { _, err := service.IsolateDBInstance(ctx, id) if err != nil { //for the pay order wait - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -65,7 +70,7 @@ func testSweepMySQLInstance(region string) error { return err } - _ = resource.Retry(7*readRetryTimeout, func() *resource.RetryError { + _ = resource.Retry(7*tccommon.ReadRetryTimeout, func() *resource.RetryError { mysqlInfo, err := service.DescribeDBInstanceById(ctx, id) if err != nil { @@ -78,10 +83,10 @@ func testSweepMySQLInstance(region string) error { if mysqlInfo == nil { return nil } - if *mysqlInfo.Status == MYSQL_STATUS_ISOLATING || *mysqlInfo.Status == MYSQL_STATUS_RUNNING { + if *mysqlInfo.Status == localcdb.MYSQL_STATUS_ISOLATING || *mysqlInfo.Status == localcdb.MYSQL_STATUS_RUNNING { return resource.RetryableError(fmt.Errorf("mysql isolating.")) } - if *mysqlInfo.Status == MYSQL_STATUS_ISOLATED { + if *mysqlInfo.Status == localcdb.MYSQL_STATUS_ISOLATED { return nil } return resource.NonRetryableError(fmt.Errorf("after IsolateDBInstance mysql Status is %d", *mysqlInfo.Status)) @@ -99,8 +104,8 @@ func testSweepMySQLInstance(region string) error { // go test -i; go test -test.run TestAccTencentCloudMysqlInstanceResource_prepaid -v func TestAccTencentCloudMysqlInstanceResource_prepaid(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckMysqlMasterInstanceDestroy, Steps: []resource.TestStep{ { @@ -127,8 +132,8 @@ func TestAccTencentCloudMysqlInstanceResource_prepaid(t *testing.T) { // go test -i; go test -test.run TestAccTencentCloudMysqlInstanceResource_DeviceType -v func TestAccTencentCloudMysqlInstanceResource_DeviceType(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckMysqlMasterInstanceDestroy, Steps: []resource.TestStep{ { @@ -159,8 +164,8 @@ func TestAccTencentCloudMysqlInstanceResource_DeviceType(t *testing.T) { // go test -i; go test -test.run TestAccTencentCloudMysqlInstanceResource_MasterInstance_fullslave -v func TestAccTencentCloudMysqlInstanceResource_MasterInstance_fullslave(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckMysqlMasterInstanceDestroy, Steps: []resource.TestStep{ { @@ -193,8 +198,8 @@ func TestAccTencentCloudMysqlInstanceResource_MasterInstance_fullslave(t *testin func TestAccTencentCloudMysqlInstanceResource_MasterInstance_basic_and_update(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckMysqlMasterInstanceDestroy, Steps: []resource.TestStep{ { @@ -305,8 +310,8 @@ func TestAccTencentCloudMysqlInstanceResource_MasterInstance_basic_and_update(t // go test -i; go test -test.run TestAccTencentCloudMysqlInstanceResource_mysql8 -v func TestAccTencentCloudMysqlInstanceResource_mysql8(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckMysqlMasterInstanceDestroy, Steps: []resource.TestStep{ { @@ -360,9 +365,9 @@ func TestAccTencentCloudMysqlInstanceResource_mysql8(t *testing.T) { } func testAccCheckMysqlMasterInstanceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - mysqlService := MysqlService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + mysqlService := localcdb.NewMysqlService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_mysql_instance" { continue @@ -373,7 +378,7 @@ func testAccCheckMysqlMasterInstanceDestroy(s *terraform.State) error { } if err != nil { sdkErr, ok := err.(*errors.TencentCloudSDKError) - if ok && sdkErr.Code == MysqlInstanceIdNotFound { + if ok && sdkErr.Code == localcdb.MysqlInstanceIdNotFound { continue } return err @@ -384,8 +389,8 @@ func testAccCheckMysqlMasterInstanceDestroy(s *terraform.State) error { func testAccCheckMysqlMasterInstanceExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -395,7 +400,7 @@ func testAccCheckMysqlMasterInstanceExists(n string) resource.TestCheckFunc { return fmt.Errorf("mysql instance id is not set") } - mysqlService := MysqlService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + mysqlService := localcdb.NewMysqlService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := mysqlService.DescribeDBInstanceById(ctx, rs.Primary.ID) if instance == nil { return fmt.Errorf("mysql instance %s is not found", rs.Primary.ID) diff --git a/tencentcloud/resource_tc_mysql_isolate_instance.go b/tencentcloud/services/cdb/resource_tc_mysql_isolate_instance.go similarity index 75% rename from tencentcloud/resource_tc_mysql_isolate_instance.go rename to tencentcloud/services/cdb/resource_tc_mysql_isolate_instance.go index c4385354e7..c27883563a 100644 --- a/tencentcloud/resource_tc_mysql_isolate_instance.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_isolate_instance.go @@ -1,18 +1,21 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlIsolateInstance() *schema.Resource { +func ResourceTencentCloudMysqlIsolateInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlIsolateInstanceCreate, Read: resourceTencentCloudMysqlIsolateInstanceRead, @@ -30,7 +33,7 @@ func resourceTencentCloudMysqlIsolateInstance() *schema.Resource { "operate": { Required: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue([]string{"isolate", "recover"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"isolate", "recover"}), Description: "Manipulate instance, `isolate` - isolate instance, `recover`- recover isolated instance.", }, @@ -44,8 +47,8 @@ func resourceTencentCloudMysqlIsolateInstance() *schema.Resource { } func resourceTencentCloudMysqlIsolateInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_isolate_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_isolate_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() var instanceId string if v, ok := d.GetOk("instance_id"); ok { @@ -58,13 +61,13 @@ func resourceTencentCloudMysqlIsolateInstanceCreate(d *schema.ResourceData, meta } func resourceTencentCloudMysqlIsolateInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_isolate_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_isolate_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -91,11 +94,11 @@ func resourceTencentCloudMysqlIsolateInstanceRead(d *schema.ResourceData, meta i } func resourceTencentCloudMysqlIsolateInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_isolate_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_isolate_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instanceId := d.Id() @@ -107,10 +110,10 @@ func resourceTencentCloudMysqlIsolateInstanceUpdate(d *schema.ResourceData, meta if operate == "isolate" { request := mysql.NewIsolateDBInstanceRequest() request.InstanceId = helper.String(instanceId) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().IsolateDBInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().IsolateDBInstance(request) if e != nil { - return retryError(e) + 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()) } @@ -121,8 +124,8 @@ func resourceTencentCloudMysqlIsolateInstanceUpdate(d *schema.ResourceData, meta return err } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(7*readRetryTimeout, func() *resource.RetryError { + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(7*tccommon.ReadRetryTimeout, func() *resource.RetryError { mysqlInfo, err := service.DescribeDBInstanceById(ctx, instanceId) if err != nil { @@ -149,11 +152,11 @@ func resourceTencentCloudMysqlIsolateInstanceUpdate(d *schema.ResourceData, meta return err } } else if operate == "recover" { - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if err := service.DeleteMysqlIsolateInstanceById(ctx, instanceId); err != nil { return err } - err := resource.Retry(7*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(7*tccommon.ReadRetryTimeout, func() *resource.RetryError { mysqlInfo, err := service.DescribeDBInstanceById(ctx, instanceId) if err != nil { @@ -185,8 +188,8 @@ func resourceTencentCloudMysqlIsolateInstanceUpdate(d *schema.ResourceData, meta } func resourceTencentCloudMysqlIsolateInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_isolate_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_isolate_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_isolate_instance_test.go b/tencentcloud/services/cdb/resource_tc_mysql_isolate_instance_test.go similarity index 88% rename from tencentcloud/resource_tc_mysql_isolate_instance_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_isolate_instance_test.go index ce13070344..755ffe7d98 100644 --- a/tencentcloud/resource_tc_mysql_isolate_instance_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_isolate_instance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudMysqlIsolateInstanceResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlIsolateInstance, diff --git a/tencentcloud/resource_tc_mysql_local_binlog_config.go b/tencentcloud/services/cdb/resource_tc_mysql_local_binlog_config.go similarity index 73% rename from tencentcloud/resource_tc_mysql_local_binlog_config.go rename to tencentcloud/services/cdb/resource_tc_mysql_local_binlog_config.go index 3eb6f44da1..971900b4fb 100644 --- a/tencentcloud/resource_tc_mysql_local_binlog_config.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_local_binlog_config.go @@ -1,16 +1,19 @@ -package tencentcloud +package cdb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlLocalBinlogConfig() *schema.Resource { +func ResourceTencentCloudMysqlLocalBinlogConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlLocalBinlogConfigCreate, Read: resourceTencentCloudMysqlLocalBinlogConfigRead, @@ -43,8 +46,8 @@ func resourceTencentCloudMysqlLocalBinlogConfig() *schema.Resource { } func resourceTencentCloudMysqlLocalBinlogConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_local_binlog_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_local_binlog_config.create")() + defer tccommon.InconsistentCheck(d, meta)() d.SetId(d.Get("instance_id").(string)) @@ -52,14 +55,14 @@ func resourceTencentCloudMysqlLocalBinlogConfigCreate(d *schema.ResourceData, me } func resourceTencentCloudMysqlLocalBinlogConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_local_binlog_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_local_binlog_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -89,10 +92,10 @@ func resourceTencentCloudMysqlLocalBinlogConfigRead(d *schema.ResourceData, meta } func resourceTencentCloudMysqlLocalBinlogConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_local_binlog_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_local_binlog_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := mysql.NewModifyLocalBinlogConfigRequest() @@ -108,10 +111,10 @@ func resourceTencentCloudMysqlLocalBinlogConfigUpdate(d *schema.ResourceData, me request.MaxUsage = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().ModifyLocalBinlogConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().ModifyLocalBinlogConfig(request) if e != nil { - return retryError(e) + 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()) } @@ -126,8 +129,8 @@ func resourceTencentCloudMysqlLocalBinlogConfigUpdate(d *schema.ResourceData, me } func resourceTencentCloudMysqlLocalBinlogConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_local_binlog_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_local_binlog_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_local_binlog_config_test.go b/tencentcloud/services/cdb/resource_tc_mysql_local_binlog_config_test.go similarity index 82% rename from tencentcloud/resource_tc_mysql_local_binlog_config_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_local_binlog_config_test.go index 9d2b4da46d..c75a7ebfe7 100644 --- a/tencentcloud/resource_tc_mysql_local_binlog_config_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_local_binlog_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudMysqlLocalBinlogConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlLocalBinlogConfig, diff --git a/tencentcloud/resource_tc_mysql_param_template.go b/tencentcloud/services/cdb/resource_tc_mysql_param_template.go similarity index 83% rename from tencentcloud/resource_tc_mysql_param_template.go rename to tencentcloud/services/cdb/resource_tc_mysql_param_template.go index e3a396fe65..2b2fb69c0a 100644 --- a/tencentcloud/resource_tc_mysql_param_template.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_param_template.go @@ -1,17 +1,20 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlParamTemplate() *schema.Resource { +func ResourceTencentCloudMysqlParamTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlParamTemplateCreate, Read: resourceTencentCloudMysqlParamTemplateRead, @@ -85,10 +88,10 @@ func resourceTencentCloudMysqlParamTemplate() *schema.Resource { } func resourceTencentCloudMysqlParamTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_param_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_param_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = mysql.NewCreateParamTemplateRequest() @@ -133,10 +136,10 @@ func resourceTencentCloudMysqlParamTemplateCreate(d *schema.ResourceData, meta i request.EngineType = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().CreateParamTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().CreateParamTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -155,14 +158,14 @@ func resourceTencentCloudMysqlParamTemplateCreate(d *schema.ResourceData, meta i } func resourceTencentCloudMysqlParamTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_param_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_param_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() @@ -257,10 +260,10 @@ func resourceTencentCloudMysqlParamTemplateRead(d *schema.ResourceData, meta int } func resourceTencentCloudMysqlParamTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_param_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_param_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := mysql.NewModifyParamTemplateRequest() @@ -304,10 +307,10 @@ func resourceTencentCloudMysqlParamTemplateUpdate(d *schema.ResourceData, meta i } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().ModifyParamTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().ModifyParamTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -322,13 +325,13 @@ func resourceTencentCloudMysqlParamTemplateUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudMysqlParamTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_param_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_param_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() if err := service.DeleteMysqlParamTemplateById(ctx, templateId); err != nil { diff --git a/tencentcloud/resource_tc_mysql_param_template_test.go b/tencentcloud/services/cdb/resource_tc_mysql_param_template_test.go similarity index 87% rename from tencentcloud/resource_tc_mysql_param_template_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_param_template_test.go index b4cfa975a7..e5f1a60795 100644 --- a/tencentcloud/resource_tc_mysql_param_template_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_param_template_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudMysqlParamTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlParamTemplate, diff --git a/tencentcloud/resource_tc_mysql_password_complexity.go b/tencentcloud/services/cdb/resource_tc_mysql_password_complexity.go similarity index 77% rename from tencentcloud/resource_tc_mysql_password_complexity.go rename to tencentcloud/services/cdb/resource_tc_mysql_password_complexity.go index 86aa728d4b..8c47d693e2 100644 --- a/tencentcloud/resource_tc_mysql_password_complexity.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_password_complexity.go @@ -1,17 +1,20 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlPasswordComplexity() *schema.Resource { +func ResourceTencentCloudMysqlPasswordComplexity() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlPasswordComplexityCreate, Read: resourceTencentCloudMysqlPasswordComplexityRead, @@ -49,8 +52,8 @@ func resourceTencentCloudMysqlPasswordComplexity() *schema.Resource { } func resourceTencentCloudMysqlPasswordComplexityCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_password_complexity.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_password_complexity.create")() + defer tccommon.InconsistentCheck(d, meta)() var instanceId string if v, ok := d.GetOk("instance_id"); ok { @@ -63,13 +66,13 @@ func resourceTencentCloudMysqlPasswordComplexityCreate(d *schema.ResourceData, m } func resourceTencentCloudMysqlPasswordComplexityRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_password_complexity.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_password_complexity.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -90,11 +93,11 @@ func resourceTencentCloudMysqlPasswordComplexityRead(d *schema.ResourceData, met } func resourceTencentCloudMysqlPasswordComplexityUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_password_complexity.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_password_complexity.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := mysql.NewModifyInstancePasswordComplexityRequest() response := mysql.NewModifyInstancePasswordComplexityResponse() @@ -117,10 +120,10 @@ func resourceTencentCloudMysqlPasswordComplexityUpdate(d *schema.ResourceData, m } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().ModifyInstancePasswordComplexity(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().ModifyInstancePasswordComplexity(request) if e != nil { - return retryError(e) + 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()) } @@ -133,8 +136,8 @@ func resourceTencentCloudMysqlPasswordComplexityUpdate(d *schema.ResourceData, m } asyncRequestId := *response.Response.AsyncRequestId - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := service.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -158,8 +161,8 @@ func resourceTencentCloudMysqlPasswordComplexityUpdate(d *schema.ResourceData, m } func resourceTencentCloudMysqlPasswordComplexityDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_password_complexity.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_password_complexity.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_password_complexity_test.go b/tencentcloud/services/cdb/resource_tc_mysql_password_complexity_test.go similarity index 90% rename from tencentcloud/resource_tc_mysql_password_complexity_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_password_complexity_test.go index ce42e65f42..62076ffa5d 100644 --- a/tencentcloud/resource_tc_mysql_password_complexity_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_password_complexity_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudMysqlPasswordComplexityResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlPasswordComplexity, diff --git a/tencentcloud/resource_tc_mysql_privilege.go b/tencentcloud/services/cdb/resource_tc_mysql_privilege.go similarity index 87% rename from tencentcloud/resource_tc_mysql_privilege.go rename to tencentcloud/services/cdb/resource_tc_mysql_privilege.go index 74af2091fd..967870e31b 100644 --- a/tencentcloud/resource_tc_mysql_privilege.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_privilege.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdb import ( "context" @@ -8,15 +8,18 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" sdkError "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -type resourceTencentCloudMysqlPrivilegeId struct { +type ResourceTencentCloudMysqlPrivilegeId struct { MysqlId string AccountName string AccountHost string `json:"AccountHost,omitempty"` @@ -42,7 +45,7 @@ func resourceTencentCloudMysqlPrivilegeHash(v interface{}) int { return helper.HashString(string(b)) } -func resourceTencentCloudMysqlPrivilege() *schema.Resource { +func ResourceTencentCloudMysqlPrivilege() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlPrivilegeCreate, Read: resourceTencentCloudMysqlPrivilegeRead, @@ -178,7 +181,7 @@ func resourceTencentCloudMysqlPrivilege() *schema.Resource { } } -func (me *resourceTencentCloudMysqlPrivilegeId) update(ctx context.Context, d *schema.ResourceData, meta interface{}) error { +func (me *ResourceTencentCloudMysqlPrivilegeId) update(ctx context.Context, d *schema.ResourceData, meta interface{}) error { if me.AccountHost == "" { me.AccountHost = MYSQL_DEFAULT_ACCOUNT_HOST @@ -199,7 +202,7 @@ func (me *resourceTencentCloudMysqlPrivilegeId) update(ctx context.Context, d *s request.GlobalPrivileges = make([]*string, 0, len(sliceInterface)) for _, v := range sliceInterface { ptr := sp(v) - if !IsContains(MYSQL_GlOBAL_PRIVILEGE, *ptr) { + if !tccommon.IsContains(MYSQL_GlOBAL_PRIVILEGE, *ptr) { return errors.New("global privileges not support " + *ptr) } request.GlobalPrivileges = append(request.GlobalPrivileges, ptr) @@ -228,7 +231,7 @@ func (me *resourceTencentCloudMysqlPrivilegeId) update(ctx context.Context, d *s for _, privilege := range vmap["privileges"].(*schema.Set).List() { ptr := sp(privilege) - if !IsContains(MYSQL_DATABASE_PRIVILEGE, *ptr) { + if !tccommon.IsContains(MYSQL_DATABASE_PRIVILEGE, *ptr) { return errors.New("database privileges not support:" + *ptr) } p.Privileges = append(p.Privileges, ptr) @@ -257,7 +260,7 @@ func (me *resourceTencentCloudMysqlPrivilegeId) update(ctx context.Context, d *s } for _, privilege := range vmap["privileges"].(*schema.Set).List() { ptr := sp(privilege) - if !IsContains(MYSQL_TABLE_PRIVILEGE, *ptr) { + if !tccommon.IsContains(MYSQL_TABLE_PRIVILEGE, *ptr) { return errors.New("table privileges not support:" + *ptr) } p.Privileges = append(p.Privileges, ptr) @@ -287,7 +290,7 @@ func (me *resourceTencentCloudMysqlPrivilegeId) update(ctx context.Context, d *s } for _, privilege := range vmap["privileges"].(*schema.Set).List() { ptr := sp(privilege) - if !IsContains(MYSQL_COLUMN_PRIVILEGE, *ptr) { + if !tccommon.IsContains(MYSQL_COLUMN_PRIVILEGE, *ptr) { return errors.New("column privileges not support:" + *ptr) } p.Privileges = append(p.Privileges, ptr) @@ -298,7 +301,7 @@ func (me *resourceTencentCloudMysqlPrivilegeId) update(ctx context.Context, d *s } ratelimit.Check(request.GetAction()) - response, err := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().ModifyAccountPrivileges(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().ModifyAccountPrivileges(request) if err != nil { return err } @@ -306,12 +309,12 @@ func (me *resourceTencentCloudMysqlPrivilegeId) update(ctx context.Context, d *s return errors.New("sdk action ModifyAccountPrivileges return error,miss AsyncRequestId") } asyncRequestId := *response.Response.AsyncRequestId - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if taskStatus == MYSQL_TASK_STATUS_SUCCESS { return nil @@ -331,16 +334,16 @@ func (me *resourceTencentCloudMysqlPrivilegeId) update(ctx context.Context, d *s func resourceTencentCloudMysqlPrivilegeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_privilege.update")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_privilege.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) mysqlId = d.Get("mysql_id").(string) accountName = d.Get("account_name").(string) accountHost = d.Get("account_host").(string) - privilegeId = resourceTencentCloudMysqlPrivilegeId{MysqlId: mysqlId, + privilegeId = ResourceTencentCloudMysqlPrivilegeId{MysqlId: mysqlId, AccountName: accountName, AccountHost: accountHost} ) @@ -357,13 +360,13 @@ func resourceTencentCloudMysqlPrivilegeCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudMysqlPrivilegeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_privilege.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_privilege.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - var privilegeId resourceTencentCloudMysqlPrivilegeId + var privilegeId ResourceTencentCloudMysqlPrivilegeId if err := json.Unmarshal([]byte(d.Id()), &privilegeId); err != nil { err = fmt.Errorf("Local data[terraform.tfstate] corruption,can not got old account privilege id") @@ -375,11 +378,11 @@ func resourceTencentCloudMysqlPrivilegeRead(d *schema.ResourceData, meta interfa privilegeId.AccountHost = MYSQL_DEFAULT_ACCOUNT_HOST } - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var accountInfo *cdb.AccountInfo = nil var onlineHas = true - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { accountInfos, err := mysqlService.DescribeAccounts(ctx, privilegeId.MysqlId) if err != nil { if sdkerr, ok := err.(*sdkError.TencentCloudSDKError); ok && sdkerr.GetCode() == "InvalidParameter" && @@ -388,7 +391,7 @@ func resourceTencentCloudMysqlPrivilegeRead(d *schema.ResourceData, meta interfa onlineHas = false return nil } - return retryError(err) + return tccommon.RetryError(err) } for _, account := range accountInfos { @@ -418,9 +421,9 @@ func resourceTencentCloudMysqlPrivilegeRead(d *schema.ResourceData, meta interfa request.Host = helper.String(privilegeId.AccountHost) var response *cdb.DescribeAccountPrivilegesResponse - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, err = meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().DescribeAccountPrivileges(request) + response, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().DescribeAccountPrivileges(request) if err != nil { if sdkErr, ok := err.(*sdkError.TencentCloudSDKError); ok { if sdkErr.Code == MysqlInstanceIdNotFound { @@ -436,7 +439,7 @@ func resourceTencentCloudMysqlPrivilegeRead(d *schema.ResourceData, meta interfa return nil } } - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -506,12 +509,12 @@ func resourceTencentCloudMysqlPrivilegeRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudMysqlPrivilegeUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_privilege.update")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_privilege.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - privilegeId = resourceTencentCloudMysqlPrivilegeId{} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + privilegeId = ResourceTencentCloudMysqlPrivilegeId{} ) if err := json.Unmarshal([]byte(d.Id()), &privilegeId); err != nil { err = fmt.Errorf("Local data[terraform.tfstate] corruption,can not got old account privilege id") @@ -532,12 +535,12 @@ func resourceTencentCloudMysqlPrivilegeUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudMysqlPrivilegeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_privilege.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_privilege.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - privilegeId = resourceTencentCloudMysqlPrivilegeId{} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + privilegeId = ResourceTencentCloudMysqlPrivilegeId{} ) if err := json.Unmarshal([]byte(d.Id()), &privilegeId); err != nil { err = fmt.Errorf("Local data[terraform.tfstate] corruption,can not got old account privilege id") diff --git a/tencentcloud/resource_tc_mysql_privilege_test.go b/tencentcloud/services/cdb/resource_tc_mysql_privilege_test.go similarity index 82% rename from tencentcloud/resource_tc_mysql_privilege_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_privilege_test.go index 6122a11215..16c03575a8 100644 --- a/tencentcloud/resource_tc_mysql_privilege_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_privilege_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdb_test import ( "encoding/json" @@ -7,6 +7,10 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdb" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" @@ -19,8 +23,8 @@ var testAccTencentCloudMysqlPrivilegeName = testAccTencentCloudMysqlPrivilegeTyp func TestAccTencentCloudMysqlPrivilegeResource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccMysqlPrivilegeDestroy, Steps: []resource.TestStep{ { @@ -61,7 +65,7 @@ func testAccMysqlPrivilegeExists(s *terraform.State) error { return fmt.Errorf("resource %s is not found", testAccTencentCloudMysqlPrivilegeName) } - var privilegeId resourceTencentCloudMysqlPrivilegeId + var privilegeId localcdb.ResourceTencentCloudMysqlPrivilegeId if err := json.Unmarshal([]byte(rs.Primary.ID), &privilegeId); err != nil { return fmt.Errorf("Local data[terraform.tfstate] corruption,can not got old account privilege id") @@ -75,11 +79,11 @@ func testAccMysqlPrivilegeExists(s *terraform.State) error { var response *cdb.DescribeAccountPrivilegesResponse var inErr, outErr error - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - response, inErr = testAccProvider.Meta().(*TencentCloudClient).apiV3Conn.UseMysqlClient().DescribeAccountPrivileges(request) + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + response, inErr = tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().DescribeAccountPrivileges(request) if inErr != nil { if sdkErr, ok := inErr.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == MysqlInstanceIdNotFound { + if sdkErr.Code == localcdb.MysqlInstanceIdNotFound { return resource.NonRetryableError(fmt.Errorf("mysql account not exists in mysql")) } if sdkErr.Code == "InvalidParameter" && strings.Contains(sdkErr.GetMessage(), "instance not found") { @@ -89,7 +93,7 @@ func testAccMysqlPrivilegeExists(s *terraform.State) error { return resource.NonRetryableError(fmt.Errorf("mysql account not exists in mysql")) } } - return retryError(inErr, InternalError) + return tccommon.RetryError(inErr, tccommon.InternalError) } return nil }) @@ -116,14 +120,14 @@ func testAccMysqlPrivilegeDestroy(s *terraform.State) error { return fmt.Errorf("resource %s is not found", testAccTencentCloudMysqlPrivilegeName) } - var privilegeId resourceTencentCloudMysqlPrivilegeId + var privilegeId localcdb.ResourceTencentCloudMysqlPrivilegeId if err := json.Unmarshal([]byte(rs.Primary.ID), &privilegeId); err != nil { return fmt.Errorf("Local data[terraform.tfstate] corruption,can not got old account privilege id") } - mysqlService := MysqlService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - instance, err := mysqlService.DescribeDBInstanceById(contextNil, privilegeId.MysqlId) + mysqlService := localcdb.NewMysqlService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + instance, err := mysqlService.DescribeDBInstanceById(tccommon.ContextNil, privilegeId.MysqlId) if err != nil { return err @@ -141,11 +145,11 @@ func testAccMysqlPrivilegeDestroy(s *terraform.State) error { var response *cdb.DescribeAccountPrivilegesResponse var inErr, outErr error - outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError { - response, inErr = testAccProvider.Meta().(*TencentCloudClient).apiV3Conn.UseMysqlClient().DescribeAccountPrivileges(request) + outErr = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + response, inErr = tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().DescribeAccountPrivileges(request) if inErr != nil { if sdkErr, ok := inErr.(*sdkError.TencentCloudSDKError); ok { - if sdkErr.Code == MysqlInstanceIdNotFound { + if sdkErr.Code == localcdb.MysqlInstanceIdNotFound { return nil } if sdkErr.Code == "InvalidParameter" && strings.Contains(sdkErr.GetMessage(), "instance not found") { @@ -158,7 +162,7 @@ func testAccMysqlPrivilegeDestroy(s *terraform.State) error { return nil } } - return retryError(inErr, InternalError) + return tccommon.RetryError(inErr, tccommon.InternalError) } return nil }) @@ -210,7 +214,7 @@ resource "tencentcloud_mysql_privilege" "privilege" { table_name = "user" column_name = "host" } -}`, CommonPresetMysql) +}`, tcacctest.CommonPresetMysql) } func testAccMysqlPrivilegeUpdate() string { @@ -239,5 +243,5 @@ resource "tencentcloud_mysql_privilege" "privilege" { database_name = "mysql" table_name = "db" } -}`, CommonPresetMysql) +}`, tcacctest.CommonPresetMysql) } diff --git a/tencentcloud/resource_tc_mysql_proxy.go b/tencentcloud/services/cdb/resource_tc_mysql_proxy.go similarity index 85% rename from tencentcloud/resource_tc_mysql_proxy.go rename to tencentcloud/services/cdb/resource_tc_mysql_proxy.go index 873b564cef..f3057f022c 100644 --- a/tencentcloud/resource_tc_mysql_proxy.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_proxy.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdb import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlProxy() *schema.Resource { +func ResourceTencentCloudMysqlProxy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlProxyCreate, Read: resourceTencentCloudMysqlProxyRead, @@ -139,11 +142,11 @@ func resourceTencentCloudMysqlProxy() *schema.Resource { } func resourceTencentCloudMysqlProxyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_proxy.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_proxy.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = mysql.NewCreateCdbProxyRequest() @@ -206,10 +209,10 @@ func resourceTencentCloudMysqlProxyCreate(d *schema.ResourceData, meta interface request.ConnectionPoolLimit = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().CreateCdbProxy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().CreateCdbProxy(request) if e != nil { - return retryError(e) + 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()) } @@ -222,8 +225,8 @@ func resourceTencentCloudMysqlProxyCreate(d *schema.ResourceData, meta interface } asyncRequestId := *response.Response.AsyncRequestId - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := service.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -250,7 +253,7 @@ func resourceTencentCloudMysqlProxyCreate(d *schema.ResourceData, meta interface proxyAddressId := *proxy.ProxyAddress[0].ProxyAddressId proxyGroupId := *proxy.ProxyGroupId - d.SetId(instanceId + FILED_SP + proxyGroupId + FILED_SP + proxyAddressId) + d.SetId(instanceId + tccommon.FILED_SP + proxyGroupId + tccommon.FILED_SP + proxyAddressId) ip := d.Get("vip").(string) port := d.Get("vport").(int) @@ -265,15 +268,15 @@ func resourceTencentCloudMysqlProxyCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudMysqlProxyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_proxy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_proxy.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - items := strings.Split(d.Id(), FILED_SP) + items := strings.Split(d.Id(), tccommon.FILED_SP) if len(items) != 3 { return fmt.Errorf("invalid ID %s", d.Id()) } @@ -370,13 +373,13 @@ func resourceTencentCloudMysqlProxyRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudMysqlProxyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_proxy.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_proxy.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - items := strings.Split(d.Id(), FILED_SP) + items := strings.Split(d.Id(), tccommon.FILED_SP) if len(items) != 3 { return fmt.Errorf("invalid ID %s", d.Id()) } @@ -385,7 +388,7 @@ func resourceTencentCloudMysqlProxyUpdate(d *schema.ResourceData, meta interface proxyGroupId := items[1] proxyAddressId := items[2] - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} proxy, err := service.DescribeMysqlProxyById(ctx, instanceId, proxyGroupId) if err != nil { return err @@ -434,10 +437,10 @@ func resourceTencentCloudMysqlProxyUpdate(d *schema.ResourceData, meta interface request.UpgradeTime = helper.String("nowTime") } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().AdjustCdbProxy(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().AdjustCdbProxy(request) if e != nil { - return retryError(e) + 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()) } @@ -450,7 +453,7 @@ func resourceTencentCloudMysqlProxyUpdate(d *schema.ResourceData, meta interface } asyncRequestId := *response.Response.AsyncRequestId - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := service.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -478,10 +481,10 @@ func resourceTencentCloudMysqlProxyUpdate(d *schema.ResourceData, meta interface request.ProxyGroupId = proxy.ProxyGroupId request.ConnectionPoolLimit = helper.IntUint64(connectionPoolLimit.(int)) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().ModifyCdbProxyParam(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().ModifyCdbProxyParam(request) if e != nil { - return retryError(e) + 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()) } @@ -532,14 +535,14 @@ func resourceTencentCloudMysqlProxyUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudMysqlProxyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_proxy.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_proxy.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - items := strings.Split(d.Id(), FILED_SP) + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + items := strings.Split(d.Id(), tccommon.FILED_SP) if len(items) != 3 { return fmt.Errorf("invalid ID %s", d.Id()) } @@ -552,7 +555,7 @@ func resourceTencentCloudMysqlProxyDelete(d *schema.ResourceData, meta interface return err } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { proxy, err := service.DescribeMysqlProxyById(ctx, instanceId, proxyGroupId) if err != nil { return resource.NonRetryableError(err) diff --git a/tencentcloud/resource_tc_mysql_proxy_test.go b/tencentcloud/services/cdb/resource_tc_mysql_proxy_test.go similarity index 80% rename from tencentcloud/resource_tc_mysql_proxy_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_proxy_test.go index 2823d3a2ba..18691b63ed 100644 --- a/tencentcloud/resource_tc_mysql_proxy_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_proxy_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cdb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdb" + "context" "fmt" "strings" @@ -15,8 +19,8 @@ import ( func TestAccTencentCloudMysqlProxyResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckMysqlProxyDestroy, Steps: []resource.TestStep{ { @@ -24,9 +28,9 @@ func TestAccTencentCloudMysqlProxyResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckMysqlProxyExists("tencentcloud_mysql_proxy.proxy"), resource.TestCheckResourceAttrSet("tencentcloud_mysql_proxy.proxy", "id"), - resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "instance_id", defaultDbBrainInstanceId), - resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "uniq_vpc_id", defaultDcdbInsVpcId), - resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "uniq_subnet_id", defaultDcdbInsIdSubnetId), + resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "instance_id", tcacctest.DefaultDbBrainInstanceId), + resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "uniq_vpc_id", tcacctest.DefaultDcdbInsVpcId), + resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "uniq_subnet_id", tcacctest.DefaultDcdbInsIdSubnetId), resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "proxy_node_custom.#", "1"), resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "proxy_node_custom.0.node_count", "1"), resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "proxy_node_custom.0.cpu", "2"), @@ -51,9 +55,9 @@ func TestAccTencentCloudMysqlProxyResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckMysqlProxyExists("tencentcloud_mysql_proxy.proxy"), resource.TestCheckResourceAttrSet("tencentcloud_mysql_proxy.proxy", "id"), - resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "instance_id", defaultDbBrainInstanceId), - resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "uniq_vpc_id", defaultDcdbInsVpcId), - resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "uniq_subnet_id", defaultDcdbInsIdSubnetId), + resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "instance_id", tcacctest.DefaultDbBrainInstanceId), + resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "uniq_vpc_id", tcacctest.DefaultDcdbInsVpcId), + resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "uniq_subnet_id", tcacctest.DefaultDcdbInsIdSubnetId), resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "proxy_node_custom.#", "1"), resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "proxy_node_custom.0.node_count", "1"), resource.TestCheckResourceAttr("tencentcloud_mysql_proxy.proxy", "proxy_node_custom.0.cpu", "2"), @@ -72,15 +76,15 @@ func TestAccTencentCloudMysqlProxyResource_basic(t *testing.T) { } func testAccCheckMysqlProxyDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - mysqlService := MysqlService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + mysqlService := localcdb.NewMysqlService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_mysql_proxy" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -94,7 +98,7 @@ func testAccCheckMysqlProxyDestroy(s *terraform.State) error { } if err != nil { sdkErr, ok := err.(*errors.TencentCloudSDKError) - if ok && sdkErr.Code == MysqlInstanceIdNotFound { + if ok && sdkErr.Code == localcdb.MysqlInstanceIdNotFound { continue } return err @@ -105,8 +109,8 @@ func testAccCheckMysqlProxyDestroy(s *terraform.State) error { func testAccCheckMysqlProxyExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -116,7 +120,7 @@ func testAccCheckMysqlProxyExists(n string) resource.TestCheckFunc { return fmt.Errorf("mysql proxy id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -124,7 +128,7 @@ func testAccCheckMysqlProxyExists(n string) resource.TestCheckFunc { proxyGroupId := idSplit[1] // proxyAddressId := idSplit[2] - mysqlService := MysqlService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + mysqlService := localcdb.NewMysqlService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := mysqlService.DescribeMysqlProxyById(ctx, instanceId, proxyGroupId) if instance == nil { return fmt.Errorf("mysql proxy %s is not found", rs.Primary.ID) @@ -138,15 +142,15 @@ func testAccCheckMysqlProxyExists(n string) resource.TestCheckFunc { const testAccMysqlProxyVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } variable "vpc_id" { - default = "` + defaultDcdbInsVpcId + `" + default = "` + tcacctest.DefaultDcdbInsVpcId + `" } variable "subnet_id" { - default = "` + defaultDcdbInsIdSubnetId + `" + default = "` + tcacctest.DefaultDcdbInsIdSubnetId + `" } ` diff --git a/tencentcloud/resource_tc_mysql_readonly_instance.go b/tencentcloud/services/cdb/resource_tc_mysql_readonly_instance.go similarity index 83% rename from tencentcloud/resource_tc_mysql_readonly_instance.go rename to tencentcloud/services/cdb/resource_tc_mysql_readonly_instance.go index 02d50791bd..8f82dc44a7 100644 --- a/tencentcloud/resource_tc_mysql_readonly_instance.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_readonly_instance.go @@ -1,18 +1,21 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" sdkError "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlReadonlyInstance() *schema.Resource { +func ResourceTencentCloudMysqlReadonlyInstance() *schema.Resource { readonlyInstanceInfo := map[string]*schema.Schema{ "master_instance_id": { Type: schema.TypeString, @@ -56,7 +59,7 @@ func resourceTencentCloudMysqlReadonlyInstance() *schema.Resource { } func mysqlCreateReadonlyInstancePayByMonth(ctx context.Context, d *schema.ResourceData, meta interface{}) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cdb.NewCreateDBInstanceRequest() instanceRole := "ro" @@ -110,7 +113,7 @@ func mysqlCreateReadonlyInstancePayByMonth(ctx context.Context, d *schema.Resour return err } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().CreateDBInstance(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().CreateDBInstance(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) @@ -127,7 +130,7 @@ func mysqlCreateReadonlyInstancePayByMonth(ctx context.Context, d *schema.Resour } func mysqlCreateReadonlyInstancePayByUse(ctx context.Context, d *schema.ResourceData, meta interface{}) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cdb.NewCreateDBInstanceHourRequest() instanceRole := "ro" @@ -165,7 +168,7 @@ func mysqlCreateReadonlyInstancePayByUse(ctx context.Context, d *schema.Resource request.MasterRegion = &masterRegion } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().CreateDBInstanceHour(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().CreateDBInstanceHour(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) @@ -182,17 +185,17 @@ func mysqlCreateReadonlyInstancePayByUse(ctx context.Context, d *schema.Resource } func resourceTencentCloudMysqlReadonlyInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_readonly_instance.create")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_readonly_instance.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} // the mysql master instance must have a backup before creating a read-only instance masterInstanceId := d.Get("master_instance_id").(string) - err := resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { backups, err := mysqlService.DescribeBackupsByMysqlId(ctx, masterInstanceId, 10) if err != nil { return resource.NonRetryableError(err) @@ -224,7 +227,7 @@ func resourceTencentCloudMysqlReadonlyInstanceCreate(d *schema.ResourceData, met mysqlID := d.Id() - err = resource.Retry(4*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(4*tccommon.ReadRetryTimeout, func() *resource.RetryError { mysqlInfo, err := mysqlService.DescribeDBInstanceById(ctx, mysqlID) if err != nil { return resource.NonRetryableError(err) @@ -249,9 +252,9 @@ func resourceTencentCloudMysqlReadonlyInstanceCreate(d *schema.ResourceData, met } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("cdb", "instanceId", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("cdb", "instanceId", tcClient.Region, d.Id()) log.Printf("[DEBUG]Mysql instance create, resourceName:%s\n", resourceName) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -262,20 +265,20 @@ func resourceTencentCloudMysqlReadonlyInstanceCreate(d *schema.ResourceData, met } func resourceTencentCloudMysqlReadonlyInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_readonly_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_readonly_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { mysqlInfo, e := tencentMsyqlBasicInfoRead(ctx, d, meta, false) if e != nil { if mysqlService.NotFoundMysqlInstance(e) { d.SetId("") return nil } - return retryError(e) + return tccommon.RetryError(e) } if mysqlInfo == nil { d.SetId("") @@ -342,7 +345,7 @@ func resourceTencentCloudMysqlReadonlyInstanceRead(d *schema.ResourceData, meta } _ = d.Set("security_groups", securityGroups) - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "cdb", "instanceId", tcClient.Region, d.Id()) if err != nil { @@ -369,10 +372,10 @@ func resourceTencentCloudMysqlReadonlyInstanceRead(d *schema.ResourceData, meta } func resourceTencentCloudMysqlReadonlyInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_readonly_instance.update")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_readonly_instance.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) payType := getPayType(d).(int) @@ -381,7 +384,7 @@ func resourceTencentCloudMysqlReadonlyInstanceUpdate(d *schema.ResourceData, met if payType == MysqlPayByMonth { if d.HasChange("auto_renew_flag") { renewFlag := int64(d.Get("auto_renew_flag").(int)) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if err := mysqlService.ModifyAutoRenewFlag(ctx, d.Id(), renewFlag); err != nil { return err } @@ -411,17 +414,17 @@ func resourceTencentCloudMysqlReadonlyInstanceUpdate(d *schema.ResourceData, met } func resourceTencentCloudMysqlReadonlyInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_readonly_instance.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_readonly_instance.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + mysqlService := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { _, err := mysqlService.IsolateDBInstance(ctx, d.Id()) if err != nil { //for the pay order wait - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -434,7 +437,7 @@ func resourceTencentCloudMysqlReadonlyInstanceDelete(d *schema.ResourceData, met payType := getPayType(d).(int) forceDelete := d.Get("force_delete").(bool) - err = resource.Retry(7*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(7*tccommon.ReadRetryTimeout, func() *resource.RetryError { mysqlInfo, err := mysqlService.DescribeDBInstanceById(ctx, d.Id()) if err != nil { diff --git a/tencentcloud/resource_tc_mysql_readonly_instance_test.go b/tencentcloud/services/cdb/resource_tc_mysql_readonly_instance_test.go similarity index 82% rename from tencentcloud/resource_tc_mysql_readonly_instance_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_readonly_instance_test.go index f1a1c668ea..d420d0b34c 100644 --- a/tencentcloud/resource_tc_mysql_readonly_instance_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_readonly_instance_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cdb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdb" + "context" "fmt" "testing" @@ -14,12 +18,12 @@ import ( func TestAccTencentCloudMysqlReadonlyInstanceResource_basic(t *testing.T) { // t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckMysqlReadonlyInstanceDestroy, Steps: []resource.TestStep{ { - Config: testAccMysqlReadonlyInstance(CommonPresetMysql), + Config: testAccMysqlReadonlyInstance(tcacctest.CommonPresetMysql), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckMysqlInstanceExists("tencentcloud_mysql_readonly_instance.mysql_readonly"), resource.TestCheckResourceAttr("tencentcloud_mysql_readonly_instance.mysql_readonly", "instance_name", "mysql-readonly-test"), @@ -39,7 +43,7 @@ func TestAccTencentCloudMysqlReadonlyInstanceResource_basic(t *testing.T) { }, // add tag { - Config: testAccMysqlReadonlyInstance_multiTags(CommonPresetMysql, "read"), + Config: testAccMysqlReadonlyInstance_multiTags(tcacctest.CommonPresetMysql, "read"), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckMysqlInstanceExists("tencentcloud_mysql_readonly_instance.mysql_readonly"), resource.TestCheckResourceAttr("tencentcloud_mysql_readonly_instance.mysql_readonly", "tags.role", "read"), @@ -47,7 +51,7 @@ func TestAccTencentCloudMysqlReadonlyInstanceResource_basic(t *testing.T) { }, // update tag { - Config: testAccMysqlReadonlyInstance_multiTags(CommonPresetMysql, "readonly"), + Config: testAccMysqlReadonlyInstance_multiTags(tcacctest.CommonPresetMysql, "readonly"), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckMysqlInstanceExists("tencentcloud_mysql_readonly_instance.mysql_readonly"), resource.TestCheckResourceAttr("tencentcloud_mysql_readonly_instance.mysql_readonly", "tags.role", "readonly"), @@ -55,7 +59,7 @@ func TestAccTencentCloudMysqlReadonlyInstanceResource_basic(t *testing.T) { }, // remove tag { - Config: testAccMysqlReadonlyInstance(CommonPresetMysql), + Config: testAccMysqlReadonlyInstance(tcacctest.CommonPresetMysql), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckMysqlInstanceExists("tencentcloud_mysql_readonly_instance.mysql_readonly"), resource.TestCheckNoResourceAttr("tencentcloud_mysql_readonly_instance.mysql_readonly", "tags.role"), @@ -63,7 +67,7 @@ func TestAccTencentCloudMysqlReadonlyInstanceResource_basic(t *testing.T) { }, // update instance_name { - Config: testAccMysqlReadonlyInstance_update(CommonPresetMysql, "mysql-readonly-update", "3360"), + Config: testAccMysqlReadonlyInstance_update(tcacctest.CommonPresetMysql, "mysql-readonly-update", "3360"), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckMysqlInstanceExists("tencentcloud_mysql_readonly_instance.mysql_readonly"), resource.TestCheckResourceAttr("tencentcloud_mysql_readonly_instance.mysql_readonly", "instance_name", "mysql-readonly-update"), @@ -71,7 +75,7 @@ func TestAccTencentCloudMysqlReadonlyInstanceResource_basic(t *testing.T) { }, // update mem_size { - Config: testAccMysqlReadonlyInstance_memSize(CommonPresetMysql), + Config: testAccMysqlReadonlyInstance_memSize(tcacctest.CommonPresetMysql), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckMysqlInstanceExists("tencentcloud_mysql_readonly_instance.mysql_readonly"), resource.TestCheckResourceAttr("tencentcloud_mysql_readonly_instance.mysql_readonly", "mem_size", "1000"), @@ -90,10 +94,10 @@ func TestAccTencentCloudMysqlReadonlyInstanceResource_basic(t *testing.T) { } func testAccCheckMysqlReadonlyInstanceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - mysqlService := MysqlService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + mysqlService := localcdb.NewMysqlService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_mysql_readonly_instance" { continue @@ -104,7 +108,7 @@ func testAccCheckMysqlReadonlyInstanceDestroy(s *terraform.State) error { } if err != nil { sdkErr, ok := err.(*errors.TencentCloudSDKError) - if ok && sdkErr.Code == MysqlInstanceIdNotFound { + if ok && sdkErr.Code == localcdb.MysqlInstanceIdNotFound { continue } return err @@ -115,8 +119,8 @@ func testAccCheckMysqlReadonlyInstanceDestroy(s *terraform.State) error { func testAccCheckMysqlInstanceExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -126,7 +130,7 @@ func testAccCheckMysqlInstanceExists(n string) resource.TestCheckFunc { return fmt.Errorf("mysql instance id is not set") } - mysqlService := MysqlService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + mysqlService := localcdb.NewMysqlService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := mysqlService.DescribeDBInstanceById(ctx, rs.Primary.ID) if instance == nil { return fmt.Errorf("mysql instance %s is not found", rs.Primary.ID) diff --git a/tencentcloud/resource_tc_mysql_reload_balance_proxy_node.go b/tencentcloud/services/cdb/resource_tc_mysql_reload_balance_proxy_node.go similarity index 70% rename from tencentcloud/resource_tc_mysql_reload_balance_proxy_node.go rename to tencentcloud/services/cdb/resource_tc_mysql_reload_balance_proxy_node.go index 3e5b5d7ba7..7234231508 100644 --- a/tencentcloud/resource_tc_mysql_reload_balance_proxy_node.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_reload_balance_proxy_node.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlReloadBalanceProxyNode() *schema.Resource { +func ResourceTencentCloudMysqlReloadBalanceProxyNode() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlReloadBalanceProxyNodeCreate, Read: resourceTencentCloudMysqlReloadBalanceProxyNodeRead, @@ -34,10 +37,10 @@ func resourceTencentCloudMysqlReloadBalanceProxyNode() *schema.Resource { } func resourceTencentCloudMysqlReloadBalanceProxyNodeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_reload_balance_proxy_node.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_reload_balance_proxy_node.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = mysql.NewReloadBalanceProxyNodeRequest() @@ -52,10 +55,10 @@ func resourceTencentCloudMysqlReloadBalanceProxyNodeCreate(d *schema.ResourceDat request.ProxyAddressId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().ReloadBalanceProxyNode(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().ReloadBalanceProxyNode(request) if e != nil { - return retryError(e) + 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()) } @@ -72,15 +75,15 @@ func resourceTencentCloudMysqlReloadBalanceProxyNodeCreate(d *schema.ResourceDat } func resourceTencentCloudMysqlReloadBalanceProxyNodeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_reload_balance_proxy_node.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_reload_balance_proxy_node.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudMysqlReloadBalanceProxyNodeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_reload_balance_proxy_node.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_reload_balance_proxy_node.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_reload_balance_proxy_node_test.go b/tencentcloud/services/cdb/resource_tc_mysql_reload_balance_proxy_node_test.go similarity index 88% rename from tencentcloud/resource_tc_mysql_reload_balance_proxy_node_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_reload_balance_proxy_node_test.go index 21ae87c869..dba13c31ae 100644 --- a/tencentcloud/resource_tc_mysql_reload_balance_proxy_node_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_reload_balance_proxy_node_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ import ( func TestAccTencentCloudMysqlReloadBalanceProxyNodeResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlReloadBalanceProxyNode, diff --git a/tencentcloud/resource_tc_mysql_remote_backup_config.go b/tencentcloud/services/cdb/resource_tc_mysql_remote_backup_config.go similarity index 78% rename from tencentcloud/resource_tc_mysql_remote_backup_config.go rename to tencentcloud/services/cdb/resource_tc_mysql_remote_backup_config.go index 62ca510608..bdbd3fce7b 100644 --- a/tencentcloud/resource_tc_mysql_remote_backup_config.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_remote_backup_config.go @@ -1,16 +1,19 @@ -package tencentcloud +package cdb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlRemoteBackupConfig() *schema.Resource { +func ResourceTencentCloudMysqlRemoteBackupConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlRemoteBackupConfigCreate, Read: resourceTencentCloudMysqlRemoteBackupConfigRead, @@ -57,8 +60,8 @@ func resourceTencentCloudMysqlRemoteBackupConfig() *schema.Resource { } func resourceTencentCloudMysqlRemoteBackupConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_remote_backup_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_remote_backup_config.create")() + defer tccommon.InconsistentCheck(d, meta)() var instanceId string if v, ok := d.GetOk("instance_id"); ok { @@ -71,14 +74,14 @@ func resourceTencentCloudMysqlRemoteBackupConfigCreate(d *schema.ResourceData, m } func resourceTencentCloudMysqlRemoteBackupConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_remote_backup_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_remote_backup_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -115,10 +118,10 @@ func resourceTencentCloudMysqlRemoteBackupConfigRead(d *schema.ResourceData, met } func resourceTencentCloudMysqlRemoteBackupConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_remote_backup_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_remote_backup_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := mysql.NewModifyRemoteBackupConfigRequest() @@ -146,10 +149,10 @@ func resourceTencentCloudMysqlRemoteBackupConfigUpdate(d *schema.ResourceData, m request.ExpireDays = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().ModifyRemoteBackupConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().ModifyRemoteBackupConfig(request) if e != nil { - return retryError(e) + 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()) } @@ -164,8 +167,8 @@ func resourceTencentCloudMysqlRemoteBackupConfigUpdate(d *schema.ResourceData, m } func resourceTencentCloudMysqlRemoteBackupConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_remote_backup_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_remote_backup_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_remote_backup_config_test.go b/tencentcloud/services/cdb/resource_tc_mysql_remote_backup_config_test.go similarity index 88% rename from tencentcloud/resource_tc_mysql_remote_backup_config_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_remote_backup_config_test.go index 5a9f3f0026..212b71cc5d 100644 --- a/tencentcloud/resource_tc_mysql_remote_backup_config_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_remote_backup_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudMysqlRemoteBackupConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlRemoteBackupConfig, @@ -37,7 +39,7 @@ func TestAccTencentCloudMysqlRemoteBackupConfigResource_basic(t *testing.T) { const testAccMysqlRemoteBackupConfigVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/resource_tc_mysql_renew_db_instance_operation.go b/tencentcloud/services/cdb/resource_tc_mysql_renew_db_instance_operation.go similarity index 76% rename from tencentcloud/resource_tc_mysql_renew_db_instance_operation.go rename to tencentcloud/services/cdb/resource_tc_mysql_renew_db_instance_operation.go index fffa63fd34..023ba36f5a 100644 --- a/tencentcloud/resource_tc_mysql_renew_db_instance_operation.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_renew_db_instance_operation.go @@ -1,17 +1,20 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlRenewDbInstanceOperation() *schema.Resource { +func ResourceTencentCloudMysqlRenewDbInstanceOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlRenewDbInstanceOperationCreate, Read: resourceTencentCloudMysqlRenewDbInstanceOperationRead, @@ -55,10 +58,10 @@ func resourceTencentCloudMysqlRenewDbInstanceOperation() *schema.Resource { } func resourceTencentCloudMysqlRenewDbInstanceOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_renew_db_instance_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_renew_db_instance_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = mysql.NewRenewDBInstanceRequest() @@ -78,10 +81,10 @@ func resourceTencentCloudMysqlRenewDbInstanceOperationCreate(d *schema.ResourceD request.ModifyPayType = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().RenewDBInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().RenewDBInstance(request) if e != nil { - return retryError(e) + 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()) } @@ -101,13 +104,13 @@ func resourceTencentCloudMysqlRenewDbInstanceOperationCreate(d *schema.ResourceD } func resourceTencentCloudMysqlRenewDbInstanceOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_renew_db_instance_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_renew_db_instance_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} mysqlInfo, errRet := service.DescribeDBInstanceById(ctx, d.Id()) if errRet != nil { return fmt.Errorf("Describe mysql instance fails, reaseon %s", errRet.Error()) @@ -126,8 +129,8 @@ func resourceTencentCloudMysqlRenewDbInstanceOperationRead(d *schema.ResourceDat } func resourceTencentCloudMysqlRenewDbInstanceOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_renew_db_instance_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_renew_db_instance_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_renew_db_instance_operation_test.go b/tencentcloud/services/cdb/resource_tc_mysql_renew_db_instance_operation_test.go similarity index 84% rename from tencentcloud/resource_tc_mysql_renew_db_instance_operation_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_renew_db_instance_operation_test.go index 9d62042646..c8d9508e8d 100644 --- a/tencentcloud/resource_tc_mysql_renew_db_instance_operation_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_renew_db_instance_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ import ( func TestAccTencentCloudMysqlRenewDbInstanceOperationResource_basic(t *testing.T) { // t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckMysqlMasterInstanceDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/resource_tc_mysql_reset_root_account.go b/tencentcloud/services/cdb/resource_tc_mysql_reset_root_account.go similarity index 68% rename from tencentcloud/resource_tc_mysql_reset_root_account.go rename to tencentcloud/services/cdb/resource_tc_mysql_reset_root_account.go index 5def4deb30..f27fdce355 100644 --- a/tencentcloud/resource_tc_mysql_reset_root_account.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_reset_root_account.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlResetRootAccount() *schema.Resource { +func ResourceTencentCloudMysqlResetRootAccount() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlResetRootAccountCreate, Read: resourceTencentCloudMysqlResetRootAccountRead, @@ -27,10 +30,10 @@ func resourceTencentCloudMysqlResetRootAccount() *schema.Resource { } func resourceTencentCloudMysqlResetRootAccountCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_reset_root_account.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_reset_root_account.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = mysql.NewResetRootAccountRequest() @@ -42,10 +45,10 @@ func resourceTencentCloudMysqlResetRootAccountCreate(d *schema.ResourceData, met request.InstanceId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().ResetRootAccount(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().ResetRootAccount(request) if e != nil { - return retryError(e) + 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()) } @@ -62,15 +65,15 @@ func resourceTencentCloudMysqlResetRootAccountCreate(d *schema.ResourceData, met } func resourceTencentCloudMysqlResetRootAccountRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_reset_root_account.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_reset_root_account.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudMysqlResetRootAccountDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_reset_root_account.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_reset_root_account.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_reset_root_account_test.go b/tencentcloud/services/cdb/resource_tc_mysql_reset_root_account_test.go similarity index 80% rename from tencentcloud/resource_tc_mysql_reset_root_account_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_reset_root_account_test.go index 0bcdd43fa6..046cc59ca9 100644 --- a/tencentcloud/resource_tc_mysql_reset_root_account_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_reset_root_account_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudMysqlResetRootAccountResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlResetRootAccount, diff --git a/tencentcloud/resource_tc_mysql_restart_db_instances_operation.go b/tencentcloud/services/cdb/resource_tc_mysql_restart_db_instances_operation.go similarity index 72% rename from tencentcloud/resource_tc_mysql_restart_db_instances_operation.go rename to tencentcloud/services/cdb/resource_tc_mysql_restart_db_instances_operation.go index a79caf34af..4099cf5fcd 100644 --- a/tencentcloud/resource_tc_mysql_restart_db_instances_operation.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_restart_db_instances_operation.go @@ -1,16 +1,18 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" ) -func resourceTencentCloudMysqlRestartDbInstancesOperation() *schema.Resource { +func ResourceTencentCloudMysqlRestartDbInstancesOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlRestartDbInstancesOperationCreate, Read: resourceTencentCloudMysqlRestartDbInstancesOperationRead, @@ -34,11 +36,11 @@ func resourceTencentCloudMysqlRestartDbInstancesOperation() *schema.Resource { } func resourceTencentCloudMysqlRestartDbInstancesOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_restart_db_instances_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_restart_db_instances_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = mysql.NewRestartDBInstancesRequest() @@ -50,10 +52,10 @@ func resourceTencentCloudMysqlRestartDbInstancesOperationCreate(d *schema.Resour request.InstanceIds = []*string{&instanceId} } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().RestartDBInstances(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().RestartDBInstances(request) if e != nil { - return retryError(e) + 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()) } @@ -68,8 +70,8 @@ func resourceTencentCloudMysqlRestartDbInstancesOperationCreate(d *schema.Resour d.SetId(instanceId) asyncRequestId := *response.Response.AsyncRequestId - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := service.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -93,14 +95,14 @@ func resourceTencentCloudMysqlRestartDbInstancesOperationCreate(d *schema.Resour } func resourceTencentCloudMysqlRestartDbInstancesOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_restart_db_instances_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_restart_db_instances_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -127,8 +129,8 @@ func resourceTencentCloudMysqlRestartDbInstancesOperationRead(d *schema.Resource } func resourceTencentCloudMysqlRestartDbInstancesOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_restart_db_instances_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_restart_db_instances_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_restart_db_instances_operation_test.go b/tencentcloud/services/cdb/resource_tc_mysql_restart_db_instances_operation_test.go similarity index 85% rename from tencentcloud/resource_tc_mysql_restart_db_instances_operation_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_restart_db_instances_operation_test.go index 52dffff36e..af5059cc7f 100644 --- a/tencentcloud/resource_tc_mysql_restart_db_instances_operation_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_restart_db_instances_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudMysqlRestartDbInstancesOperationResource_basic(t *testin // t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlRestartDbInstancesOperation, diff --git a/tencentcloud/resource_tc_mysql_ro_group.go b/tencentcloud/services/cdb/resource_tc_mysql_ro_group.go similarity index 86% rename from tencentcloud/resource_tc_mysql_ro_group.go rename to tencentcloud/services/cdb/resource_tc_mysql_ro_group.go index c1c45669ba..eb7c0d6d61 100644 --- a/tencentcloud/resource_tc_mysql_ro_group.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_ro_group.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdb import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlRoGroup() *schema.Resource { +func ResourceTencentCloudMysqlRoGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlRoGroupCreate, Read: resourceTencentCloudMysqlRoGroupRead, @@ -103,8 +106,8 @@ func resourceTencentCloudMysqlRoGroup() *schema.Resource { } func resourceTencentCloudMysqlRoGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_group.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_group.create")() + defer tccommon.InconsistentCheck(d, meta)() var instanceId string if v, ok := d.GetOk("instance_id"); ok { @@ -116,21 +119,21 @@ func resourceTencentCloudMysqlRoGroupCreate(d *schema.ResourceData, meta interfa roGroupId = v.(string) } - d.SetId(instanceId + FILED_SP + roGroupId) + d.SetId(instanceId + tccommon.FILED_SP + roGroupId) return resourceTencentCloudMysqlRoGroupUpdate(d, meta) } func resourceTencentCloudMysqlRoGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_group.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -204,16 +207,16 @@ func resourceTencentCloudMysqlRoGroupRead(d *schema.ResourceData, meta interface } func resourceTencentCloudMysqlRoGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_group.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_group.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := mysql.NewModifyRoGroupInfoRequest() response := mysql.NewModifyRoGroupInfoResponse() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -269,10 +272,10 @@ func resourceTencentCloudMysqlRoGroupUpdate(d *schema.ResourceData, meta interfa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().ModifyRoGroupInfo(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().ModifyRoGroupInfo(request) if e != nil { - return retryError(e) + 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()) } @@ -285,8 +288,8 @@ func resourceTencentCloudMysqlRoGroupUpdate(d *schema.ResourceData, meta interfa } asyncRequestId := *response.Response.AsyncRequestId - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := service.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -310,8 +313,8 @@ func resourceTencentCloudMysqlRoGroupUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudMysqlRoGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_group.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_group.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_ro_group_load_operation.go b/tencentcloud/services/cdb/resource_tc_mysql_ro_group_load_operation.go similarity index 67% rename from tencentcloud/resource_tc_mysql_ro_group_load_operation.go rename to tencentcloud/services/cdb/resource_tc_mysql_ro_group_load_operation.go index 440150d005..2471521215 100644 --- a/tencentcloud/resource_tc_mysql_ro_group_load_operation.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_ro_group_load_operation.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdb import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlRoGroupLoadOperation() *schema.Resource { +func ResourceTencentCloudMysqlRoGroupLoadOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlRoGroupLoadOperationCreate, Read: resourceTencentCloudMysqlRoGroupLoadOperationRead, @@ -27,10 +30,10 @@ func resourceTencentCloudMysqlRoGroupLoadOperation() *schema.Resource { } func resourceTencentCloudMysqlRoGroupLoadOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_group_load_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_group_load_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = mysql.NewBalanceRoGroupLoadRequest() @@ -41,10 +44,10 @@ func resourceTencentCloudMysqlRoGroupLoadOperationCreate(d *schema.ResourceData, request.RoGroupId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().BalanceRoGroupLoad(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().BalanceRoGroupLoad(request) if e != nil { - return retryError(e) + 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()) } @@ -61,15 +64,15 @@ func resourceTencentCloudMysqlRoGroupLoadOperationCreate(d *schema.ResourceData, } func resourceTencentCloudMysqlRoGroupLoadOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_group_load_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_group_load_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudMysqlRoGroupLoadOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_group_load_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_group_load_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_ro_group_load_operation_test.go b/tencentcloud/services/cdb/resource_tc_mysql_ro_group_load_operation_test.go similarity index 91% rename from tencentcloud/resource_tc_mysql_ro_group_load_operation_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_ro_group_load_operation_test.go index 150d96f2c2..c3abc09ecc 100644 --- a/tencentcloud/resource_tc_mysql_ro_group_load_operation_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_ro_group_load_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudMysqlRoGroupLoadOperationResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlRoGroupLoadOperation, @@ -25,7 +27,7 @@ func TestAccTencentCloudMysqlRoGroupLoadOperationResource_basic(t *testing.T) { const testAccMysqlRoGroupLoadOperation = ` variable "security_groups" { - default = "` + defaultCrsSecurityGroups + `" + default = "` + tcacctest.DefaultCrsSecurityGroups + `" } variable "availability_zone" { diff --git a/tencentcloud/resource_tc_mysql_ro_group_test.go b/tencentcloud/services/cdb/resource_tc_mysql_ro_group_test.go similarity index 94% rename from tencentcloud/resource_tc_mysql_ro_group_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_ro_group_test.go index d91134ffbb..a02454523b 100644 --- a/tencentcloud/resource_tc_mysql_ro_group_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_ro_group_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudMysqlRoGroupResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlRoGroup, @@ -38,7 +40,7 @@ func TestAccTencentCloudMysqlRoGroupResource_basic(t *testing.T) { const testAccMysqlRoGroup = ` variable "security_groups" { - default = "` + defaultCrsSecurityGroups + `" + default = "` + tcacctest.DefaultCrsSecurityGroups + `" } variable "availability_zone" { diff --git a/tencentcloud/resource_tc_mysql_ro_instance_ip.go b/tencentcloud/services/cdb/resource_tc_mysql_ro_instance_ip.go similarity index 77% rename from tencentcloud/resource_tc_mysql_ro_instance_ip.go rename to tencentcloud/services/cdb/resource_tc_mysql_ro_instance_ip.go index 88ead3b298..c37513586e 100644 --- a/tencentcloud/resource_tc_mysql_ro_instance_ip.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_ro_instance_ip.go @@ -1,16 +1,19 @@ -package tencentcloud +package cdb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlRoInstanceIp() *schema.Resource { +func ResourceTencentCloudMysqlRoInstanceIp() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlRoInstanceIpCreate, Read: resourceTencentCloudMysqlRoInstanceIpRead, @@ -54,10 +57,10 @@ func resourceTencentCloudMysqlRoInstanceIp() *schema.Resource { } func resourceTencentCloudMysqlRoInstanceIpCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_instance_ip.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_instance_ip.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = mysql.NewCreateRoInstanceIpRequest() @@ -76,10 +79,10 @@ func resourceTencentCloudMysqlRoInstanceIpCreate(d *schema.ResourceData, meta in request.UniqVpcId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().CreateRoInstanceIp(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().CreateRoInstanceIp(request) if e != nil { - return retryError(e) + 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()) } @@ -96,13 +99,13 @@ func resourceTencentCloudMysqlRoInstanceIpCreate(d *schema.ResourceData, meta in } func resourceTencentCloudMysqlRoInstanceIpRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_instance_ip.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_instance_ip.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -143,8 +146,8 @@ func resourceTencentCloudMysqlRoInstanceIpRead(d *schema.ResourceData, meta inte } func resourceTencentCloudMysqlRoInstanceIpDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_instance_ip.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_instance_ip.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_ro_instance_ip_test.go b/tencentcloud/services/cdb/resource_tc_mysql_ro_instance_ip_test.go similarity index 92% rename from tencentcloud/resource_tc_mysql_ro_instance_ip_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_ro_instance_ip_test.go index d1fcac9100..50edca28ba 100644 --- a/tencentcloud/resource_tc_mysql_ro_instance_ip_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_ro_instance_ip_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudMysqlRoInstanceIpResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlRoInstanceIp, @@ -31,7 +33,7 @@ func TestAccTencentCloudMysqlRoInstanceIpResource_basic(t *testing.T) { const testAccMysqlRoInstanceIp = ` variable "security_groups" { - default = "` + defaultCrsSecurityGroups + `" + default = "` + tcacctest.DefaultCrsSecurityGroups + `" } variable "availability_zone" { diff --git a/tencentcloud/resource_tc_mysql_ro_start_replication.go b/tencentcloud/services/cdb/resource_tc_mysql_ro_start_replication.go similarity index 71% rename from tencentcloud/resource_tc_mysql_ro_start_replication.go rename to tencentcloud/services/cdb/resource_tc_mysql_ro_start_replication.go index 40c5e937da..3baf692743 100644 --- a/tencentcloud/resource_tc_mysql_ro_start_replication.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_ro_start_replication.go @@ -1,17 +1,20 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlRoStartReplication() *schema.Resource { +func ResourceTencentCloudMysqlRoStartReplication() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlRoStartReplicationCreate, Read: resourceTencentCloudMysqlRoStartReplicationRead, @@ -29,11 +32,11 @@ func resourceTencentCloudMysqlRoStartReplication() *schema.Resource { } func resourceTencentCloudMysqlRoStartReplicationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_start_replication.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_start_replication.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = mysql.NewStartReplicationRequest() @@ -45,10 +48,10 @@ func resourceTencentCloudMysqlRoStartReplicationCreate(d *schema.ResourceData, m request.InstanceId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().StartReplication(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().StartReplication(request) if e != nil { - return retryError(e) + 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()) } @@ -63,8 +66,8 @@ func resourceTencentCloudMysqlRoStartReplicationCreate(d *schema.ResourceData, m d.SetId(instanceId) asyncRequestId := *response.Response.AsyncRequestId - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := service.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -88,15 +91,15 @@ func resourceTencentCloudMysqlRoStartReplicationCreate(d *schema.ResourceData, m } func resourceTencentCloudMysqlRoStartReplicationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_start_replication.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_start_replication.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudMysqlRoStartReplicationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_start_replication.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_start_replication.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_ro_start_replication_test.go b/tencentcloud/services/cdb/resource_tc_mysql_ro_start_replication_test.go similarity index 80% rename from tencentcloud/resource_tc_mysql_ro_start_replication_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_ro_start_replication_test.go index 2460c2fb8e..781d489d9f 100644 --- a/tencentcloud/resource_tc_mysql_ro_start_replication_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_ro_start_replication_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixMysqlRoStartReplicationResource_basic(t *testing. t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlRoStartReplication, diff --git a/tencentcloud/resource_tc_mysql_ro_stop_replication.go b/tencentcloud/services/cdb/resource_tc_mysql_ro_stop_replication.go similarity index 71% rename from tencentcloud/resource_tc_mysql_ro_stop_replication.go rename to tencentcloud/services/cdb/resource_tc_mysql_ro_stop_replication.go index 364c862c8e..86717f8f5f 100644 --- a/tencentcloud/resource_tc_mysql_ro_stop_replication.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_ro_stop_replication.go @@ -1,17 +1,20 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlRoStopReplication() *schema.Resource { +func ResourceTencentCloudMysqlRoStopReplication() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlRoStopReplicationCreate, Read: resourceTencentCloudMysqlRoStopReplicationRead, @@ -29,11 +32,11 @@ func resourceTencentCloudMysqlRoStopReplication() *schema.Resource { } func resourceTencentCloudMysqlRoStopReplicationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_stop_replication.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_stop_replication.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = mysql.NewStopReplicationRequest() @@ -45,10 +48,10 @@ func resourceTencentCloudMysqlRoStopReplicationCreate(d *schema.ResourceData, me request.InstanceId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().StopReplication(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().StopReplication(request) if e != nil { - return retryError(e) + 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()) } @@ -63,8 +66,8 @@ func resourceTencentCloudMysqlRoStopReplicationCreate(d *schema.ResourceData, me d.SetId(instanceId) asyncRequestId := *response.Response.AsyncRequestId - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := service.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -88,15 +91,15 @@ func resourceTencentCloudMysqlRoStopReplicationCreate(d *schema.ResourceData, me } func resourceTencentCloudMysqlRoStopReplicationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_stop_replication.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_stop_replication.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudMysqlRoStopReplicationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_ro_stop_replication.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_ro_stop_replication.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_ro_stop_replication_test.go b/tencentcloud/services/cdb/resource_tc_mysql_ro_stop_replication_test.go similarity index 78% rename from tencentcloud/resource_tc_mysql_ro_stop_replication_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_ro_stop_replication_test.go index 0e892bee6b..f27dd44540 100644 --- a/tencentcloud/resource_tc_mysql_ro_stop_replication_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_ro_stop_replication_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixMysqlRoStopReplicationResource_basic(t *testing.T t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlRoStopReplication, diff --git a/tencentcloud/resource_tc_mysql_rollback.go b/tencentcloud/services/cdb/resource_tc_mysql_rollback.go similarity index 87% rename from tencentcloud/resource_tc_mysql_rollback.go rename to tencentcloud/services/cdb/resource_tc_mysql_rollback.go index 89c2af8a3e..c0b44d9922 100644 --- a/tencentcloud/resource_tc_mysql_rollback.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_rollback.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdb import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlRollback() *schema.Resource { +func ResourceTencentCloudMysqlRollback() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlRollbackCreate, Read: resourceTencentCloudMysqlRollbackRead, @@ -100,11 +103,11 @@ func resourceTencentCloudMysqlRollback() *schema.Resource { } func resourceTencentCloudMysqlRollbackCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_rollback.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_rollback.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = mysql.NewStartBatchRollbackRequest() @@ -162,10 +165,10 @@ func resourceTencentCloudMysqlRollbackCreate(d *schema.ResourceData, meta interf } request.Instances = append(request.Instances, &rollbackInstancesInfo) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().StartBatchRollback(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().StartBatchRollback(request) if e != nil { - return retryError(e) + 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()) } @@ -178,10 +181,10 @@ func resourceTencentCloudMysqlRollbackCreate(d *schema.ResourceData, meta interf } asyncRequestId := *response.Response.AsyncRequestId - d.SetId(instanceId + FILED_SP + asyncRequestId) + d.SetId(instanceId + tccommon.FILED_SP + asyncRequestId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := service.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -205,15 +208,15 @@ func resourceTencentCloudMysqlRollbackCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudMysqlRollbackRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_rollback.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_rollback.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -303,8 +306,8 @@ func resourceTencentCloudMysqlRollbackRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudMysqlRollbackDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_rollback.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_rollback.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_rollback_stop.go b/tencentcloud/services/cdb/resource_tc_mysql_rollback_stop.go similarity index 70% rename from tencentcloud/resource_tc_mysql_rollback_stop.go rename to tencentcloud/services/cdb/resource_tc_mysql_rollback_stop.go index 9c612cbd8a..b66f3484d9 100644 --- a/tencentcloud/resource_tc_mysql_rollback_stop.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_rollback_stop.go @@ -1,15 +1,17 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudMysqlRollbackStop() *schema.Resource { +func ResourceTencentCloudMysqlRollbackStop() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlRollbackStopCreate, Read: resourceTencentCloudMysqlRollbackStopRead, @@ -27,24 +29,24 @@ func resourceTencentCloudMysqlRollbackStop() *schema.Resource { } func resourceTencentCloudMysqlRollbackStopCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_rollback_stop.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_rollback_stop.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instanceId string if v, ok := d.GetOk("instance_id"); ok { instanceId = v.(string) } - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} asyncRequestId, err := service.DeleteMysqlRollbackById(ctx, instanceId) if err != nil { return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := service.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -70,15 +72,15 @@ func resourceTencentCloudMysqlRollbackStopCreate(d *schema.ResourceData, meta in } func resourceTencentCloudMysqlRollbackStopRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_rollback_stop.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_rollback_stop.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudMysqlRollbackStopDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_rollback_Stop.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_rollback_Stop.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_rollback_stop_test.go b/tencentcloud/services/cdb/resource_tc_mysql_rollback_stop_test.go similarity index 74% rename from tencentcloud/resource_tc_mysql_rollback_stop_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_rollback_stop_test.go index 030556b239..1e7ef9643d 100644 --- a/tencentcloud/resource_tc_mysql_rollback_stop_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_rollback_stop_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixMysqlRollbackStopResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlRollbackStop, @@ -24,7 +26,7 @@ func TestAccTencentCloudNeedFixMysqlRollbackStopResource_basic(t *testing.T) { const testAccMysqlRollbackStopVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/resource_tc_mysql_rollback_test.go b/tencentcloud/services/cdb/resource_tc_mysql_rollback_test.go similarity index 82% rename from tencentcloud/resource_tc_mysql_rollback_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_rollback_test.go index 465dce8bc5..724d857b4f 100644 --- a/tencentcloud/resource_tc_mysql_rollback_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_rollback_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package cdb_test import ( "fmt" "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -17,9 +19,9 @@ func TestAccTencentCloudMysqlRollbackResource_basic(t *testing.T) { timeUnix := time.Now().AddDate(0, 0, -1).Unix() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: fmt.Sprintf(testAccMysqlRollback, startTime, timeUnix), @@ -33,7 +35,7 @@ func TestAccTencentCloudMysqlRollbackResource_basic(t *testing.T) { const testAccMysqlRollbackVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/resource_tc_mysql_security_groups_attachment.go b/tencentcloud/services/cdb/resource_tc_mysql_security_groups_attachment.go similarity index 68% rename from tencentcloud/resource_tc_mysql_security_groups_attachment.go rename to tencentcloud/services/cdb/resource_tc_mysql_security_groups_attachment.go index 42d98258a1..d1b006e95a 100644 --- a/tencentcloud/resource_tc_mysql_security_groups_attachment.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_security_groups_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdb import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlSecurityGroupsAttachment() *schema.Resource { +func ResourceTencentCloudMysqlSecurityGroupsAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlSecurityGroupsAttachmentCreate, Read: resourceTencentCloudMysqlSecurityGroupsAttachmentRead, @@ -39,10 +42,10 @@ func resourceTencentCloudMysqlSecurityGroupsAttachment() *schema.Resource { } func resourceTencentCloudMysqlSecurityGroupsAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_security_groups_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_security_groups_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = mysql.NewAssociateSecurityGroupsRequest() @@ -59,10 +62,10 @@ func resourceTencentCloudMysqlSecurityGroupsAttachmentCreate(d *schema.ResourceD request.InstanceIds = []*string{helper.String(v.(string))} } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().AssociateSecurityGroups(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().AssociateSecurityGroups(request) if e != nil { - return retryError(e) + 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()) } @@ -73,22 +76,22 @@ func resourceTencentCloudMysqlSecurityGroupsAttachmentCreate(d *schema.ResourceD return err } - d.SetId(securityGroupId + FILED_SP + instanceId) + d.SetId(securityGroupId + tccommon.FILED_SP + instanceId) return resourceTencentCloudMysqlSecurityGroupsAttachmentRead(d, meta) } func resourceTencentCloudMysqlSecurityGroupsAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_security_groups_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_security_groups_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -115,14 +118,14 @@ func resourceTencentCloudMysqlSecurityGroupsAttachmentRead(d *schema.ResourceDat } func resourceTencentCloudMysqlSecurityGroupsAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_security_groups_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_security_groups_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_mysql_security_groups_attachment_test.go b/tencentcloud/services/cdb/resource_tc_mysql_security_groups_attachment_test.go similarity index 83% rename from tencentcloud/resource_tc_mysql_security_groups_attachment_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_security_groups_attachment_test.go index d26fead611..575a70b919 100644 --- a/tencentcloud/resource_tc_mysql_security_groups_attachment_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_security_groups_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudMysqlSecurityGroupsAttachmentResource_basic(t *testing.T t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlSecurityGroupsAttachment, diff --git a/tencentcloud/resource_tc_mysql_switch_for_upgrade.go b/tencentcloud/services/cdb/resource_tc_mysql_switch_for_upgrade.go similarity index 70% rename from tencentcloud/resource_tc_mysql_switch_for_upgrade.go rename to tencentcloud/services/cdb/resource_tc_mysql_switch_for_upgrade.go index 8d1a3b2ee5..7110aa71ab 100644 --- a/tencentcloud/resource_tc_mysql_switch_for_upgrade.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_switch_for_upgrade.go @@ -1,17 +1,20 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlSwitchForUpgrade() *schema.Resource { +func ResourceTencentCloudMysqlSwitchForUpgrade() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlSwitchForUpgradeCreate, Read: resourceTencentCloudMysqlSwitchForUpgradeRead, @@ -29,11 +32,11 @@ func resourceTencentCloudMysqlSwitchForUpgrade() *schema.Resource { } func resourceTencentCloudMysqlSwitchForUpgradeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_switch_for_upgrade.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_switch_for_upgrade.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = mysql.NewSwitchForUpgradeRequest() @@ -44,10 +47,10 @@ func resourceTencentCloudMysqlSwitchForUpgradeCreate(d *schema.ResourceData, met request.InstanceId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().SwitchForUpgrade(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().SwitchForUpgrade(request) if e != nil { - return retryError(e) + 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()) } @@ -60,8 +63,8 @@ func resourceTencentCloudMysqlSwitchForUpgradeCreate(d *schema.ResourceData, met d.SetId(instanceId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(7*readRetryTimeout, func() *resource.RetryError { + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(7*tccommon.ReadRetryTimeout, func() *resource.RetryError { mysqlInfo, err := service.DescribeDBInstanceById(ctx, instanceId) if err != nil { return resource.NonRetryableError(err) @@ -89,14 +92,14 @@ func resourceTencentCloudMysqlSwitchForUpgradeCreate(d *schema.ResourceData, met } func resourceTencentCloudMysqlSwitchForUpgradeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_switch_for_upgrade.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_switch_for_upgrade.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -119,8 +122,8 @@ func resourceTencentCloudMysqlSwitchForUpgradeRead(d *schema.ResourceData, meta } func resourceTencentCloudMysqlSwitchForUpgradeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_switch_for_upgrade.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_switch_for_upgrade.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_switch_for_upgrade_test.go b/tencentcloud/services/cdb/resource_tc_mysql_switch_for_upgrade_test.go similarity index 78% rename from tencentcloud/resource_tc_mysql_switch_for_upgrade_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_switch_for_upgrade_test.go index cb8ebafbf3..7aba40e024 100644 --- a/tencentcloud/resource_tc_mysql_switch_for_upgrade_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_switch_for_upgrade_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixMysqlSwitchForUpgradeResource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlSwitchForUpgrade, diff --git a/tencentcloud/resource_tc_mysql_switch_master_slave_operation.go b/tencentcloud/services/cdb/resource_tc_mysql_switch_master_slave_operation.go similarity index 78% rename from tencentcloud/resource_tc_mysql_switch_master_slave_operation.go rename to tencentcloud/services/cdb/resource_tc_mysql_switch_master_slave_operation.go index 7258be5e8d..e96c56815c 100644 --- a/tencentcloud/resource_tc_mysql_switch_master_slave_operation.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_switch_master_slave_operation.go @@ -1,17 +1,20 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlSwitchMasterSlaveOperation() *schema.Resource { +func ResourceTencentCloudMysqlSwitchMasterSlaveOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlSwitchMasterSlaveOperationCreate, Read: resourceTencentCloudMysqlSwitchMasterSlaveOperationRead, @@ -50,11 +53,11 @@ func resourceTencentCloudMysqlSwitchMasterSlaveOperation() *schema.Resource { } func resourceTencentCloudMysqlSwitchMasterSlaveOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_switch_master_slave_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_switch_master_slave_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = mysql.NewSwitchDBInstanceMasterSlaveRequest() @@ -78,10 +81,10 @@ func resourceTencentCloudMysqlSwitchMasterSlaveOperationCreate(d *schema.Resourc request.WaitSwitch = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().SwitchDBInstanceMasterSlave(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().SwitchDBInstanceMasterSlave(request) if e != nil { - return retryError(e) + 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()) } @@ -96,8 +99,8 @@ func resourceTencentCloudMysqlSwitchMasterSlaveOperationCreate(d *schema.Resourc d.SetId(instanceId) asyncRequestId := *response.Response.AsyncRequestId - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := service.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -121,15 +124,15 @@ func resourceTencentCloudMysqlSwitchMasterSlaveOperationCreate(d *schema.Resourc } func resourceTencentCloudMysqlSwitchMasterSlaveOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_switch_master_slave_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_switch_master_slave_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudMysqlSwitchMasterSlaveOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_switch_master_slave_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_switch_master_slave_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_switch_master_slave_operation_test.go b/tencentcloud/services/cdb/resource_tc_mysql_switch_master_slave_operation_test.go similarity index 80% rename from tencentcloud/resource_tc_mysql_switch_master_slave_operation_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_switch_master_slave_operation_test.go index b062e97d98..9fcaedff1d 100644 --- a/tencentcloud/resource_tc_mysql_switch_master_slave_operation_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_switch_master_slave_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudMysqlSwitchMasterSlaveOperationResource_basic(t *testing resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlSwitchMasterSlaveOperation, @@ -27,7 +29,7 @@ func TestAccTencentCloudMysqlSwitchMasterSlaveOperationResource_basic(t *testing const testAccMysqlSwitchMasterSlaveOperationVar = ` variable "instance_id" { - default = "` + defaultDbBrainInstanceId + `" + default = "` + tcacctest.DefaultDbBrainInstanceId + `" } ` diff --git a/tencentcloud/services/cdb/resource_tc_mysql_switch_proxy.go b/tencentcloud/services/cdb/resource_tc_mysql_switch_proxy.go new file mode 100644 index 0000000000..118df96256 --- /dev/null +++ b/tencentcloud/services/cdb/resource_tc_mysql_switch_proxy.go @@ -0,0 +1,111 @@ +package cdb + +import ( + "context" + "fmt" + "log" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" +) + +func ResourceTencentCloudMysqlSwitchProxy() *schema.Resource { + return &schema.Resource{ + Create: resourceTencentCloudMysqlSwitchProxyCreate, + Read: resourceTencentCloudMysqlSwitchProxyRead, + Delete: resourceTencentCloudMysqlSwitchProxyDelete, + + Schema: map[string]*schema.Schema{ + "instance_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Instance id.", + }, + + "proxy_group_id": { + Required: true, + ForceNew: true, + Type: schema.TypeString, + Description: "Proxy group id.", + }, + }, + } +} + +func resourceTencentCloudMysqlSwitchProxyCreate(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mysql_switch_proxy.create")() + defer tccommon.InconsistentCheck(d, meta)() + + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + var ( + request = mysql.NewSwitchCDBProxyRequest() + instanceId string + proxyGroupId string + ) + if v, ok := d.GetOk("instance_id"); ok { + instanceId = v.(string) + request.InstanceId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("proxy_group_id"); ok { + proxyGroupId = v.(string) + request.ProxyGroupId = helper.String(v.(string)) + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().SwitchCDBProxy(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 operate mysql switchProxy failed, reason:%+v", logId, err) + return err + } + + d.SetId(instanceId + tccommon.FILED_SP + proxyGroupId) + + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + proxy, err := service.DescribeMysqlProxyById(ctx, instanceId, proxyGroupId) + if err != nil { + return resource.NonRetryableError(err) + } + if *proxy.Status != "online" { + return resource.RetryableError(fmt.Errorf("%s Switch mysql proxy status is %s", instanceId, *proxy.Status)) + } + err = fmt.Errorf("%s Switch mysql proxy status is %s,we won't wait for it finish", instanceId, *proxy.Status) + return resource.NonRetryableError(err) + }) + + if err != nil { + log.Printf("[CRITAL]%s Switch mysql proxy fail, reason:%s\n ", logId, err.Error()) + return err + } + + return resourceTencentCloudMysqlSwitchProxyRead(d, meta) +} + +func resourceTencentCloudMysqlSwitchProxyRead(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mysql_switch_proxy.read")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} + +func resourceTencentCloudMysqlSwitchProxyDelete(d *schema.ResourceData, meta interface{}) error { + defer tccommon.LogElapsed("resource.tencentcloud_mysql_switch_proxy.delete")() + defer tccommon.InconsistentCheck(d, meta)() + + return nil +} diff --git a/tencentcloud/services/cdb/resource_tc_mysql_switch_proxy.md b/tencentcloud/services/cdb/resource_tc_mysql_switch_proxy.md new file mode 100644 index 0000000000..42fb9f5576 --- /dev/null +++ b/tencentcloud/services/cdb/resource_tc_mysql_switch_proxy.md @@ -0,0 +1,77 @@ +Provides a resource to create a mysql switch_proxy + +Example Usage + +```hcl +data "tencentcloud_availability_zones_by_product" "zones" { + product = "cdb" +} + +resource "tencentcloud_vpc" "vpc" { + name = "vpc-mysql" + cidr_block = "10.0.0.0/16" +} + +resource "tencentcloud_subnet" "subnet" { + availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.0.name + name = "subnet-mysql" + vpc_id = tencentcloud_vpc.vpc.id + cidr_block = "10.0.0.0/16" + is_multicast = false +} + +resource "tencentcloud_security_group" "security_group" { + name = "sg-mysql" + description = "mysql test" +} + +resource "tencentcloud_mysql_instance" "example" { + internet_service = 1 + engine_version = "5.7" + charge_type = "POSTPAID" + root_password = "PassWord123" + slave_deploy_mode = 1 + availability_zone = data.tencentcloud_availability_zones_by_product.zones.zones.0.name + first_slave_zone = data.tencentcloud_availability_zones_by_product.zones.zones.1.name + slave_sync_mode = 1 + instance_name = "tf-example-mysql" + mem_size = 4000 + volume_size = 200 + vpc_id = tencentcloud_vpc.vpc.id + subnet_id = tencentcloud_subnet.subnet.id + intranet_port = 3306 + security_groups = [tencentcloud_security_group.security_group.id] + + tags = { + name = "test" + } + + parameters = { + character_set_server = "utf8" + max_connections = "1000" + } +} + +resource "tencentcloud_mysql_proxy" "example" { + instance_id = tencentcloud_mysql_instance.example.id + uniq_vpc_id = tencentcloud_vpc.vpc.id + uniq_subnet_id = tencentcloud_subnet.subnet.id + proxy_node_custom { + node_count = 2 + cpu = 2 + mem = 4000 + region = "ap-guangzhou" + zone = "ap-guangzhou-3" + } + security_group = [tencentcloud_security_group.security_group.id] + desc = "desc." + connection_pool_limit = 2 + vip = "10.0.0.120" + vport = 3306 +} + +resource "tencentcloud_mysql_switch_proxy" "switch_proxy" { + instance_id = tencentcloud_mysql_instance.example.id + proxy_group_id = tencentcloud_mysql_proxy.example.proxy_group_id +} +``` diff --git a/tencentcloud/resource_tc_mysql_switch_proxy_test.go b/tencentcloud/services/cdb/resource_tc_mysql_switch_proxy_test.go similarity index 80% rename from tencentcloud/resource_tc_mysql_switch_proxy_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_switch_proxy_test.go index 7aeadc5561..24f2fbdd73 100644 --- a/tencentcloud/resource_tc_mysql_switch_proxy_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_switch_proxy_test.go @@ -1,9 +1,11 @@ -package tencentcloud +package cdb_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) // go test -i; go test -test.run TestAccTencentCloudNeedFixMysqlSwitchProxyResource_basic -v @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixMysqlSwitchProxyResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlSwitchProxy, diff --git a/tencentcloud/resource_tc_mysql_time_window.go b/tencentcloud/services/cdb/resource_tc_mysql_time_window.go similarity index 80% rename from tencentcloud/resource_tc_mysql_time_window.go rename to tencentcloud/services/cdb/resource_tc_mysql_time_window.go index f6f341a4e8..4856c8592c 100644 --- a/tencentcloud/resource_tc_mysql_time_window.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_time_window.go @@ -1,16 +1,19 @@ -package tencentcloud +package cdb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlTimeWindow() *schema.Resource { +func ResourceTencentCloudMysqlTimeWindow() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlTimeWindowCreate, Read: resourceTencentCloudMysqlTimeWindowRead, @@ -54,8 +57,8 @@ func resourceTencentCloudMysqlTimeWindow() *schema.Resource { } func resourceTencentCloudMysqlTimeWindowCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_time_window.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_time_window.create")() + defer tccommon.InconsistentCheck(d, meta)() d.SetId(d.Get("instance_id").(string)) @@ -63,14 +66,14 @@ func resourceTencentCloudMysqlTimeWindowCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudMysqlTimeWindowRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_time_window.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_time_window.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -137,10 +140,10 @@ func resourceTencentCloudMysqlTimeWindowRead(d *schema.ResourceData, meta interf } func resourceTencentCloudMysqlTimeWindowUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_time_window.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_time_window.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := mysql.NewModifyTimeWindowRequest() @@ -170,10 +173,10 @@ func resourceTencentCloudMysqlTimeWindowUpdate(d *schema.ResourceData, meta inte } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().ModifyTimeWindow(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().ModifyTimeWindow(request) if e != nil { - return retryError(e) + 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()) } @@ -189,13 +192,13 @@ func resourceTencentCloudMysqlTimeWindowUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudMysqlTimeWindowDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_time_window.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_time_window.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() if err := service.DeleteMysqlTimeWindowById(ctx, instanceId); err != nil { diff --git a/tencentcloud/resource_tc_mysql_time_window_test.go b/tencentcloud/services/cdb/resource_tc_mysql_time_window_test.go similarity index 83% rename from tencentcloud/resource_tc_mysql_time_window_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_time_window_test.go index 900f06a7fd..8f92bda179 100644 --- a/tencentcloud/resource_tc_mysql_time_window_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_time_window_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudMysqlTimeWindowResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlTimeWindow, diff --git a/tencentcloud/resource_tc_mysql_verify_root_account.go b/tencentcloud/services/cdb/resource_tc_mysql_verify_root_account.go similarity index 73% rename from tencentcloud/resource_tc_mysql_verify_root_account.go rename to tencentcloud/services/cdb/resource_tc_mysql_verify_root_account.go index 10c25bb5de..055e43909c 100644 --- a/tencentcloud/resource_tc_mysql_verify_root_account.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_verify_root_account.go @@ -1,17 +1,20 @@ -package tencentcloud +package cdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudMysqlVerifyRootAccount() *schema.Resource { +func ResourceTencentCloudMysqlVerifyRootAccount() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudMysqlVerifyRootAccountCreate, Read: resourceTencentCloudMysqlVerifyRootAccountRead, @@ -36,11 +39,11 @@ func resourceTencentCloudMysqlVerifyRootAccount() *schema.Resource { } func resourceTencentCloudMysqlVerifyRootAccountCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_verify_root_account.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_verify_root_account.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = mysql.NewVerifyRootAccountRequest() @@ -56,10 +59,10 @@ func resourceTencentCloudMysqlVerifyRootAccountCreate(d *schema.ResourceData, me request.Password = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().VerifyRootAccount(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseMysqlClient().VerifyRootAccount(request) if e != nil { - return retryError(e) + 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()) } @@ -74,8 +77,8 @@ func resourceTencentCloudMysqlVerifyRootAccountCreate(d *schema.ResourceData, me d.SetId(instanceId) asyncRequestId := *response.Response.AsyncRequestId - service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := MysqlService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := service.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -99,15 +102,15 @@ func resourceTencentCloudMysqlVerifyRootAccountCreate(d *schema.ResourceData, me } func resourceTencentCloudMysqlVerifyRootAccountRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_verify_root_account.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_verify_root_account.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudMysqlVerifyRootAccountDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_mysql_verify_root_account.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_mysql_verify_root_account.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_mysql_verify_root_account_test.go b/tencentcloud/services/cdb/resource_tc_mysql_verify_root_account_test.go similarity index 82% rename from tencentcloud/resource_tc_mysql_verify_root_account_test.go rename to tencentcloud/services/cdb/resource_tc_mysql_verify_root_account_test.go index a47444fd1b..9d9e42fe66 100644 --- a/tencentcloud/resource_tc_mysql_verify_root_account_test.go +++ b/tencentcloud/services/cdb/resource_tc_mysql_verify_root_account_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudMysqlVerifyRootAccountResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccMysqlVerifyRootAccount, diff --git a/tencentcloud/services/cdb/service_tencentcloud_mysql.go b/tencentcloud/services/cdb/service_tencentcloud_mysql.go new file mode 100644 index 0000000000..c73bf532f2 --- /dev/null +++ b/tencentcloud/services/cdb/service_tencentcloud_mysql.go @@ -0,0 +1,3322 @@ +package cdb + +import ( + "context" + "fmt" + "log" + "time" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +func NewMysqlService(client *connectivity.TencentCloudClient) MysqlService { + return MysqlService{client: client} +} + +type MysqlService struct { + client *connectivity.TencentCloudClient +} + +// check if the err means the mysql_id is not found +func (me *MysqlService) NotFoundMysqlInstance(err error) bool { + + if err == nil { + return false + } + + sdkErr, ok := err.(*errors.TencentCloudSDKError) + + if ok { + if sdkErr.Code == MysqlInstanceIdNotFound || sdkErr.Code == MysqlInstanceIdNotFound2 { + return true + } + } + return false +} + +func (me *MysqlService) DescribeBackupsByMysqlId(ctx context.Context, + mysqlId string, + leftNumber int64) (backupInfos []*cdb.BackupInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + + listInitSize := leftNumber + if listInitSize > 500 { + listInitSize = 500 + } + backupInfos = make([]*cdb.BackupInfo, 0, listInitSize) + + request := cdb.NewDescribeBackupsRequest() + request.InstanceId = &mysqlId + + var offset, limit int64 = 0, 50 +needMoreItems: + if leftNumber <= 0 { + return + } + if leftNumber < limit { + limit = leftNumber + } + request.Limit = &limit + request.Offset = &offset + 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.UseMysqlClient().DescribeBackups(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()) + + totalCount := *response.Response.TotalCount + leftNumber = leftNumber - limit + offset += limit + + backupInfos = append(backupInfos, response.Response.Items...) + if leftNumber > 0 && totalCount-offset > 0 { + goto needMoreItems + } + return backupInfos, nil + +} + +func (me *MysqlService) CreateBackup(ctx context.Context, mysqlId string) (backupId int64, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewCreateBackupRequest() + + backupMethod := "logical" + request.BackupMethod = &backupMethod + request.InstanceId = &mysqlId + + 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.UseMysqlClient().CreateBackup(request) + if err != nil { + errRet = err + return + } + backupId = int64(*response.Response.BackupId) + return +} + +func (me *MysqlService) DescribeDBZoneConfig(ctx context.Context) (sellConfigures *cdb.CdbZoneDataResult, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeCdbZoneConfigRequest() + + 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.UseMysqlClient().DescribeCdbZoneConfig(request) + if err != nil { + errRet = err + return + } + sellConfigures = response.Response.DataResult + return +} + +func (me *MysqlService) DescribeBackupConfigByMysqlId(ctx context.Context, mysqlId string) (desResponse *cdb.DescribeBackupConfigResponse, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeBackupConfigRequest() + request.InstanceId = &mysqlId + + 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.UseMysqlClient().DescribeBackupConfig(request) + if err != nil { + errRet = err + return + } + desResponse = response + return +} + +func (me *MysqlService) ModifyBackupConfigByMysqlId(ctx context.Context, mysqlId string, retentionPeriod int64, backupModel, + backupTime string, binlogExpireDays int64, enableBinlogStandby string, binlogStandbyDays int64) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewModifyBackupConfigRequest() + request.InstanceId = &mysqlId + request.ExpireDays = &retentionPeriod + request.StartTime = &backupTime + request.BackupMethod = &backupModel + + if binlogExpireDays > 0 { + request.BinlogExpireDays = &binlogExpireDays + } + + if enableBinlogStandby != "" { + request.EnableBinlogStandby = &enableBinlogStandby + } + + if binlogStandbyDays > 0 { + request.BinlogStandbyDays = &binlogStandbyDays + } + + 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.UseMysqlClient().ModifyBackupConfig(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 +} +func (me *MysqlService) DescribeDefaultParameters(ctx context.Context, engineVersion string) (parameterList []*cdb.ParameterDetail, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeDefaultParamsRequest() + request.EngineVersion = &engineVersion + + 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.UseMysqlClient().DescribeDefaultParams(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()) + + parameterList = response.Response.Items + return +} + +func (me *MysqlService) DescribeInstanceParameters(ctx context.Context, instanceId string) (parameterList []*cdb.ParameterDetail, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeInstanceParamsRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeInstanceParams(request) + if err != nil { + errRet = err + return + } + + parameterList = response.Response.Items + return +} + +func (me *MysqlService) ModifyInstanceParam(ctx context.Context, instanceId string, params map[string]string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyInstanceParamRequest() + request.InstanceIds = []*string{&instanceId} + request.ParamList = make([]*cdb.Parameter, 0, len(params)) + + for k, v := range params { + key := k + value := v + var param = cdb.Parameter{Name: &key, CurrentValue: &value} + request.ParamList = append(request.ParamList, ¶m) + } + 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.UseMysqlClient().ModifyInstanceParam(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()) + + asyncRequestId = *response.Response.AsyncRequestId + + return +} + +func (me *MysqlService) DescribeCaresParameters(ctx context.Context, instanceId string, cares []string) (caresKv map[string]interface{}, errRet error) { + caresKv = make(map[string]interface{}) + parameterList, err := me.DescribeInstanceParameters(ctx, instanceId) + if err != nil { + sdkErr, ok := err.(*errors.TencentCloudSDKError) + if ok && sdkErr.Code == "CdbError" { + return + } + errRet = err + return + } + + var inSlice = func(key string) bool { + for _, care := range cares { + if key == care { + return true + } + } + return false + } + + for _, paramInfo := range parameterList { + if inSlice(*paramInfo.Name) { + caresKv[*paramInfo.Name] = *paramInfo.CurrentValue + } + } + return +} + +func (me *MysqlService) CreateAccount(ctx context.Context, mysqlId string, + accountName, accountHost, accountPassword, accountDescription string, maxUserConnections int64) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewCreateAccountsRequest() + + var accountInfo = cdb.Account{User: &accountName, Host: &accountHost} + var accountInfos = []*cdb.Account{&accountInfo} + + request.InstanceId = &mysqlId + request.Password = &accountPassword + request.Accounts = accountInfos + request.Description = &accountDescription + request.MaxUserConnections = &maxUserConnections + + 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.UseMysqlClient().CreateAccounts(request) + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) ModifyAccountPassword(ctx context.Context, mysqlId string, + accountName, accountHost, accountPassword string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyAccountPasswordRequest() + + var accountInfo = cdb.Account{User: &accountName, Host: &accountHost} + var accountInfos = []*cdb.Account{&accountInfo} + + request.InstanceId = &mysqlId + request.NewPassword = &accountPassword + request.Accounts = accountInfos + + 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.UseMysqlClient().ModifyAccountPassword(request) + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) ModifyAccountMaxUserConnections(ctx context.Context, mysqlId, accountName, accountHost string, maxUserConnections int64) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyAccountMaxUserConnectionsRequest() + + var accountInfo = cdb.Account{User: &accountName, Host: &accountHost} + var accountInfos = []*cdb.Account{&accountInfo} + + request.InstanceId = &mysqlId + request.Accounts = accountInfos + request.MaxUserConnections = &maxUserConnections + + 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.UseMysqlClient().ModifyAccountMaxUserConnections(request) + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) UpgradeDBInstanceEngineVersion(ctx context.Context, mysqlId, engineVersion string, upgradeSubversion, maxDelayTime int64) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewUpgradeDBInstanceEngineVersionRequest() + + var waitSwitch int64 = 0 // 0- switch immediately, 1- time window switch + + request.InstanceId = &mysqlId + request.EngineVersion = &engineVersion + request.WaitSwitch = &waitSwitch + request.UpgradeSubversion = &upgradeSubversion + request.MaxDelayTime = &maxDelayTime + + 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.UseMysqlClient().UpgradeDBInstanceEngineVersion(request) + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) ModifyAccountHost(ctx context.Context, mysqlId, accountName, host, newHost string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyAccountHostRequest() + + request.InstanceId = &mysqlId + request.User = &accountName + request.Host = &host + request.NewHost = &newHost + + 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.UseMysqlClient().ModifyAccountHost(request) + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) ModifyAccountDescription(ctx context.Context, mysqlId string, + accountName, accountHost, accountDescription string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyAccountDescriptionRequest() + + var accountInfo = cdb.Account{User: &accountName, Host: &accountHost} + var accountInfos = []*cdb.Account{&accountInfo} + + request.InstanceId = &mysqlId + request.Description = &accountDescription + request.Accounts = accountInfos + + 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.UseMysqlClient().ModifyAccountDescription(request) + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) DeleteAccount(ctx context.Context, mysqlId string, + accountName string, accountHost string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDeleteAccountsRequest() + + var accountInfo = cdb.Account{User: &accountName, Host: &accountHost} + var accountInfos = []*cdb.Account{&accountInfo} + + request.InstanceId = &mysqlId + request.Accounts = accountInfos + + 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.UseMysqlClient().DeleteAccounts(request) + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) DescribeAccounts(ctx context.Context, mysqlId string) (accountInfos []*cdb.AccountInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + + var ( + listInitSize int64 = 100 + limit int64 = 100 + offset int64 = 0 + leftNumbers int64 = 0 + dofirst = true + ) + + accountInfos = make([]*cdb.AccountInfo, 0, listInitSize) + request := cdb.NewDescribeAccountsRequest() + + request.InstanceId = &mysqlId + request.Offset = &offset + request.Limit = &limit + + 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()) + } + }() + +needMoreItems: + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeAccounts(request) + if err != nil { + errRet = err + return + } + if dofirst { + leftNumbers = *response.Response.TotalCount - limit + dofirst = false + } else { + leftNumbers = leftNumbers - limit + } + offset = offset + limit + + accountInfos = append(accountInfos, response.Response.Items...) + + if leftNumbers > 0 { + goto needMoreItems + } else { + return + } + +} + +func (me *MysqlService) _innerDescribeAsyncRequestInfo(ctx context.Context, asyncRequestId string) (status, message string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeAsyncRequestInfoRequest() + request.AsyncRequestId = &asyncRequestId + + 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.UseMysqlClient().DescribeAsyncRequestInfo(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()) + + status = *response.Response.Status + message = *response.Response.Info + return +} + +func (me *MysqlService) DescribeAsyncRequestInfo(ctx context.Context, asyncRequestId string) (status, message string, errRet error) { + + // Post https://cdb.tencentcloudapi.com/: always get "Gateway Time-out" + status, message, errRet = me._innerDescribeAsyncRequestInfo(ctx, asyncRequestId) + if errRet != nil { + if _, ok := errRet.(*errors.TencentCloudSDKError); !ok { + status, message, errRet = me._innerDescribeAsyncRequestInfo(ctx, asyncRequestId) + } + } + if errRet != nil { + if _, ok := errRet.(*errors.TencentCloudSDKError); !ok { + time.Sleep(2 * time.Second) + status, message, errRet = me._innerDescribeAsyncRequestInfo(ctx, asyncRequestId) + } + } + if errRet != nil { + if _, ok := errRet.(*errors.TencentCloudSDKError); !ok { + time.Sleep(5 * time.Second) + status, message, errRet = me._innerDescribeAsyncRequestInfo(ctx, asyncRequestId) + } + } + return +} + +func (me *MysqlService) ModifyAccountPrivileges(ctx context.Context, mysqlId string, + accountName, accountHost string, databaseNames []string, privileges []string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewModifyAccountPrivilegesRequest() + request.InstanceId = &mysqlId + + var accountInfo = cdb.Account{User: &accountName, Host: &accountHost} + request.Accounts = []*cdb.Account{&accountInfo} + + request.DatabasePrivileges = make([]*cdb.DatabasePrivilege, 0, len(databaseNames)) + + for _, databaseName := range databaseNames { + var temp = databaseName + var cdbprivileges = cdb.DatabasePrivilege{Database: &temp} + cdbprivileges.Privileges = make([]*string, len(privileges)) + + for i := range privileges { + cdbprivileges.Privileges[i] = &privileges[i] + } + + request.DatabasePrivileges = append(request.DatabasePrivileges, &cdbprivileges) + } + + 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.UseMysqlClient().ModifyAccountPrivileges(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()) + + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) DescribeAccountPrivileges(ctx context.Context, mysqlId string, + accountName string, accountHost string, databaseNames []string) (privileges []string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + privileges = make([]string, 0, len(MYSQL_DATABASE_PRIVILEGE)) + + request := cdb.NewDescribeAccountPrivilegesRequest() + request.InstanceId = &mysqlId + request.User = &accountName + request.Host = &accountHost + + 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.UseMysqlClient().DescribeAccountPrivileges(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()) + + var inSlice = func(str string, strs []string) bool { + for _, v := range strs { + if v == str { + return true + } + } + return false + } + + privilegeCountMap := make(map[string]int) + + hasMapSize := 0 + for _, dataPrivilege := range response.Response.DatabasePrivileges { + + if inSlice(*dataPrivilege.Database, databaseNames) { + + hasMapSize++ + + for _, privilege := range dataPrivilege.Privileges { + privilegeCountMap[*privilege]++ + } + + } + } + // every exist database all has the privilege + for privilege, scount := range privilegeCountMap { + if scount == hasMapSize { + privileges = append(privileges, privilege) + } + } + + log.Printf("[DEBUG]%s we got same privileges is %+v \n", logId, privileges) + return +} + +func (me *MysqlService) DescribeDBInstanceById(ctx context.Context, mysqlId string) (mysqlInfo *cdb.InstanceInfo, errRet error) { + + // Post https://cdb.tencentcloudapi.com/: always get "Gateway Time-out" + mysqlInfo, errRet = me._innerDescribeDBInstanceById(ctx, mysqlId) + + if errRet != nil { + if _, ok := errRet.(*errors.TencentCloudSDKError); !ok { + mysqlInfo, errRet = me._innerDescribeDBInstanceById(ctx, mysqlId) + } + } + if errRet != nil { + if _, ok := errRet.(*errors.TencentCloudSDKError); !ok { + time.Sleep(3 * time.Second) + mysqlInfo, errRet = me._innerDescribeDBInstanceById(ctx, mysqlId) + + } + } + if errRet != nil { + if _, ok := errRet.(*errors.TencentCloudSDKError); !ok { + time.Sleep(5 * time.Second) + mysqlInfo, errRet = me._innerDescribeDBInstanceById(ctx, mysqlId) + } + } + return +} + +func (me *MysqlService) DescribeIsolatedDBInstanceById(ctx context.Context, mysqlId string) (mysqlInfo *cdb.InstanceInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeDBInstancesRequest() + request.InstanceIds = []*string{&mysqlId} + + request.Status = []*uint64{helper.Uint64(MYSQL_STATUS_ISOLATED), + helper.Uint64(MYSQL_STATUS_ISOLATED_1), + helper.Uint64(MYSQL_STATUS_ISOLATED_2)} + + 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.UseMysqlClient().DescribeDBInstances(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()) + + if len(response.Response.Items) == 0 { + return + } + if len(response.Response.Items) > 1 { + errRet = fmt.Errorf("One mysql id got %d instance info", len(response.Response.Items)) + return + } + mysqlInfo = response.Response.Items[0] + + return +} + +func (me *MysqlService) _innerDescribeDBInstanceById(ctx context.Context, mysqlId string) (mysqlInfo *cdb.InstanceInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeDBInstancesRequest() + request.InstanceIds = []*string{&mysqlId} + + 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.UseMysqlClient().DescribeDBInstances(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()) + + if len(response.Response.Items) == 0 { + return + } + if len(response.Response.Items) > 1 { + errRet = fmt.Errorf("One mysql id got %d instance info", len(response.Response.Items)) + } + mysqlInfo = response.Response.Items[0] + + return +} + +func (me *MysqlService) DescribeRunningDBInstanceById(ctx context.Context, mysqlId string) (mysqlInfo *cdb.InstanceInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeDBInstancesRequest() + request.InstanceIds = []*string{&mysqlId} + runningStatus := uint64(1) + request.Status = []*uint64{&runningStatus} + + 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.UseMysqlClient().DescribeDBInstances(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()) + + if len(response.Response.Items) == 0 { + return + } + if len(response.Response.Items) > 1 { + errRet = fmt.Errorf("One mysql id got %d instance info", len(response.Response.Items)) + } + mysqlInfo = response.Response.Items[0] + + return +} + +func (me *MysqlService) CheckDBGTIDOpen(ctx context.Context, mysqlId string) (open int64, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeDBInstanceGTIDRequest() + request.InstanceId = &mysqlId + + 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.UseMysqlClient().DescribeDBInstanceGTID(request) + if err != nil { + sdkErr, ok := err.(*errors.TencentCloudSDKError) + if ok && sdkErr.Code == "CdbError" { + open = 0 + return + } + errRet = err + return + } + open = *response.Response.IsGTIDOpen + return +} + +func (me *MysqlService) DescribeDBSecurityGroups(ctx context.Context, mysqlId string) (securityGroups []string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeDBSecurityGroupsRequest() + request.InstanceId = &mysqlId + securityGroups = make([]string, 0, 10) + 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.UseMysqlClient().DescribeDBSecurityGroups(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()) + + for _, sg := range response.Response.Groups { + securityGroups = append(securityGroups, *sg.SecurityGroupId) + } + return +} + +func (me *MysqlService) ModifyInstanceTag(ctx context.Context, mysqlId string, deleteTags, modifyTags map[string]string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyInstanceTagRequest() + request.InstanceId = &mysqlId + + if len(modifyTags) > 0 { + request.ReplaceTags = make([]*cdb.TagInfo, 0, len(modifyTags)) + for name, value := range modifyTags { + tagKey := name + tagValue := value + tag := cdb.TagInfo{TagKey: &tagKey, TagValue: []*string{&tagValue}} + request.ReplaceTags = append(request.ReplaceTags, &tag) + } + } + if len(deleteTags) > 0 { + request.DeleteTags = make([]*cdb.TagInfo, 0, len(deleteTags)) + for name, value := range deleteTags { + tagKey := name + tagValue := value + tag := cdb.TagInfo{TagKey: &tagKey, TagValue: []*string{&tagValue}} + request.DeleteTags = append(request.DeleteTags, &tag) + } + } + 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.UseMysqlClient().ModifyInstanceTag(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 +} + +func (me *MysqlService) DescribeTagsOfInstanceId(ctx context.Context, mysqlId string) (tags map[string]string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeTagsOfInstanceIdsRequest() + request.InstanceIds = []*string{&mysqlId} + tags = make(map[string]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()) + } + }() + var ( + limit int64 = 10 + offset int64 = 0 + ) + request.Limit = &limit + +again: + if request.Offset == nil { + request.Offset = &offset + } else { + offset = offset + limit + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeTagsOfInstanceIds(request) + if err != nil { + errRet = err + return + } + if len(response.Response.Rows) == 0 { + return + } + if len(response.Response.Rows) > 1 { + errRet = fmt.Errorf("One mysql id got %d tags info rows", len(response.Response.Rows)) + } + if len(response.Response.Rows[0].Tags) == 0 { + return + } + for _, tag := range response.Response.Rows[0].Tags { + if _, has := tags[*tag.TagKey]; has { + return + } + tags[*tag.TagKey] = *tag.TagValue + } + + goto again +} + +func (me *MysqlService) DescribeDBInstanceConfig(ctx context.Context, mysqlId string) (backupConfig *cdb.DescribeDBInstanceConfigResponse, + errRet error) { + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeDBInstanceConfigRequest() + request.InstanceId = &mysqlId + + 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.UseMysqlClient().DescribeDBInstanceConfig(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()) + + backupConfig = response + + return +} + +// DEPRECATED: Specify these arguments while creating. +func (me *MysqlService) InitDBInstances(ctx context.Context, mysqlId, password, charset, lowerCase string, port int) (asyncRequestId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cdb.NewInitDBInstancesRequest() + request.InstanceIds = []*string{&mysqlId} + if password != "" { + request.NewPassword = &password + } + + if port != 0 { + request.Vport = helper.IntInt64(port) + } + + paramsMap := map[string]string{ + "character_set_server": "LATIN1", // ["utf8","latin1","gbk","utf8mb4"] + } + + if charset != "" { + paramsMap["character_set_server"] = charset // ["utf8","latin1","gbk","utf8mb4"] + } + + if lowerCase != "" { + paramsMap["lower_case_table_names"] = lowerCase // ["0","1"] + } + + for k, v := range paramsMap { + name := k + value := v + param := cdb.ParamInfo{Name: &name, Value: &value} + request.Parameters = append(request.Parameters, ¶m) + } + + 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.UseMysqlClient().InitDBInstances(request) + + if err != nil { + errRet = err + return + } + if len(response.Response.AsyncRequestIds) != 1 { + errRet = fmt.Errorf("init one mysql id got %d async ids", len(response.Response.AsyncRequestIds)) + return + } + + asyncRequestId = *response.Response.AsyncRequestIds[0] + return +} + +func (me *MysqlService) OpenWanService(ctx context.Context, mysqlId string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewOpenWanServiceRequest() + request.InstanceId = &mysqlId + + 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.UseMysqlClient().OpenWanService(request) + + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) CloseWanService(ctx context.Context, mysqlId string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewCloseWanServiceRequest() + request.InstanceId = &mysqlId + 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.UseMysqlClient().CloseWanService(request) + + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) OpenDBInstanceGTID(ctx context.Context, mysqlId string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewOpenDBInstanceGTIDRequest() + request.InstanceId = &mysqlId + 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.UseMysqlClient().OpenDBInstanceGTID(request) + + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) ModifyDBInstanceName(ctx context.Context, mysqlId, + newInstanceName string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewModifyDBInstanceNameRequest() + request.InstanceId = &mysqlId + request.InstanceName = &newInstanceName + + 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, errRet := me.client.UseMysqlClient().ModifyDBInstanceName(request) + + if errRet != nil { + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *MysqlService) ModifyDBInstanceVipVport(ctx context.Context, mysqlId, vpcId, subnetId string, port int64) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := cdb.NewModifyDBInstanceVipVportRequest() + request.InstanceId = &mysqlId + request.DstPort = &port + if vpcId != "" { + request.UniqVpcId = &vpcId + } + if subnetId != "" { + request.UniqSubnetId = &subnetId + } + + 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, errRet := me.client.UseMysqlClient().ModifyDBInstanceVipVport(request) + + if errRet != nil { + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return +} + +func (me *MysqlService) UpgradeDBInstance(ctx context.Context, mysqlId string, + memSize, cpu, volumeSize, fastUpgrade int64, deviceType string, slaveDeployMode, slaveSyncMode int64, + firstSlaveZone, secondSlaveZone string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + var waitSwitch int64 = 0 // 0- switch immediately, 1- time window switch + + request := cdb.NewUpgradeDBInstanceRequest() + request.InstanceId = &mysqlId + request.Memory = &memSize + request.Cpu = &cpu + request.Volume = &volumeSize + request.WaitSwitch = &waitSwitch + request.FastUpgrade = &fastUpgrade + if slaveDeployMode != -1 { + request.DeployMode = &slaveDeployMode + } + if firstSlaveZone != "" { + request.SlaveZone = &firstSlaveZone + } + if secondSlaveZone != "" { + request.BackupZone = &secondSlaveZone + } + if slaveSyncMode != -1 { + request.ProtectMode = &slaveSyncMode + } + if deviceType != "" { + request.DeviceType = &deviceType + } + + 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.UseMysqlClient().UpgradeDBInstance(request) + + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) ModifyDBInstanceProject(ctx context.Context, mysqlId string, newProjectId int64) (errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyDBInstanceProjectRequest() + request.InstanceIds = []*string{&mysqlId} + request.NewProjectId = &newProjectId + + 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.UseMysqlClient().ModifyDBInstanceProject(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 + +} + +func (me *MysqlService) ModifyDBInstanceSecurityGroups(ctx context.Context, mysqlId string, securityGroups []string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyDBInstanceSecurityGroupsRequest() + request.InstanceId = &mysqlId + request.SecurityGroupIds = make([]*string, 0, len(securityGroups)) + + for _, v := range securityGroups { + value := v + request.SecurityGroupIds = append(request.SecurityGroupIds, &value) + } + 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.UseMysqlClient().ModifyDBInstanceSecurityGroups(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 +} + +func (me *MysqlService) DisassociateSecurityGroup(ctx context.Context, mysqlId string, securityGroup string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDisassociateSecurityGroupsRequest() + request.InstanceIds = []*string{&mysqlId} + request.SecurityGroupId = &securityGroup + + 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.UseMysqlClient().DisassociateSecurityGroups(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 + +} + +func (me *MysqlService) ModifyAutoRenewFlag(ctx context.Context, mysqlId string, newRenewFlag int64) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewModifyAutoRenewFlagRequest() + request.InstanceIds = []*string{&mysqlId} + request.AutoRenew = &newRenewFlag + + 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.UseMysqlClient().ModifyAutoRenewFlag(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 +} + +func (me *MysqlService) IsolateDBInstance(ctx context.Context, mysqlId string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewIsolateDBInstanceRequest() + request.InstanceId = &mysqlId + + 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.UseMysqlClient().IsolateDBInstance(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()) + //The server returns that AsyncRequestId does not exist + //asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) OfflineIsolatedInstances(ctx context.Context, mysqlId string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewOfflineIsolatedInstancesRequest() + request.InstanceIds = []*string{&mysqlId} + + 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()) + _, errRet = me.client.UseMysqlClient().OfflineIsolatedInstances(request) + + return +} + +func (me *MysqlService) DescribeMysqlTimeWindowById(ctx context.Context, instanceId string) (timeWindow *cdb.DescribeTimeWindowResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeTimeWindowRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeTimeWindow(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()) + + timeWindow = response + return +} + +func (me *MysqlService) DeleteMysqlTimeWindowById(ctx context.Context, instanceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDeleteTimeWindowRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DeleteTimeWindow(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 +} + +func (me *MysqlService) DescribeMysqlParamTemplateById(ctx context.Context, templateId string) (paramTemplate *cdb.DescribeParamTemplateInfoResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeParamTemplateInfoRequest() + request.TemplateId = helper.StrToInt64Point(templateId) + + 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.UseMysqlClient().DescribeParamTemplateInfo(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()) + + paramTemplate = response.Response + return +} + +func (me *MysqlService) DescribeMysqlParamTemplateInfoById(ctx context.Context, templateId string) (paramTemplateInfo *cdb.ParamTemplateInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeParamTemplatesRequest() + request.TemplateIds = []*int64{helper.StrToInt64Point(templateId)} + + 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.UseMysqlClient().DescribeParamTemplates(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()) + + items := response.Response.Items + if len(items) < 1 { + return + } + paramTemplateInfo = items[0] + return +} + +func (me *MysqlService) DeleteMysqlParamTemplateById(ctx context.Context, templateId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDeleteParamTemplateRequest() + request.TemplateId = helper.StrToInt64Point(templateId) + + 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.UseMysqlClient().DeleteParamTemplate(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 +} + +func (me *MysqlService) DescribeMysqlDeployGroupById(ctx context.Context, deployGroupId string) (deployGroup *cdb.DeployGroupInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeDeployGroupListRequest() + request.DeployGroupId = &deployGroupId + + 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()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + instances := make([]*cdb.DeployGroupInfo, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeDeployGroupList(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + instances = append(instances, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + deployGroup = instances[0] + return +} + +func (me *MysqlService) DeleteMysqlDeployGroupById(ctx context.Context, deployGroupId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDeleteDeployGroupsRequest() + request.DeployGroupIds = []*string{&deployGroupId} + + 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.UseMysqlClient().DeleteDeployGroups(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 +} + +func (me *MysqlService) DescribeMysqlSecurityGroupsAttachmentById(ctx context.Context, securityGroupId string, instanceId string) (securityGroupsAttachment *cdb.SecurityGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeDBSecurityGroupsRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeDBSecurityGroups(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()) + + if len(response.Response.Groups) < 1 { + return + } + + for _, sg := range response.Response.Groups { + if *sg.SecurityGroupId == securityGroupId { + securityGroupsAttachment = sg + break + } + } + return +} + +func (me *MysqlService) DeleteMysqlSecurityGroupsAttachmentById(ctx context.Context, securityGroupId string, instanceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDisassociateSecurityGroupsRequest() + request.SecurityGroupId = &securityGroupId + request.InstanceIds = []*string{&instanceId} + + 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.UseMysqlClient().DisassociateSecurityGroups(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 +} + +func (me *MysqlService) DescribeMysqlLocalBinlogConfigById(ctx context.Context, instanceId string) (localBinlogConfig *cdb.LocalBinlogConfig, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeLocalBinlogConfigRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeLocalBinlogConfig(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()) + + localBinlogConfig = response.Response.LocalBinlogConfig + return +} + +func (me *MysqlService) DescribeMysqlAuditLogFileById(ctx context.Context, instanceId string, fileName string) (auditLogFile *cdb.AuditLogFile, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeAuditLogFilesRequest() + request.InstanceId = &instanceId + request.FileName = &fileName + + 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.UseMysqlClient().DescribeAuditLogFiles(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()) + + if len(response.Response.Items) < 1 { + return + } + + auditLogFile = response.Response.Items[0] + return +} + +func (me *MysqlService) DeleteMysqlAuditLogFileById(ctx context.Context, instanceId string, fileName string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDeleteAuditLogFileRequest() + request.InstanceId = &instanceId + request.FileName = &fileName + + 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.UseMysqlClient().DeleteAuditLogFile(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 +} + +func (me *MysqlService) MysqlAuditLogFileStateRefreshFunc(instanceId, fileName string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + ctx := tccommon.ContextNil + + object, err := me.DescribeMysqlAuditLogFileById(ctx, instanceId, fileName) + + if err != nil { + return nil, "", err + } + + return object, helper.PString(object.Status), nil + } +} + +func (me *MysqlService) DescribeMysqlBackupOverviewByFilter(ctx context.Context, param map[string]interface{}) (backupOverview *cdb.DescribeBackupOverviewResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeBackupOverviewRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Product" { + request.Product = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseMysqlClient().DescribeBackupOverview(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()) + if response == nil || response.Response == nil { + return + } + backupOverview = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlBackupSummariesByFilter(ctx context.Context, param map[string]interface{}) (backupSummaries []*cdb.BackupSummaryItem, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeBackupSummariesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Product" { + request.Product = v.(*string) + } + if k == "OrderBy" { + request.OrderBy = v.(*string) + } + if k == "OrderDirection" { + request.OrderDirection = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeBackupSummaries(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + backupSummaries = append(backupSummaries, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlBinLogByFilter(ctx context.Context, param map[string]interface{}) (binLog []*cdb.BinlogInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeBinlogsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeBinlogs(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + binLog = append(binLog, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlBinlogBackupOverviewByFilter(ctx context.Context, param map[string]interface{}) (binlogBackupOverview *cdb.DescribeBinlogBackupOverviewResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeBinlogBackupOverviewRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Product" { + request.Product = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeBinlogBackupOverview(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()) + + if response == nil || response.Response == nil { + return + } + binlogBackupOverview = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlCloneListByFilter(ctx context.Context, param map[string]interface{}) (cloneList []*cdb.CloneItem, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeCloneListRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeCloneList(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + cloneList = append(cloneList, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlDataBackupOverviewByFilter(ctx context.Context, param map[string]interface{}) (dataBackupOverview *cdb.DescribeDataBackupOverviewResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeDataBackupOverviewRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Product" { + request.Product = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeDataBackupOverview(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()) + + if response == nil || response.Response == nil { + return + } + + dataBackupOverview = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlDbFeaturesByFilter(ctx context.Context, param map[string]interface{}) (dbFeatures *cdb.DescribeDBFeaturesResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeDBFeaturesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeDBFeatures(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()) + + if response == nil || response.Response == nil { + return + } + + dbFeatures = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlInstTablesByFilter(ctx context.Context, param map[string]interface{}) (instTables []*string, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeTablesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + if k == "Database" { + request.Database = v.(*string) + } + if k == "TableRegexp" { + request.TableRegexp = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + tables []*string + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeTables(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + tables = append(tables, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + instTables = tables + return +} + +func (me *MysqlService) DescribeMysqlInstanceCharsetByFilter(ctx context.Context, instanceId string) (instanceCharset *cdb.DescribeDBInstanceCharsetResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeDBInstanceCharsetRequest() + ) + + 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()) + } + }() + + request.InstanceId = &instanceId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeDBInstanceCharset(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()) + + if response == nil || response.Response == nil { + return + } + + instanceCharset = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlInstanceInfoById(ctx context.Context, instanceId string) (instanceInfo *cdb.DescribeDBInstanceInfoResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeDBInstanceInfoRequest() + ) + + 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()) + } + }() + + request.InstanceId = &instanceId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeDBInstanceInfo(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()) + + if response == nil || response.Response == nil { + return + } + + instanceInfo = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlInstanceParamRecordByFilter(ctx context.Context, param map[string]interface{}) (instanceParamRecord []*cdb.ParamRecord, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeInstanceParamRecordsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + paramRecord = make([]*cdb.ParamRecord, 0) + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeInstanceParamRecords(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + paramRecord = append(paramRecord, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + instanceParamRecord = paramRecord + + return +} + +func (me *MysqlService) DescribeMysqlInstanceRebootTimeByFilter(ctx context.Context, param map[string]interface{}) (instanceRebootTime []*cdb.InstanceRebootTime, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeDBInstanceRebootTimeRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceIds" { + request.InstanceIds = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeDBInstanceRebootTime(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()) + + if response == nil || response.Response == nil { + return + } + + instanceRebootTime = response.Response.Items + + return +} + +func (me *MysqlService) DescribeMysqlProxyCustomById(ctx context.Context, instanceId string) (proxyCustom *cdb.DescribeProxyCustomConfResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeProxyCustomConfRequest() + ) + + 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()) + } + }() + + request.InstanceId = &instanceId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeProxyCustomConf(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()) + + if response == nil || response.Response == nil { + return + } + + proxyCustom = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlRollbackRangeTimeByFilter(ctx context.Context, param map[string]interface{}) (rollbackRangeTime []*cdb.InstanceRollbackRangeTime, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeRollbackRangeTimeRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceIds" { + request.InstanceIds = v.([]*string) + } + if k == "IsRemoteZone" { + request.IsRemoteZone = v.(*string) + } + if k == "BackupRegion" { + request.BackupRegion = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeRollbackRangeTime(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()) + + if response == nil || response.Response == nil || len(response.Response.Items) < 1 { + return + } + + rollbackRangeTime = response.Response.Items + + return +} + +func (me *MysqlService) DescribeMysqlSlowLogByFilter(ctx context.Context, param map[string]interface{}) (slowLog []*cdb.SlowLogInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeSlowLogsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeSlowLogs(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + slowLog = append(slowLog, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlSlowLogDataByFilter(ctx context.Context, param map[string]interface{}) (slowLogData []*cdb.SlowLogItem, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeSlowLogDataRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + if k == "StartTime" { + request.StartTime = v.(*uint64) + } + if k == "EndTime" { + request.EndTime = v.(*uint64) + } + if k == "UserHosts" { + request.UserHosts = v.([]*string) + } + if k == "UserNames" { + request.UserNames = v.([]*string) + } + if k == "DataBases" { + request.DataBases = v.([]*string) + } + if k == "SortBy" { + request.SortBy = v.(*string) + } + if k == "OrderBy" { + request.OrderBy = v.(*string) + } + if k == "InstType" { + request.InstType = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeSlowLogData(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + slowLogData = append(slowLogData, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlSupportedPrivilegesById(ctx context.Context, instanceId string) (supportedPrivileges *cdb.DescribeSupportedPrivilegesResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeSupportedPrivilegesRequest() + ) + + 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()) + } + }() + + request.InstanceId = &instanceId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeSupportedPrivileges(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()) + + if response == nil || response.Response == nil { + return + } + + supportedPrivileges = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlSwitchRecordById(ctx context.Context, instanceId string) (switchRecord []*cdb.DBSwitchInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeDBSwitchRecordsRequest() + ) + + 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()) + } + }() + + request.InstanceId = &instanceId + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 200 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeDBSwitchRecords(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + switchRecord = append(switchRecord, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlUploadedFilesByFilter(ctx context.Context, param map[string]interface{}) (uploadedFiles []*cdb.SqlFileInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeUploadedFilesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Path" { + request.Path = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeUploadedFiles(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + uploadedFiles = append(uploadedFiles, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlUserTaskByFilter(ctx context.Context, param map[string]interface{}) (userTask []*cdb.TaskDetail, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeTasksRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + if k == "AsyncRequestId" { + request.AsyncRequestId = v.(*string) + } + if k == "TaskTypes" { + var taskTypes []*int64 + for _, vv := range v.([]*string) { + task := MYSQL_TASK_TYPES[*vv] + taskTypes = append(taskTypes, &task) + } + + request.TaskTypes = taskTypes + } + if k == "TaskStatus" { + var taskStatus []*int64 + for _, vv := range v.([]*string) { + task := MYSQL_TASK_STATUS[*vv] + taskStatus = append(taskStatus, &task) + } + + request.TaskStatus = taskStatus + } + if k == "StartTimeBegin" { + request.StartTimeBegin = v.(*string) + } + if k == "StartTimeEnd" { + request.StartTimeEnd = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeTasks(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + userTask = append(userTask, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlBackupDownloadRestrictionById(ctx context.Context) (backupDownloadRestriction *cdb.DescribeBackupDownloadRestrictionResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeBackupDownloadRestrictionRequest() + + 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.UseMysqlClient().DescribeBackupDownloadRestriction(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()) + + backupDownloadRestriction = response.Response + return +} + +func (me *MysqlService) DescribeMysqlBackupEncryptionStatusById(ctx context.Context, instanceId string) (backupEncryptionStatus *cdb.DescribeBackupEncryptionStatusResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeBackupEncryptionStatusRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeBackupEncryptionStatus(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()) + + backupEncryptionStatus = response.Response + return +} + +func (me *MysqlService) DescribeMysqlDbImportJobById(ctx context.Context, instanceId, asyncRequestId string) (dbImportJob *cdb.ImportRecord, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeDBImportRecordsRequest() + request.InstanceId = &instanceId + + 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()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeDBImportRecords(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + + for _, v := range response.Response.Items { + if *v.AsyncRequestId == asyncRequestId { + dbImportJob = v + return + } + } + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DeleteMysqlDbImportJobById(ctx context.Context, asyncRequestId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewStopDBImportJobRequest() + request.AsyncRequestId = &asyncRequestId + + 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.UseMysqlClient().StopDBImportJob(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 +} + +func (me *MysqlService) DeleteMysqlIsolateInstanceById(ctx context.Context, instanceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewReleaseIsolatedDBInstancesRequest() + request.InstanceIds = []*string{&instanceId} + + 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.UseMysqlClient().ReleaseIsolatedDBInstances(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 +} + +func (me *MysqlService) DescribeMysqlPasswordComplexityById(ctx context.Context, instanceId string) (passwordComplexity []*cdb.ParameterDetail, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeInstanceParamsRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeInstanceParams(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()) + + if len(response.Response.Items) < 1 { + return + } + + passwordComplexity = response.Response.Items + return +} + +func (me *MysqlService) DescribeMysqlProxyById(ctx context.Context, instanceId, proxyGroupId string) (proxy *cdb.ProxyGroupInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeCdbProxyInfoRequest() + request.InstanceId = &instanceId + if proxyGroupId != "" { + request.ProxyGroupId = &proxyGroupId + } + + 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.UseMysqlClient().DescribeCdbProxyInfo(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()) + + if len(response.Response.ProxyInfos) < 1 { + return + } + + proxy = response.Response.ProxyInfos[0] + return +} + +func (me *MysqlService) ModifyCdbProxyAddressVipAndVPort(ctx context.Context, proxyGroupId, proxyAddressId, vpcId, subnetId, ip string, port uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyCdbProxyAddressVipAndVPortRequest() + request.ProxyGroupId = &proxyGroupId + request.ProxyAddressId = &proxyAddressId + request.UniqVpcId = &vpcId + request.UniqSubnetId = &subnetId + request.Vip = &ip + request.VPort = &port + + 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.UseMysqlClient().ModifyCdbProxyAddressVipAndVPort(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 +} + +func (me *MysqlService) ModifyCdbProxyAddressDesc(ctx context.Context, proxyGroupId, proxyAddressId, desc string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyCdbProxyAddressDescRequest() + request.ProxyGroupId = &proxyGroupId + request.ProxyAddressId = &proxyAddressId + request.Desc = &desc + + 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.UseMysqlClient().ModifyCdbProxyAddressDesc(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 +} + +func (me *MysqlService) UpgradeCDBProxyVersion(ctx context.Context, instanceId, proxyGroupId, oldProxyVersion, proxyVersion, upgradeTime string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewUpgradeCDBProxyVersionRequest() + request.InstanceId = &instanceId + request.ProxyGroupId = &proxyGroupId + request.SrcProxyVersion = &oldProxyVersion + request.DstProxyVersion = &proxyVersion + request.UpgradeTime = &upgradeTime + + 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.UseMysqlClient().UpgradeCDBProxyVersion(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 +} + +func (me *MysqlService) DeleteMysqlProxyById(ctx context.Context, instanceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewCloseCDBProxyRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().CloseCDBProxy(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 +} + +func (me *MysqlService) DescribeMysqlRemoteBackupConfigById(ctx context.Context, instanceId string) (remoteBackupConfig *cdb.DescribeRemoteBackupConfigResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeRemoteBackupConfigRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeRemoteBackupConfig(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()) + + remoteBackupConfig = response.Response + return +} + +func (me *MysqlService) DescribeMysqlRollbackById(ctx context.Context, instanceId, asyncRequestId string) (rollback []*cdb.RollbackInstancesInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeRollbackTaskDetailRequest() + request.InstanceId = &instanceId + request.AsyncRequestId = &asyncRequestId + + 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.UseMysqlClient().DescribeRollbackTaskDetail(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()) + + if len(response.Response.Items) < 1 { + return + } + rollback = response.Response.Items[0].Detail + return +} + +func (me *MysqlService) DeleteMysqlRollbackById(ctx context.Context, instanceId string) (asyncRequestId string, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewStopRollbackRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().StopRollback(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()) + + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) DescribeMysqlRoGroupById(ctx context.Context, instanceId string, roGroupId string) (roGroup *cdb.RoGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeRoGroupsRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeRoGroups(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()) + + if len(response.Response.RoGroups) < 1 { + return + } + + for _, v := range response.Response.RoGroups { + if *v.RoGroupId == roGroupId { + roGroup = v + return + } + } + + return +} + +func (me *MysqlService) DescribeMysqlErrorLogByFilter(ctx context.Context, param map[string]interface{}) (errorLog []*cdb.ErrlogItem, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeErrorLogDataRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + if k == "StartTime" { + request.StartTime = v.(*uint64) + } + if k == "EndTime" { + request.EndTime = v.(*uint64) + } + if k == "KeyWords" { + request.KeyWords = v.([]*string) + } + if k == "InstType" { + request.InstType = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeErrorLogData(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + errorLog = append(errorLog, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlProjectSecurityGroupByFilter(ctx context.Context, param map[string]interface{}) (projectSecurityGroup []*cdb.SecurityGroup, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeProjectSecurityGroupsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "ProjectId" { + request.ProjectId = v.(*int64) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeProjectSecurityGroups(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()) + + if len(response.Response.Groups) < 1 { + return + } + projectSecurityGroup = response.Response.Groups + return +} + +func (me *MysqlService) DescribeMysqlRoMinScaleByFilter(ctx context.Context, param map[string]interface{}) (roMinScale *cdb.DescribeRoMinScaleResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeRoMinScaleRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "RoInstanceId" { + request.RoInstanceId = v.(*string) + } + if k == "MasterInstanceId" { + request.MasterInstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeRoMinScale(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()) + + if response.Response == nil { + return + } + roMinScale = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlDatabasesByFilter(ctx context.Context, param map[string]interface{}) (databases *cdb.DescribeDatabasesResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeDatabasesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + if k == "DatabaseRegexp" { + request.DatabaseRegexp = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + items []*string + database = make([]*cdb.DatabasesWithCharacterLists, 0) + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeDatabases(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + database = append(database, response.Response.DatabaseList...) + items = append(items, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + databases = &cdb.DescribeDatabasesResponseParams{ + Items: items, + DatabaseList: database, + } + + return +} + +func (me *MysqlService) DescribeMysqlDatabaseById(ctx context.Context, instanceId string, dBName string) (database *cdb.DatabasesWithCharacterLists, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeDatabasesRequest() + request.InstanceId = &instanceId + request.DatabaseRegexp = &dBName + + 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.UseMysqlClient().DescribeDatabases(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()) + + for _, db := range response.Response.DatabaseList { + if *db.DatabaseName == dBName { + database = db + } + } + return +} + +func (me *MysqlService) DeleteMysqlDatabaseById(ctx context.Context, instanceId string, dBName string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDeleteDatabaseRequest() + request.InstanceId = &instanceId + request.DBName = &dBName + + 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.UseMysqlClient().DeleteDatabase(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 +} diff --git a/tencentcloud/services/cdb/service_tencentcloud_tag.go b/tencentcloud/services/cdb/service_tencentcloud_tag.go new file mode 100644 index 0000000000..a59852bd54 --- /dev/null +++ b/tencentcloud/services/cdb/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package cdb + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 ac01f33793978c59cf9ace0940e4a33a5979f42c Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 11:21:02 +0800 Subject: [PATCH 08/31] refactor: migrate package tencentcloud/services/cdn --- tencentcloud/provider.go | 11 +- .../data_source_tc_cdn_domain_verifier.go | 18 +- ...data_source_tc_cdn_domain_verifier_test.go | 20 +- .../cdn}/data_source_tc_cdn_domains.go | 23 +- .../cdn}/data_source_tc_cdn_domains_test.go | 8 +- tencentcloud/services/cdn/extension_cdn.go | 111 +++++ tencentcloud/services/cdn/extension_tags.go | 3 + .../cdn}/resource_tc_cdn_domain.go | 155 +++---- .../cdn}/resource_tc_cdn_domain_test.go | 89 ++-- .../cdn}/resource_tc_cdn_url_purge.go | 33 +- .../cdn}/resource_tc_cdn_url_purge_test.go | 8 +- .../cdn}/resource_tc_cdn_url_push.go | 33 +- .../cdn}/resource_tc_cdn_url_push_test.go | 8 +- .../services/cdn/service_tencentcloud_cdn.go | 354 +++++++++++++++ .../cdn/service_tencentcloud_domain.go | 47 ++ .../services/cdn/service_tencentcloud_tag.go | 415 ++++++++++++++++++ 16 files changed, 1150 insertions(+), 186 deletions(-) rename tencentcloud/{ => services/cdn}/data_source_tc_cdn_domain_verifier.go (89%) rename tencentcloud/{ => services/cdn}/data_source_tc_cdn_domain_verifier_test.go (78%) rename tencentcloud/{ => services/cdn}/data_source_tc_cdn_domains.go (95%) rename tencentcloud/{ => services/cdn}/data_source_tc_cdn_domains_test.go (94%) create mode 100644 tencentcloud/services/cdn/extension_cdn.go create mode 100644 tencentcloud/services/cdn/extension_tags.go rename tencentcloud/{ => services/cdn}/resource_tc_cdn_domain.go (96%) rename tencentcloud/{ => services/cdn}/resource_tc_cdn_domain_test.go (93%) rename tencentcloud/{ => services/cdn}/resource_tc_cdn_url_purge.go (85%) rename tencentcloud/{ => services/cdn}/resource_tc_cdn_url_purge_test.go (85%) rename tencentcloud/{ => services/cdn}/resource_tc_cdn_url_push.go (86%) rename tencentcloud/{ => services/cdn}/resource_tc_cdn_url_push_test.go (85%) create mode 100644 tencentcloud/services/cdn/service_tencentcloud_cdn.go create mode 100644 tencentcloud/services/cdn/service_tencentcloud_domain.go create mode 100644 tencentcloud/services/cdn/service_tencentcloud_tag.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index f5f74537b6..af0670a03c 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdn" "encoding/json" "fmt" "io/ioutil" @@ -429,8 +430,8 @@ func Provider() *schema.Provider { "tencentcloud_cam_account_summary": cam.DataSourceTencentCloudCamAccountSummary(), "tencentcloud_cam_oidc_config": cam.DataSourceTencentCloudCamOidcConfig(), "tencentcloud_user_info": cam.DataSourceTencentCloudUserInfo(), - "tencentcloud_cdn_domains": dataSourceTencentCloudCdnDomains(), - "tencentcloud_cdn_domain_verifier": dataSourceTencentCloudCdnDomainVerifyRecord(), + "tencentcloud_cdn_domains": cdn.DataSourceTencentCloudCdnDomains(), + "tencentcloud_cdn_domain_verifier": cdn.DataSourceTencentCloudCdnDomainVerifyRecord(), "tencentcloud_scf_functions": dataSourceTencentCloudScfFunctions(), "tencentcloud_scf_namespaces": dataSourceTencentCloudScfNamespaces(), "tencentcloud_scf_account_info": dataSourceTencentCloudScfAccountInfo(), @@ -1195,9 +1196,9 @@ func Provider() *schema.Provider { "tencentcloud_tcaplus_tablegroup": resourceTencentCloudTcaplusTableGroup(), "tencentcloud_tcaplus_idl": resourceTencentCloudTcaplusIdl(), "tencentcloud_tcaplus_table": resourceTencentCloudTcaplusTable(), - "tencentcloud_cdn_domain": resourceTencentCloudCdnDomain(), - "tencentcloud_cdn_url_push": resourceTencentCloudUrlPush(), - "tencentcloud_cdn_url_purge": resourceTencentCloudUrlPurge(), + "tencentcloud_cdn_domain": cdn.ResourceTencentCloudCdnDomain(), + "tencentcloud_cdn_url_push": cdn.ResourceTencentCloudUrlPush(), + "tencentcloud_cdn_url_purge": cdn.ResourceTencentCloudUrlPurge(), "tencentcloud_monitor_policy_group": resourceTencentCloudMonitorPolicyGroup(), "tencentcloud_monitor_binding_object": resourceTencentCloudMonitorBindingObject(), "tencentcloud_monitor_policy_binding_object": resourceTencentCloudMonitorPolicyBindingObject(), diff --git a/tencentcloud/data_source_tc_cdn_domain_verifier.go b/tencentcloud/services/cdn/data_source_tc_cdn_domain_verifier.go similarity index 89% rename from tencentcloud/data_source_tc_cdn_domain_verifier.go rename to tencentcloud/services/cdn/data_source_tc_cdn_domain_verifier.go index 83496dfc29..2951739435 100644 --- a/tencentcloud/data_source_tc_cdn_domain_verifier.go +++ b/tencentcloud/services/cdn/data_source_tc_cdn_domain_verifier.go @@ -1,9 +1,11 @@ -package tencentcloud +package cdn import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/go-multierror" sdkError "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" @@ -11,7 +13,7 @@ import ( cdn "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn/v20180606" ) -func dataSourceTencentCloudCdnDomainVerifyRecord() *schema.Resource { +func DataSourceTencentCloudCdnDomainVerifyRecord() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudCdnDomainVerifyRecordRead, Schema: map[string]*schema.Schema{ @@ -86,13 +88,13 @@ func dataSourceTencentCloudCdnDomainVerifyRecord() *schema.Resource { } func resourceTencentCloudCdnDomainVerifyRecordRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdn_domain_verifier.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cdn_domain_verifier.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CdnService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdnService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} domainName := d.Get("domain").(string) freezeRecord := d.Get("freeze_record").(bool) @@ -151,7 +153,7 @@ func resourceTencentCloudCdnDomainVerifyRecordRead(d *schema.ResourceData, meta "file_verify_domains": response.FileVerifyDomains, "file_verify_name": response.FileVerifyName, } - if err := writeToFile(output.(string), result); err != nil { + if err := tccommon.WriteToFile(output.(string), result); err != nil { log.Printf("[CRITAL]%s output file[%s] fail, reason[%v]", logId, output.(string), err) return err diff --git a/tencentcloud/data_source_tc_cdn_domain_verifier_test.go b/tencentcloud/services/cdn/data_source_tc_cdn_domain_verifier_test.go similarity index 78% rename from tencentcloud/data_source_tc_cdn_domain_verifier_test.go rename to tencentcloud/services/cdn/data_source_tc_cdn_domain_verifier_test.go index fe3c1b3063..b0af0c6926 100644 --- a/tencentcloud/data_source_tc_cdn_domain_verifier_test.go +++ b/tencentcloud/services/cdn/data_source_tc_cdn_domain_verifier_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdn_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ func TestAccTencentCloudCdnDomainVerifyRecord_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCdnDomainVerifyRecord, @@ -31,7 +33,17 @@ func TestAccTencentCloudCdnDomainVerifyRecord_basic(t *testing.T) { }) } -const testAccCdnDomainVerifyRecord = testAccDomainsDataSourceBasic + ` +const testAccCdnDomainVerifyRecord = ` +data "tencentcloud_domains" "domains" {} + +locals { + domain1 = data.tencentcloud_domains.domains.list.0.domain_name +} + +output "domain" { + value = local.domain1 +} + resource "tencentcloud_dnspod_record" "demo" { domain = local.domain1 record_type = "A" diff --git a/tencentcloud/data_source_tc_cdn_domains.go b/tencentcloud/services/cdn/data_source_tc_cdn_domains.go similarity index 95% rename from tencentcloud/data_source_tc_cdn_domains.go rename to tencentcloud/services/cdn/data_source_tc_cdn_domains.go index e9ffc8983d..9edd211339 100644 --- a/tencentcloud/data_source_tc_cdn_domains.go +++ b/tencentcloud/services/cdn/data_source_tc_cdn_domains.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdn import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdn "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn/v20180606" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCdnDomains() *schema.Resource { +func DataSourceTencentCloudCdnDomains() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCdnDomainsRead, Schema: map[string]*schema.Schema{ @@ -21,7 +24,7 @@ func dataSourceTencentCloudCdnDomains() *schema.Resource { "service_type": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CDN_SERVICE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SERVICE_TYPE), Description: "Service type of acceleration domain name. The available value include `web`, `download` and `media`.", }, "full_url_cache": { @@ -32,13 +35,13 @@ func dataSourceTencentCloudCdnDomains() *schema.Resource { "origin_pull_protocol": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CDN_ORIGIN_PULL_PROTOCOL), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_ORIGIN_PULL_PROTOCOL), Description: "Origin-pull protocol configuration. Valid values: `http`, `https` and `follow`.", }, "https_switch": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CDN_HTTPS_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_HTTPS_SWITCH), Description: "HTTPS configuration. Valid values: `on`, `off` and `processing`.", }, "result_output_file": { @@ -316,14 +319,14 @@ func dataSourceTencentCloudCdnDomains() *schema.Resource { } func dataSourceTencentCloudCdnDomainsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cdn_domain.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cdn_domain.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) domainConfigs []*cdn.DetailDomain err error - client = meta.(*TencentCloudClient).apiV3Conn + client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() region = client.Region cdnService = CdnService{client: client} tagService = TagService{client: client} @@ -461,7 +464,7 @@ func dataSourceTencentCloudCdnDomainsRead(d *schema.ResourceData, meta interface } output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), cdnDomainList); err != nil { + if err := tccommon.WriteToFile(output.(string), cdnDomainList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_cdn_domains_test.go b/tencentcloud/services/cdn/data_source_tc_cdn_domains_test.go similarity index 94% rename from tencentcloud/data_source_tc_cdn_domains_test.go rename to tencentcloud/services/cdn/data_source_tc_cdn_domains_test.go index 4428b6cee6..e96a5198ed 100644 --- a/tencentcloud/data_source_tc_cdn_domains_test.go +++ b/tencentcloud/services/cdn/data_source_tc_cdn_domains_test.go @@ -1,15 +1,17 @@ -package tencentcloud +package cdn_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCdnDomainDataSources(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCdnDomainDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/services/cdn/extension_cdn.go b/tencentcloud/services/cdn/extension_cdn.go new file mode 100644 index 0000000000..609e42990f --- /dev/null +++ b/tencentcloud/services/cdn/extension_cdn.go @@ -0,0 +1,111 @@ +package cdn + +const ( + CDN_SERVICE_TYPE_WEB = "web" + CDN_SERVICE_TYPE_DOWNLOAD = "download" + CDN_SERVICE_TYPE_MEDIA = "media" + CDN_SERVICE_TYPE_HYBIRD = "hybrid" + CDN_SERVICE_TYPE_DYNAMIC = "dynamic" + + CDN_ORIGIN_TYPE_DOMAIN = "domain" + CDN_ORIGIN_TYPE_COS = "cos" + CDN_ORIGIN_TYPE_IP = "ip" + CDN_ORIGIN_TYPE_IPV6 = "ipv6" + CDN_ORIGIN_TYPE_IP_IPV6 = "ip_ipv6" + + CDN_ORIGIN_PULL_PROTOCOL_HTTP = "http" + CDN_ORIGIN_PULL_PROTOCOL_HTTPS = "https" + CDN_ORIGIN_PULL_PROTOCOL_FOLLOW = "follow" + + CDN_AREA_MAINLAND = "mainland" + CDN_AREA_OVERSEAS = "overseas" + CDN_AREA_GLOBAL = "global" + + CDN_SWITCH_ON = "on" + CDN_SWITCH_OFF = "off" + + CDN_DOMAIN_STATUS_ONLINE = "online" + CDN_DOMAIN_STATUS_OFFLINE = "offline" + CDN_DOMAIN_STATUS_PROCESSING = "processing" + + CDN_SERVICE_NAME = "cdn" + CDN_RESOURCE_NAME_DOMAIN = "domain" + + CDN_HOST_NOT_FOUND = "ResourceNotFound.CdnHostNotExists" + CDN_HOST_EXISTS = "ResourceInUse.CdnHostExists" + CDN_DOMAIN_CONFIG_ERROR = "FailedOperation.CdnConfigError" + + CDN_RULE_TYPE_ALL = "all" + CDN_RULE_TYPE_FILE = "file" + CDN_RULE_TYPE_DIRECTORY = "directory" + CDN_RULE_TYPE_PATH = "path" + CDN_RULE_TYPE_INDEX = "index" + CDN_RULE_TYPE_DEFAULT = "default" + + CDN_RULE_PATH = "no max-age" +) + +var CDN_SERVICE_TYPE = []string{ + CDN_SERVICE_TYPE_WEB, + CDN_SERVICE_TYPE_DOWNLOAD, + CDN_SERVICE_TYPE_MEDIA, + CDN_SERVICE_TYPE_HYBIRD, + CDN_SERVICE_TYPE_DYNAMIC, +} + +var CDN_ORIGIN_TYPE = []string{ + CDN_ORIGIN_TYPE_DOMAIN, + CDN_ORIGIN_TYPE_COS, + CDN_ORIGIN_TYPE_IP, + CDN_ORIGIN_TYPE_IPV6, + CDN_ORIGIN_TYPE_IP_IPV6, +} + +var CDN_BACKUP_ORIGIN_TYPE = []string{ + CDN_ORIGIN_TYPE_IP, + CDN_ORIGIN_TYPE_DOMAIN, +} + +var CDN_ORIGIN_PULL_PROTOCOL = []string{ + CDN_ORIGIN_PULL_PROTOCOL_HTTP, + CDN_ORIGIN_PULL_PROTOCOL_HTTPS, + CDN_ORIGIN_PULL_PROTOCOL_FOLLOW, +} + +var CDN_FORCE_REDIRECT_TYPE = []string{ + CDN_ORIGIN_PULL_PROTOCOL_HTTP, + CDN_ORIGIN_PULL_PROTOCOL_HTTPS, +} + +var CDN_AREA = []string{ + CDN_AREA_MAINLAND, + CDN_AREA_OVERSEAS, + CDN_AREA_GLOBAL, +} + +var CDN_SWITCH = []string{ + CDN_SWITCH_OFF, + CDN_SWITCH_ON, +} + +var CDN_HTTPS_SWITCH = []string{ + CDN_DOMAIN_STATUS_ONLINE, + CDN_DOMAIN_STATUS_OFFLINE, + CDN_DOMAIN_STATUS_PROCESSING, +} + +var CDN_RULE_TYPE = []string{ + CDN_RULE_TYPE_ALL, + CDN_RULE_TYPE_FILE, + CDN_RULE_TYPE_DIRECTORY, + CDN_RULE_TYPE_PATH, + CDN_RULE_TYPE_INDEX, + CDN_RULE_TYPE_DEFAULT, +} + +var CDN_HEADER_RULE = []string{ + CDN_RULE_TYPE_ALL, + CDN_RULE_TYPE_FILE, + CDN_RULE_TYPE_DIRECTORY, + CDN_RULE_TYPE_PATH, +} diff --git a/tencentcloud/services/cdn/extension_tags.go b/tencentcloud/services/cdn/extension_tags.go new file mode 100644 index 0000000000..72a0c0a5f8 --- /dev/null +++ b/tencentcloud/services/cdn/extension_tags.go @@ -0,0 +1,3 @@ +package cdn + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/resource_tc_cdn_domain.go b/tencentcloud/services/cdn/resource_tc_cdn_domain.go similarity index 96% rename from tencentcloud/resource_tc_cdn_domain.go rename to tencentcloud/services/cdn/resource_tc_cdn_domain.go index 165aea02a1..d0bd1522d6 100644 --- a/tencentcloud/resource_tc_cdn_domain.go +++ b/tencentcloud/services/cdn/resource_tc_cdn_domain.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdn import ( "context" @@ -6,15 +6,18 @@ import ( "fmt" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdn "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn/v20180606" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudCdnDomain() *schema.Resource { +func ResourceTencentCloudCdnDomain() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCdnDomainCreate, Read: resourceTencentCloudCdnDomainRead, @@ -51,7 +54,7 @@ func resourceTencentCloudCdnDomain() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue(CDN_SERVICE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SERVICE_TYPE), Description: "Acceleration domain name service type. `web`: static acceleration, `download`: download acceleration, `media`: streaming media VOD acceleration, `hybrid`: hybrid acceleration, `dynamic`: dynamic acceleration.", }, "project_id": { @@ -63,7 +66,7 @@ func resourceTencentCloudCdnDomain() *schema.Resource { "area": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CDN_AREA), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_AREA), Description: "Domain name acceleration region. `mainland`: acceleration inside mainland China, `overseas`: acceleration outside mainland China, `global`: global acceleration. Overseas acceleration service must be enabled to use overseas acceleration and global acceleration.", }, "full_url_cache": { @@ -84,7 +87,7 @@ func resourceTencentCloudCdnDomain() *schema.Resource { "origin_type": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(CDN_ORIGIN_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_ORIGIN_TYPE), Description: "Master origin server type. The following types are supported: `domain`: domain name type, `cos`: COS origin, `ip`: IP list used as origin server, `ipv6`: origin server list is a single IPv6 address, `ip_ipv6`: origin server list is multiple IPv4 addresses and an IPv6 address.", }, "origin_list": { @@ -109,13 +112,13 @@ func resourceTencentCloudCdnDomain() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CDN_ORIGIN_PULL_PROTOCOL_HTTP, - ValidateFunc: validateAllowedStringValue(CDN_ORIGIN_PULL_PROTOCOL), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_ORIGIN_PULL_PROTOCOL), Description: "Origin-pull protocol configuration. `http`: forced HTTP origin-pull, `follow`: protocol follow origin-pull, `https`: forced HTTPS origin-pull. This only supports origin server port 443 for origin-pull.", }, "backup_origin_type": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CDN_BACKUP_ORIGIN_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_BACKUP_ORIGIN_TYPE), Description: "Backup origin server type, which supports the following types: `domain`: domain name type, `ip`: IP list used as origin server.", }, "backup_origin_list": { @@ -143,35 +146,35 @@ func resourceTencentCloudCdnDomain() *schema.Resource { "https_switch": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "HTTPS configuration switch. Valid values are `on` and `off`.", }, "http2_switch": { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "HTTP2 configuration switch. Valid values are `on` and `off`. and default value is `off`.", }, "ocsp_stapling_switch": { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "OCSP configuration switch. Valid values are `on` and `off`. and default value is `off`.", }, "spdy_switch": { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "Spdy configuration switch. Valid values are `on` and `off`. and default value is `off`. This parameter is for white-list customer.", }, "verify_client": { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "Client certificate authentication feature. Valid values are `on` and `off`. and default value is `off`.", }, "server_certificate_config": { @@ -261,14 +264,14 @@ func resourceTencentCloudCdnDomain() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "Forced redirect configuration switch. Valid values are `on` and `off`. Default value is `off`.", }, "redirect_type": { Type: schema.TypeString, Optional: true, Default: CDN_ORIGIN_PULL_PROTOCOL_HTTP, - ValidateFunc: validateAllowedStringValue(CDN_FORCE_REDIRECT_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_FORCE_REDIRECT_TYPE), Description: "Forced redirect type. Valid values are `http` and `https`. `http` means a forced redirect from HTTPS to HTTP, `https` means a forced redirect from HTTP to HTTPS. " + "When `switch` setting `off`, this property does not need to be set or set to `http`. Default value is `http`.", }, @@ -276,7 +279,7 @@ func resourceTencentCloudCdnDomain() *schema.Resource { Type: schema.TypeInt, Optional: true, Default: 302, - ValidateFunc: validateAllowedIntValue([]int{301, 302}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{301, 302}), Description: "Forced redirect status code. Valid values are `301` and `302`. " + "When `switch` setting `off`, this property does not need to be set or set to `302`. Default value is `302`.", }, @@ -303,21 +306,21 @@ func resourceTencentCloudCdnDomain() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_ON, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "Sharding back to source configuration switch. Valid values are `on` and `off`. Default value is `on`.", }, "ipv6_access_switch": { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "ipv6 access configuration switch. Only available when area set to `mainland`. Valid values are `on` and `off`. Default value is `off`.", }, "follow_redirect_switch": { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "301/302 redirect following switch, available values: `on`, `off` (default).", }, "authentication": { @@ -331,7 +334,7 @@ func resourceTencentCloudCdnDomain() *schema.Resource { Type: schema.TypeString, Optional: true, Description: "Authentication switching, available values: `on`, `off`.", - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), }, "type_a": { Type: schema.TypeList, @@ -520,7 +523,7 @@ func resourceTencentCloudCdnDomain() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CDN_RULE_TYPE_DEFAULT, - ValidateFunc: validateAllowedStringValue(CDN_RULE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_RULE_TYPE), Description: "Rule type. The following types are supported: `all`: all documents take effect, `file`: the specified file suffix takes effect, " + "`directory`: the specified path takes effect, `path`: specify the absolute path to take effect, `index`: home page.", }, @@ -528,7 +531,7 @@ func resourceTencentCloudCdnDomain() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "Cache configuration switch. Valid values are `on` and `off`.", }, "cache_time": { @@ -540,7 +543,7 @@ func resourceTencentCloudCdnDomain() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "Advanced cache expiration configuration. When it is turned on, it will compare the max-age value returned by the origin site with the cache expiration time set in CacheRules, " + "and take the minimum value to cache at the node. Valid values are `on` and `off`. Default value is `off`.", }, @@ -548,7 +551,7 @@ func resourceTencentCloudCdnDomain() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "Force caching. After opening, the no-store and no-cache resources returned by the origin site will also be cached in accordance with the CacheRules " + "rules. Valid values are `on` and `off`. Default value is `off`.", }, @@ -556,35 +559,35 @@ func resourceTencentCloudCdnDomain() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "Ignore the Set-Cookie header of the origin site. Valid values are `on` and `off`. Default value is `off`. This parameter is for white-list customer.", }, "no_cache_switch": { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "Cache configuration switch. Valid values are `on` and `off`.", }, "re_validate": { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "Always check back to origin. Valid values are `on` and `off`. Default value is `off`.", }, "follow_origin_switch": { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "Follow the source station configuration switch. Valid values are `on` and `off`.", }, "heuristic_cache_switch": { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "Specify whether to enable heuristic cache, only available while `follow_origin_switch` enabled, values: `on`, `off` (Default).", }, "heuristic_cache_time": { @@ -607,7 +610,7 @@ func resourceTencentCloudCdnDomain() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CDN_SWITCH_OFF, - ValidateFunc: validateAllowedStringValue(CDN_SWITCH), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_SWITCH), Description: "Custom request header configuration switch. Valid values are `on` and `off`. and default value is `off`.", }, "header_rules": { @@ -624,19 +627,19 @@ func resourceTencentCloudCdnDomain() *schema.Resource { "header_name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 100), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 100), Description: "Http header name.", }, "header_value": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 1000), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 1000), Description: "Http header value, optional when Mode is `del`, Required when Mode is `add`/`set`.", }, "rule_type": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(CDN_HEADER_RULE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CDN_HEADER_RULE), Description: "Rule type. The following types are supported: `all`: all documents take effect, `file`: the specified file suffix takes effect, " + "`directory`: the specified path takes effect, `path`: specify the absolute path to take effect.", }, @@ -1555,11 +1558,11 @@ func resourceTencentCloudCdnDomain() *schema.Resource { } func resourceTencentCloudCdnDomainCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdn_domain.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_cdn_domain.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cdnService := CdnService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } request := cdn.NewAddCdnDomainRequest() @@ -2388,16 +2391,16 @@ func resourceTencentCloudCdnDomainCreate(d *schema.ResourceData, meta interface{ return nil } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - _, err := meta.(*TencentCloudClient).apiV3Conn.UseCdnClient().AddCdnDomain(request) + _, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdnClient().AddCdnDomain(request) if err != nil { if sdkErr, ok := err.(*sdkErrors.TencentCloudSDKError); ok { if sdkErr.Code == CDN_DOMAIN_CONFIG_ERROR || sdkErr.Code == CDN_HOST_EXISTS { return resource.NonRetryableError(err) } } - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -2407,10 +2410,10 @@ func resourceTencentCloudCdnDomainCreate(d *schema.ResourceData, meta interface{ d.SetId(domain) time.Sleep(1 * time.Second) - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { domainConfig, err := cdnService.DescribeDomainsConfigByDomain(ctx, domain) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } if *domainConfig.Status == CDN_DOMAIN_STATUS_PROCESSING { return resource.RetryableError(fmt.Errorf("domain status is still processing, retry...")) @@ -2427,10 +2430,10 @@ func resourceTencentCloudCdnDomainCreate(d *schema.ResourceData, meta interface{ // tags if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := TagService{client: client} region := client.Region - resourceName := BuildTagResourceName(CDN_SERVICE_NAME, CDN_RESOURCE_NAME_DOMAIN, region, domain) + resourceName := tccommon.BuildTagResourceName(CDN_SERVICE_NAME, CDN_RESOURCE_NAME_DOMAIN, region, domain) err := tagService.ModifyTags(ctx, resourceName, tags, nil) if err != nil { return err @@ -2441,12 +2444,12 @@ func resourceTencentCloudCdnDomainCreate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCdnDomainRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdn_domain.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cdn_domain.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() region := client.Region cdnService := CdnService{client: client} tagService := TagService{client: client} @@ -2460,10 +2463,10 @@ func resourceTencentCloudCdnDomainRead(d *schema.ResourceData, meta interface{}) var domainConfig *cdn.DetailDomain var errRet error - err := resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { domainConfig, errRet = cdnService.DescribeDomainsConfigByDomain(ctx, domain) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -3030,10 +3033,10 @@ func resourceTencentCloudCdnDomainRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudCdnDomainUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdn_domain.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + defer tccommon.LogElapsed("resource.tencentcloud_cdn_domain.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() cdnService := CdnService{client: client} d.Partial(true) @@ -3882,16 +3885,16 @@ func resourceTencentCloudCdnDomainUpdate(d *schema.ResourceData, meta interface{ } if len(updateAttrs) > 0 { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - _, err := meta.(*TencentCloudClient).apiV3Conn.UseCdnClient().UpdateDomainConfig(request) + _, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdnClient().UpdateDomainConfig(request) if err != nil { if sdkErr, ok := err.(*sdkErrors.TencentCloudSDKError); ok { if sdkErr.Code == CDN_DOMAIN_CONFIG_ERROR { return resource.NonRetryableError(err) } } - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -3899,10 +3902,10 @@ func resourceTencentCloudCdnDomainUpdate(d *schema.ResourceData, meta interface{ return err } - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { domainConfig, err := cdnService.DescribeDomainsConfigByDomain(ctx, domain) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } if *domainConfig.Status == CDN_DOMAIN_STATUS_PROCESSING { return resource.RetryableError(fmt.Errorf("domain status is still processing, retry...")) @@ -3920,7 +3923,7 @@ func resourceTencentCloudCdnDomainUpdate(d *schema.ResourceData, meta interface{ tagService := TagService{client: client} region := client.Region - resourceName := BuildTagResourceName(CDN_SERVICE_NAME, CDN_RESOURCE_NAME_DOMAIN, region, domain) + resourceName := tccommon.BuildTagResourceName(CDN_SERVICE_NAME, CDN_RESOURCE_NAME_DOMAIN, region, domain) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -3934,10 +3937,10 @@ func resourceTencentCloudCdnDomainUpdate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCdnDomainDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdn_domain.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + defer tccommon.LogElapsed("resource.tencentcloud_cdn_domain.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() cdnService := CdnService{client: client} domain := d.Id() @@ -3950,7 +3953,7 @@ func resourceTencentCloudCdnDomainDelete(d *schema.ResourceData, meta interface{ if tags := helper.GetTags(d, "tags"); len(tags) > 0 { tagService := TagService{client: client} region := client.Region - resourceName := BuildTagResourceName(CDN_SERVICE_NAME, CDN_RESOURCE_NAME_DOMAIN, region, domain) + resourceName := tccommon.BuildTagResourceName(CDN_SERVICE_NAME, CDN_RESOURCE_NAME_DOMAIN, region, domain) deleteTags := make([]string, 0, len(tags)) for key := range tags { deleteTags = append(deleteTags, key) @@ -3963,10 +3966,10 @@ func resourceTencentCloudCdnDomainDelete(d *schema.ResourceData, meta interface{ var domainConfig *cdn.DetailDomain var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { domainConfig, errRet = cdnService.DescribeDomainsConfigByDomain(ctx, domain) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -3978,10 +3981,10 @@ func resourceTencentCloudCdnDomainDelete(d *schema.ResourceData, meta interface{ } if *domainConfig.Status == CDN_DOMAIN_STATUS_ONLINE { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet = cdnService.StopDomain(ctx, domain) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -3989,10 +3992,10 @@ func resourceTencentCloudCdnDomainDelete(d *schema.ResourceData, meta interface{ return err } - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { domainConfig, err := cdnService.DescribeDomainsConfigByDomain(ctx, domain) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } if *domainConfig.Status == CDN_DOMAIN_STATUS_PROCESSING { return resource.RetryableError(fmt.Errorf("domain status is still processing, retry...")) @@ -4004,10 +4007,10 @@ func resourceTencentCloudCdnDomainDelete(d *schema.ResourceData, meta interface{ } } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet = cdnService.DeleteDomain(ctx, domain) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -4023,7 +4026,7 @@ func updateCdnModifyOnlyParams(d *schema.ResourceData, meta interface{}, ctx con } domain := d.Id() - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := CdnService{client} request := cdn.NewUpdateDomainConfigRequest() request.Domain = &domain @@ -4039,7 +4042,7 @@ func updateCdnModifyOnlyParams(d *schema.ResourceData, meta interface{}, ctx con } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err := service.UpdateDomainConfig(ctx, request) if err != nil { if sdkErr, ok := err.(*sdkErrors.TencentCloudSDKError); ok { @@ -4047,7 +4050,7 @@ func updateCdnModifyOnlyParams(d *schema.ResourceData, meta interface{}, ctx con return resource.NonRetryableError(err) } } - return retryError(err) + return tccommon.RetryError(err) } return nil }) diff --git a/tencentcloud/resource_tc_cdn_domain_test.go b/tencentcloud/services/cdn/resource_tc_cdn_domain_test.go similarity index 93% rename from tencentcloud/resource_tc_cdn_domain_test.go rename to tencentcloud/services/cdn/resource_tc_cdn_domain_test.go index c88f0e5d12..da53d15409 100644 --- a/tencentcloud/resource_tc_cdn_domain_test.go +++ b/tencentcloud/services/cdn/resource_tc_cdn_domain_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdn_test import ( "context" @@ -7,6 +7,9 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" @@ -18,6 +21,8 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + localcdn "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdn" ) func init() { @@ -25,12 +30,12 @@ func init() { resource.AddTestSweepers("cdn_domain", &resource.Sweeper{ Name: "cdn_domain", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() - service := CdnService{client} + service := localcdn.NewCdnService(client) domains, err := service.DescribeDomainsConfigByFilters(ctx, nil) if err != nil { return err @@ -40,7 +45,7 @@ func init() { item := domains[i] name := *item.Domain - if isResourcePersist(name, nil) { + if tcacctest.IsResourcePersist(name, nil) { continue } @@ -48,10 +53,10 @@ func init() { _ = service.StopDomain(ctx, name) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := service.DeleteDomain(ctx, name) if inErr != nil { - retryError(err, cdn.RESOURCEUNAVAILABLE_CDNHOSTISNOTOFFLINE) + tccommon.RetryError(err, cdn.RESOURCEUNAVAILABLE_CDNHOSTISNOTOFFLINE) } return nil }) @@ -70,13 +75,13 @@ func TestAccTencentCloudCdnDomainResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) if err := testAccCdnDomainVerify("www2"); err != nil { log.Printf("[TestAccTencentCloudCdnDomainResource] Domain Verify failed: %s", err) t.Fatalf("[TestAccTencentCloudCdnDomainResource] Domain Verify failed: %s", err) } }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCdnDomainDestroy, Steps: []resource.TestStep{ { @@ -172,9 +177,9 @@ func TestAccTencentCloudCdnDomainDryRun(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCdnDomainDestroy, Steps: []resource.TestStep{ { @@ -236,13 +241,13 @@ func TestAccTencentCloudCdnDomainDryRun(t *testing.T) { func TestAccTencentCloudCdnDomainResource_HTTPs(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) if err := testAccCdnDomainVerify("c"); err != nil { log.Printf("[TestAccCentcentCloudCdnDomainWithHTTPs] Domain Verify failed: %s", err) t.Fatalf("[TestAccCentcentCloudCdnDomainWithHTTPs] Domain Verify failed: %s", err) } }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCdnDomainDestroy, Steps: []resource.TestStep{ { @@ -344,11 +349,11 @@ func TestAccTencentCloudCdnDomainResource_HTTPs(t *testing.T) { } func testAccGetTestingDomain() (string, error) { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion("ap-guangzhou") - client := cli.(*TencentCloudClient).apiV3Conn - service := DomainService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion("ap-guangzhou") + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := localcdn.NewDomainService(client) request := domain.NewDescribeDomainNameListRequest() domains, err := service.DescribeDomainNameList(ctx, request) if err != nil { @@ -367,11 +372,11 @@ func testAccGetTestingDomain() (string, error) { } func testAccCdnDomainVerify(domainPrefix string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion("ap-guangzhou") - client := cli.(*TencentCloudClient).apiV3Conn - service := CdnService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion("ap-guangzhou") + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := localcdn.NewCdnService(client) continueCode := []string{ // no record cdn.UNAUTHORIZEDOPERATION_CDNDOMAINRECORDNOTVERIFIED, @@ -392,7 +397,7 @@ func testAccCdnDomainVerify(domainPrefix string) error { code := err.(*sdkErrors.TencentCloudSDKError).Code - if !IsContains(continueCode, code) { + if !tccommon.IsContains(continueCode, code) { return err } } @@ -416,10 +421,10 @@ func testAccCdnDomainVerify(domainPrefix string) error { return err } - err = resource.Retry(readRetryTimeout*3, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*3, func() *resource.RetryError { result, err = service.VerifyDomainRecord(ctx, l3domain) if err != nil { - return retryError(err, continueCode...) + return tccommon.RetryError(err, continueCode...) } if result { return nil @@ -431,8 +436,8 @@ func testAccCdnDomainVerify(domainPrefix string) error { } func testAccSetDnsPodRecord(domainName, recordType, record string) error { - cli, _ := sharedClientForRegion("ap-guangzhou") - client := cli.(*TencentCloudClient).apiV3Conn + cli, _ := tcacctest.SharedClientForRegion("ap-guangzhou") + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() recordLine := "默认" subDomain := "_cdnauth" @@ -471,11 +476,9 @@ func testAccSetDnsPodRecord(domainName, recordType, record string) error { } func testAccCheckCdnDomainDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cdnService := CdnService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cdnService := localcdn.NewCdnService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cdn_domain" { continue @@ -483,10 +486,10 @@ func testAccCheckCdnDomainDestroy(s *terraform.State) error { domainConfig, err := cdnService.DescribeDomainsConfigByDomain(ctx, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { domainConfig, err = cdnService.DescribeDomainsConfigByDomain(ctx, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -503,8 +506,8 @@ func testAccCheckCdnDomainDestroy(s *terraform.State) error { func testAccCheckCdnDomainExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -513,15 +516,13 @@ func testAccCheckCdnDomainExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cdn domain id is not set") } - cdnService := CdnService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cdnService := localcdn.NewCdnService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) domainConfig, err := cdnService.DescribeDomainsConfigByDomain(ctx, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { domainConfig, err = cdnService.DescribeDomainsConfigByDomain(ctx, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) diff --git a/tencentcloud/resource_tc_cdn_url_purge.go b/tencentcloud/services/cdn/resource_tc_cdn_url_purge.go similarity index 85% rename from tencentcloud/resource_tc_cdn_url_purge.go rename to tencentcloud/services/cdn/resource_tc_cdn_url_purge.go index 103cbd8d9e..fb1f4297dd 100644 --- a/tencentcloud/resource_tc_cdn_url_purge.go +++ b/tencentcloud/services/cdn/resource_tc_cdn_url_purge.go @@ -1,19 +1,22 @@ -package tencentcloud +package cdn import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" cdn "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn/v20180606" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudUrlPurge() *schema.Resource { +func ResourceTencentCloudUrlPurge() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudUrlPurgeRead, Create: resourceTencentCloudUrlPurgeCreate, @@ -91,12 +94,12 @@ func resourceTencentCloudUrlPurge() *schema.Resource { } func resourceTencentCloudUrlPurgeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdn_url_purge.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cdn_url_purge.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := CdnService{client} taskId, ok := d.Get("task_id").(string) @@ -113,10 +116,10 @@ func resourceTencentCloudUrlPurgeRead(d *schema.ResourceData, meta interface{}) err error ) - err = resource.Retry(readRetryTimeout*2, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*2, func() *resource.RetryError { logs, err = service.DescribePurgeTasks(ctx, request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if len(logs) == 0 { return resource.RetryableError(fmt.Errorf("task %s returns nil logs, retrying", taskId)) @@ -169,7 +172,7 @@ func resourceTencentCloudUrlPurgeRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudUrlPurgeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdn_url_purge.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cdn_url_purge.create")() taskId, err := tencentcloudCdnUrlPurge(d, meta) @@ -186,7 +189,7 @@ func resourceTencentCloudUrlPurgeCreate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudUrlPurgeUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdn_url_purge.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cdn_url_purge.update")() redo, ok := d.GetOk("redo") @@ -206,16 +209,16 @@ func resourceTencentCloudUrlPurgeUpdate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudUrlPurgeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdn_url_purge.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cdn_url_purge.delete")() log.Printf("noop deleting resoruce %s", "tencentcloud_cdn_url_purge") return nil } func tencentcloudCdnUrlPurge(d *schema.ResourceData, meta interface{}) (string, error) { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := CdnService{client} urls := d.Get("urls").([]interface{}) diff --git a/tencentcloud/resource_tc_cdn_url_purge_test.go b/tencentcloud/services/cdn/resource_tc_cdn_url_purge_test.go similarity index 85% rename from tencentcloud/resource_tc_cdn_url_purge_test.go rename to tencentcloud/services/cdn/resource_tc_cdn_url_purge_test.go index a618f1f6db..93377245a0 100644 --- a/tencentcloud/resource_tc_cdn_url_purge_test.go +++ b/tencentcloud/services/cdn/resource_tc_cdn_url_purge_test.go @@ -1,17 +1,19 @@ -package tencentcloud +package cdn_test import ( "log" "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCdnUrlPurge(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCdnUrlPurgeBasic, diff --git a/tencentcloud/resource_tc_cdn_url_push.go b/tencentcloud/services/cdn/resource_tc_cdn_url_push.go similarity index 86% rename from tencentcloud/resource_tc_cdn_url_push.go rename to tencentcloud/services/cdn/resource_tc_cdn_url_push.go index fe3e7c7ce5..f305952c0b 100644 --- a/tencentcloud/resource_tc_cdn_url_push.go +++ b/tencentcloud/services/cdn/resource_tc_cdn_url_push.go @@ -1,19 +1,22 @@ -package tencentcloud +package cdn import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" cdn "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn/v20180606" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudUrlPush() *schema.Resource { +func ResourceTencentCloudUrlPush() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudUrlPushRead, Create: resourceTencentCloudUrlPushCreate, @@ -112,12 +115,12 @@ func resourceTencentCloudUrlPush() *schema.Resource { } func resourceTencentCloudUrlPushRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdn_url_push.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cdn_url_push.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := CdnService{client} taskId, ok := d.Get("task_id").(string) @@ -134,10 +137,10 @@ func resourceTencentCloudUrlPushRead(d *schema.ResourceData, meta interface{}) e err error ) - err = resource.Retry(readRetryTimeout*2, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*2, func() *resource.RetryError { logs, err = service.DescribePushTasks(ctx, request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if len(logs) == 0 { return resource.RetryableError(fmt.Errorf("task %s returns nil logs, retrying", taskId)) @@ -192,7 +195,7 @@ func resourceTencentCloudUrlPushRead(d *schema.ResourceData, meta interface{}) e } func resourceTencentCloudUrlPushCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdn_url_push.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cdn_url_push.create")() taskId, err := tencentcloudCdnUrlPush(d, meta) @@ -209,7 +212,7 @@ func resourceTencentCloudUrlPushCreate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudUrlPushUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdn_url_push.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cdn_url_push.update")() redo, ok := d.GetOk("redo") @@ -229,17 +232,17 @@ func resourceTencentCloudUrlPushUpdate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudUrlPushDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdn_url_push.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cdn_url_push.delete")() log.Printf("noop deleting resoruce %s", "tencentcloud_cdn_url_push") return nil } func tencentcloudCdnUrlPush(d *schema.ResourceData, meta interface{}) (string, error) { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := CdnService{client} urls := d.Get("urls").([]interface{}) diff --git a/tencentcloud/resource_tc_cdn_url_push_test.go b/tencentcloud/services/cdn/resource_tc_cdn_url_push_test.go similarity index 85% rename from tencentcloud/resource_tc_cdn_url_push_test.go rename to tencentcloud/services/cdn/resource_tc_cdn_url_push_test.go index 879fc16f63..ac5d26750a 100644 --- a/tencentcloud/resource_tc_cdn_url_push_test.go +++ b/tencentcloud/services/cdn/resource_tc_cdn_url_push_test.go @@ -1,17 +1,19 @@ -package tencentcloud +package cdn_test import ( "log" "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCdnUrlPush(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCdnUrlPushBasic, diff --git a/tencentcloud/services/cdn/service_tencentcloud_cdn.go b/tencentcloud/services/cdn/service_tencentcloud_cdn.go new file mode 100644 index 0000000000..42d4ed34f2 --- /dev/null +++ b/tencentcloud/services/cdn/service_tencentcloud_cdn.go @@ -0,0 +1,354 @@ +package cdn + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + cdn "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn/v20180606" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +func NewCdnService(client *connectivity.TencentCloudClient) CdnService { + return CdnService{client: client} +} + +type CdnService struct { + client *connectivity.TencentCloudClient +} + +type CdnVerifyRecordResponse struct { + SubDomain *string `json:"SubDomain,omitempty" name:"SubDomain"` + Record *string `json:"Record,omitempty" name:"Record"` + RecordType *string `json:"RecordType,omitempty" name:"RecordType"` + RequestId *string `json:"RequestId,omitempty" name:"RequestId"` +} + +func (me *CdnService) DescribeDomainsConfigByDomain(ctx context.Context, domain string) (domainConfig *cdn.DetailDomain, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cdn.NewDescribeDomainsConfigRequest() + request.Filters = make([]*cdn.DomainFilter, 0, 1) + filter := &cdn.DomainFilter{ + Name: helper.String("domain"), + Value: []*string{&domain}, + } + request.Filters = append(request.Filters, filter) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCdnClient().DescribeDomainsConfig(request) + if err != nil { + if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { + if sdkErr.Code == CDN_HOST_NOT_FOUND { + return + } + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + if len(response.Response.Domains) > 0 { + domainConfig = response.Response.Domains[0] + } + return +} + +func (me *CdnService) UpdateDomainConfig(ctx context.Context, request *cdn.UpdateDomainConfigRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseCdnClient().UpdateDomainConfig(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 +} + +func (me *CdnService) DeleteDomain(ctx context.Context, domain string) error { + logId := tccommon.GetLogId(ctx) + request := cdn.NewDeleteCdnDomainRequest() + request.Domain = &domain + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseCdnClient().DeleteCdnDomain(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *CdnService) StopDomain(ctx context.Context, domain string) error { + logId := tccommon.GetLogId(ctx) + request := cdn.NewStopCdnDomainRequest() + request.Domain = &domain + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseCdnClient().StopCdnDomain(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *CdnService) StartDomain(ctx context.Context, domain string) error { + logId := tccommon.GetLogId(ctx) + request := cdn.NewStartCdnDomainRequest() + request.Domain = &domain + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseCdnClient().StartCdnDomain(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *CdnService) DescribeDomainsConfigByFilters(ctx context.Context, + filterMap map[string]interface{}) (domainConfig []*cdn.DetailDomain, errRet error) { + + var ( + logId = tccommon.GetLogId(ctx) + request = cdn.NewDescribeDomainsConfigRequest() + err error + offset, limit int64 = 0, 100 + response *cdn.DescribeDomainsConfigResponse + ) + + request.Filters = make([]*cdn.DomainFilter, 0, len(filterMap)) + + for k, v := range filterMap { + value := v.(string) + filter := &cdn.DomainFilter{ + Name: helper.String(k), + Value: []*string{&value}, + } + request.Filters = append(request.Filters, filter) + } + + request.Limit = &limit + request.Offset = &offset + + for { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err = me.client.UseCdnClient().DescribeDomainsConfig(request) + + if err != nil { + if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { + if sdkErr.Code == CDN_HOST_NOT_FOUND { + return nil + } + } + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + + domainConfig = append(domainConfig, response.Response.Domains...) + if len(response.Response.Domains) < int(limit) { + break + } + offset += limit + } + return +} + +func (me *CdnService) VerifyDomainRecord(ctx context.Context, domain string) (result bool, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cdn.NewVerifyDomainRecordRequest() + request.Domain = &domain + + 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.UseCdnClient().VerifyDomainRecord(request) + + if err != nil { + return + } + + if response.Response.Result != nil { + result = *response.Response.Result + } + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *CdnService) CreateVerifyRecord(ctx context.Context, domain string) (resp *cdn.CreateVerifyRecordResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cdn.NewCreateVerifyRecordRequest() + 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()) + } + }() + + request.Domain = &domain + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCdnClient().CreateVerifyRecord(request) + + if err != nil { + errRet = err + return + } + + resp = response.Response + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *CdnService) DescribePurgeTasks(ctx context.Context, request *cdn.DescribePurgeTasksRequest) (task []*cdn.PurgeTask, errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseCdnClient().DescribePurgeTasks(request) + + if err != nil { + errRet = err + return + } + + if response.Response != nil { + task = response.Response.PurgeLogs + } + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *CdnService) DescribePushTasks(ctx context.Context, request *cdn.DescribePushTasksRequest) (task []*cdn.PushTask, errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseCdnClient().DescribePushTasks(request) + + if err != nil { + errRet = err + return + } + + if response.Response != nil { + task = response.Response.PushLogs + } + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *CdnService) PurgeUrlsCache(ctx context.Context, request *cdn.PurgeUrlsCacheRequest) (taskId string, errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseCdnClient().PurgeUrlsCache(request) + + if err != nil { + errRet = err + return + } + + if response.Response.TaskId != nil { + taskId = *response.Response.TaskId + } + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *CdnService) PushUrlsCache(ctx context.Context, request *cdn.PushUrlsCacheRequest) (taskId string, errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseCdnClient().PushUrlsCache(request) + + if err != nil { + errRet = err + return + } + + if response.Response.TaskId != nil { + taskId = *response.Response.TaskId + } + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func GetUrlsHash(urls []string) string { + return helper.HashStrings(urls) +} diff --git a/tencentcloud/services/cdn/service_tencentcloud_domain.go b/tencentcloud/services/cdn/service_tencentcloud_domain.go new file mode 100644 index 0000000000..c23e4ec956 --- /dev/null +++ b/tencentcloud/services/cdn/service_tencentcloud_domain.go @@ -0,0 +1,47 @@ +package cdn + +import ( + "context" + "log" + + domain "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/domain/v20180808" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +func NewDomainService(client *connectivity.TencentCloudClient) DomainService { + return DomainService{client: client} +} + +type DomainService struct { + client *connectivity.TencentCloudClient +} + +func (me *DomainService) DescribeDomainNameList(ctx context.Context, request *domain.DescribeDomainNameListRequest) (result []*domain.DomainList, errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseDomainClient().DescribeDomainNameList(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()) + + if len(response.Response.DomainSet) > 0 { + result = response.Response.DomainSet + } + + return +} diff --git a/tencentcloud/services/cdn/service_tencentcloud_tag.go b/tencentcloud/services/cdn/service_tencentcloud_tag.go new file mode 100644 index 0000000000..b92547f586 --- /dev/null +++ b/tencentcloud/services/cdn/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package cdn + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 ed9576b124cd71c08ba4d6bdac6a34452134c21c Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 11:27:34 +0800 Subject: [PATCH 09/31] refactor: migrate package tencentcloud/services/cdwch --- ...source_tc_clickhouse_backup_tables_test.go | 27 - tencentcloud/provider.go | 29 +- ..._source_tc_clickhouse_backup_job_detail.go | 18 +- ...ce_tc_clickhouse_backup_job_detail_test.go | 12 +- .../data_source_tc_clickhouse_backup_jobs.go | 23 +- ...a_source_tc_clickhouse_backup_jobs_test.go | 12 +- ...data_source_tc_clickhouse_backup_tables.go | 25 +- ...source_tc_clickhouse_backup_tables_test.go | 29 + ...ta_source_tc_clickhouse_instance_shards.go | 23 +- ...urce_tc_clickhouse_instance_shards_test.go | 10 +- .../cdwch}/data_source_tc_clickhouse_spec.go | 23 +- .../data_source_tc_clickhouse_spec_test.go | 10 +- .../services/cdwch/extension_cdwch.go | 61 ++ tencentcloud/services/cdwch/extension_tags.go | 3 + .../cdwch}/resource_tc_clickhouse_account.go | 54 +- ...source_tc_clickhouse_account_permission.go | 59 +- ...e_tc_clickhouse_account_permission_test.go | 10 +- .../resource_tc_clickhouse_account_test.go | 10 +- .../cdwch}/resource_tc_clickhouse_backup.go | 45 +- .../resource_tc_clickhouse_backup_strategy.go | 40 +- ...urce_tc_clickhouse_backup_strategy_test.go | 10 +- .../resource_tc_clickhouse_backup_test.go | 10 +- ...source_tc_clickhouse_delete_backup_data.go | 27 +- .../cdwch}/resource_tc_clickhouse_instance.go | 73 +- .../resource_tc_clickhouse_instance_test.go | 12 +- .../resource_tc_clickhouse_keyval_config.go | 74 +- ...source_tc_clickhouse_keyval_config_test.go | 19 +- ...source_tc_clickhouse_recover_backup_job.go | 27 +- .../resource_tc_clickhouse_xml_config.go | 46 +- .../resource_tc_clickhouse_xml_config_test.go | 8 +- .../cdwch/service_tencentcloud_cdwch.go | 693 ++++++++++++++++++ .../cdwch/service_tencentcloud_tag.go | 415 +++++++++++ 32 files changed, 1587 insertions(+), 350 deletions(-) delete mode 100644 tencentcloud/data_source_tc_clickhouse_backup_tables_test.go rename tencentcloud/{ => services/cdwch}/data_source_tc_clickhouse_backup_job_detail.go (86%) rename tencentcloud/{ => services/cdwch}/data_source_tc_clickhouse_backup_job_detail_test.go (54%) rename tencentcloud/{ => services/cdwch}/data_source_tc_clickhouse_backup_jobs.go (85%) rename tencentcloud/{ => services/cdwch}/data_source_tc_clickhouse_backup_jobs_test.go (54%) rename tencentcloud/{ => services/cdwch}/data_source_tc_clickhouse_backup_tables.go (81%) create mode 100644 tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_tables_test.go rename tencentcloud/{ => services/cdwch}/data_source_tc_clickhouse_instance_shards.go (70%) rename tencentcloud/{ => services/cdwch}/data_source_tc_clickhouse_instance_shards_test.go (58%) rename tencentcloud/{ => services/cdwch}/data_source_tc_clickhouse_spec.go (96%) rename tencentcloud/{ => services/cdwch}/data_source_tc_clickhouse_spec_test.go (59%) create mode 100644 tencentcloud/services/cdwch/extension_cdwch.go create mode 100644 tencentcloud/services/cdwch/extension_tags.go rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_account.go (67%) rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_account_permission.go (85%) rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_account_permission_test.go (72%) rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_account_test.go (71%) rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_backup.go (71%) rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_backup_strategy.go (88%) rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_backup_strategy_test.go (78%) rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_backup_test.go (68%) rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_delete_backup_data.go (70%) rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_instance.go (82%) rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_instance_test.go (85%) rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_keyval_config.go (68%) rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_keyval_config_test.go (82%) rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_recover_backup_job.go (70%) rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_xml_config.go (75%) rename tencentcloud/{ => services/cdwch}/resource_tc_clickhouse_xml_config_test.go (95%) create mode 100644 tencentcloud/services/cdwch/service_tencentcloud_cdwch.go create mode 100644 tencentcloud/services/cdwch/service_tencentcloud_tag.go diff --git a/tencentcloud/data_source_tc_clickhouse_backup_tables_test.go b/tencentcloud/data_source_tc_clickhouse_backup_tables_test.go deleted file mode 100644 index 4e50eb67de..0000000000 --- a/tencentcloud/data_source_tc_clickhouse_backup_tables_test.go +++ /dev/null @@ -1,27 +0,0 @@ -package tencentcloud - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudClickhouseBackupTablesDataSource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccClickhouseBackupTablesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clickhouse_backup_tables.backup_tables")), - }, - }, - }) -} - -const testAccClickhouseBackupTablesDataSource = DefaultClickhouseVariables + ` -data "tencentcloud_clickhouse_backup_tables" "backup_tables" { - instance_id = var.instance_id - } -` diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index af0670a03c..3658f95855 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdwch" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdn" "encoding/json" "fmt" @@ -824,9 +825,9 @@ func Provider() *schema.Provider { "tencentcloud_lighthouse_instance_blueprint": dataSourceTencentCloudLighthouseInstanceBlueprint(), "tencentcloud_lighthouse_disk_config": dataSourceTencentCloudLighthouseDiskConfig(), "tencentcloud_lighthouse_disks": dataSourceTencentCloudLighthouseInstanceDisks(), - "tencentcloud_clickhouse_backup_jobs": dataSourceTencentCloudClickhouseBackupJobs(), - "tencentcloud_clickhouse_backup_job_detail": dataSourceTencentCloudClickhouseBackupJobDetail(), - "tencentcloud_clickhouse_backup_tables": dataSourceTencentCloudClickhouseBackupTables(), + "tencentcloud_clickhouse_backup_jobs": cdwch.DataSourceTencentCloudClickhouseBackupJobs(), + "tencentcloud_clickhouse_backup_job_detail": cdwch.DataSourceTencentCloudClickhouseBackupJobDetail(), + "tencentcloud_clickhouse_backup_tables": cdwch.DataSourceTencentCloudClickhouseBackupTables(), "tencentcloud_cls_shipper_tasks": dataSourceTencentCloudClsShipperTasks(), "tencentcloud_cls_machines": dataSourceTencentCloudClsMachines(), "tencentcloud_cls_machine_group_configs": dataSourceTencentCloudClsMachineGroupConfigs(), @@ -896,8 +897,8 @@ func Provider() *schema.Provider { "tencentcloud_antiddos_overview_attack_trend": antiddos.DataSourceTencentCloudAntiddosOverviewAttackTrend(), "tencentcloud_kubernetes_cluster_instances": dataSourceTencentCloudKubernetesClusterInstances(), "tencentcloud_kubernetes_cluster_node_pools": dataSourceTencentCloudKubernetesClusterNodePools(), - "tencentcloud_clickhouse_spec": dataSourceTencentCloudClickhouseSpec(), - "tencentcloud_clickhouse_instance_shards": dataSourceTencentCloudClickhouseInstanceShards(), + "tencentcloud_clickhouse_spec": cdwch.DataSourceTencentCloudClickhouseSpec(), + "tencentcloud_clickhouse_instance_shards": cdwch.DataSourceTencentCloudClickhouseInstanceShards(), }, ResourcesMap: map[string]*schema.Resource{ @@ -1732,12 +1733,12 @@ func Provider() *schema.Provider { "tencentcloud_lighthouse_disk": resourceTencentCloudLighthouseDisk(), "tencentcloud_lighthouse_renew_disk": resourceTencentCloudLighthouseRenewDisk(), "tencentcloud_lighthouse_renew_instance": resourceTencentCloudLighthouseRenewInstance(), - "tencentcloud_clickhouse_backup": resourceTencentCloudClickhouseBackup(), - "tencentcloud_clickhouse_backup_strategy": resourceTencentCloudClickhouseBackupStrategy(), - "tencentcloud_clickhouse_recover_backup_job": resourceTencentCloudClickhouseRecoverBackupJob(), - "tencentcloud_clickhouse_delete_backup_data": resourceTencentCloudClickhouseDeleteBackupData(), - "tencentcloud_clickhouse_account": resourceTencentCloudClickhouseAccount(), - "tencentcloud_clickhouse_account_permission": resourceTencentCloudClickhouseAccountPermission(), + "tencentcloud_clickhouse_backup": cdwch.ResourceTencentCloudClickhouseBackup(), + "tencentcloud_clickhouse_backup_strategy": cdwch.ResourceTencentCloudClickhouseBackupStrategy(), + "tencentcloud_clickhouse_recover_backup_job": cdwch.ResourceTencentCloudClickhouseRecoverBackupJob(), + "tencentcloud_clickhouse_delete_backup_data": cdwch.ResourceTencentCloudClickhouseDeleteBackupData(), + "tencentcloud_clickhouse_account": cdwch.ResourceTencentCloudClickhouseAccount(), + "tencentcloud_clickhouse_account_permission": cdwch.ResourceTencentCloudClickhouseAccountPermission(), "tencentcloud_api_gateway_api_doc": resourceTencentCloudAPIGatewayAPIDoc(), "tencentcloud_api_gateway_api_app": resourceTencentCloudAPIGatewayAPIApp(), "tencentcloud_api_gateway_update_api_app_key": resourceTencentCloudApiGatewayUpdateApiAppKey(), @@ -1753,7 +1754,7 @@ func Provider() *schema.Provider { "tencentcloud_tse_cngw_certificate": resourceTencentCloudTseCngwCertificate(), "tencentcloud_tse_waf_protection": resourceTencentCloudTseWafProtection(), "tencentcloud_tse_waf_domains": resourceTencentCloudTseWafDomains(), - "tencentcloud_clickhouse_instance": resourceTencentCloudClickhouseInstance(), + "tencentcloud_clickhouse_instance": cdwch.ResourceTencentCloudClickhouseInstance(), "tencentcloud_cls_kafka_recharge": resourceTencentCloudClsKafkaRecharge(), "tencentcloud_cls_scheduled_sql": resourceTencentCloudClsScheduledSql(), "tencentcloud_eb_event_transform": resourceTencentCloudEbEventTransform(), @@ -1858,8 +1859,8 @@ func Provider() *schema.Provider { "tencentcloud_bi_embed_token_apply": bi.ResourceTencentCloudBiEmbedTokenApply(), "tencentcloud_bi_embed_interval_apply": bi.ResourceTencentCloudBiEmbedIntervalApply(), "tencentcloud_cdwpg_instance": resourceTencentCloudCdwpgInstance(), - "tencentcloud_clickhouse_keyval_config": resourceTencentCloudClickhouseKeyvalConfig(), - "tencentcloud_clickhouse_xml_config": resourceTencentCloudClickhouseXmlConfig(), + "tencentcloud_clickhouse_keyval_config": cdwch.ResourceTencentCloudClickhouseKeyvalConfig(), + "tencentcloud_clickhouse_xml_config": cdwch.ResourceTencentCloudClickhouseXmlConfig(), "tencentcloud_clb_target_group_attachments": resourceTencentCloudClbTargetGroupAttachments(), }, diff --git a/tencentcloud/data_source_tc_clickhouse_backup_job_detail.go b/tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_job_detail.go similarity index 86% rename from tencentcloud/data_source_tc_clickhouse_backup_job_detail.go rename to tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_job_detail.go index 5bc4ccb3a3..951339935f 100644 --- a/tencentcloud/data_source_tc_clickhouse_backup_job_detail.go +++ b/tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_job_detail.go @@ -1,14 +1,16 @@ -package tencentcloud +package cdwch import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clickhouse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func dataSourceTencentCloudClickhouseBackupJobDetail() *schema.Resource { +func DataSourceTencentCloudClickhouseBackupJobDetail() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClickhouseBackupJobDetailRead, Schema: map[string]*schema.Schema{ @@ -79,8 +81,8 @@ func dataSourceTencentCloudClickhouseBackupJobDetail() *schema.Resource { } func dataSourceTencentCloudClickhouseBackupJobDetailRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clickhouse_backup_job_detail.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clickhouse_backup_job_detail.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( request = clickhouse.NewDescribeBackUpJobDetailRequest() @@ -99,11 +101,11 @@ func dataSourceTencentCloudClickhouseBackupJobDetailRead(d *schema.ResourceData, var tableContents []*clickhouse.BackupTableContent - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwchClient().DescribeBackUpJobDetail(request) + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwchClient().DescribeBackUpJobDetail(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } tableContents = response.Response.TableContents return nil @@ -155,7 +157,7 @@ func dataSourceTencentCloudClickhouseBackupJobDetailRead(d *schema.ResourceData, d.SetId(instanceId + helper.IntToStr(backUpJobId)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clickhouse_backup_job_detail_test.go b/tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_job_detail_test.go similarity index 54% rename from tencentcloud/data_source_tc_clickhouse_backup_job_detail_test.go rename to tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_job_detail_test.go index 8dccc87eb9..7de12b492a 100644 --- a/tencentcloud/data_source_tc_clickhouse_backup_job_detail_test.go +++ b/tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_job_detail_test.go @@ -1,25 +1,27 @@ -package tencentcloud +package cdwch_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudClickhouseBackupJobDetailDataSource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClickhouseBackupJobDetailDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clickhouse_backup_job_detail.backup_job_detail")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clickhouse_backup_job_detail.backup_job_detail")), }, }, }) } -const testAccClickhouseBackupJobDetailDataSource = DefaultClickhouseVariables + ` +const testAccClickhouseBackupJobDetailDataSource = tcacctest.DefaultClickhouseVariables + ` resource "tencentcloud_clickhouse_backup" "backup" { instance_id = var.instance_id cos_bucket_name = "keep-export-image-1308726196" diff --git a/tencentcloud/data_source_tc_clickhouse_backup_jobs.go b/tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_jobs.go similarity index 85% rename from tencentcloud/data_source_tc_clickhouse_backup_jobs.go rename to tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_jobs.go index 8e09ff2eaa..46cbc34309 100644 --- a/tencentcloud/data_source_tc_clickhouse_backup_jobs.go +++ b/tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_jobs.go @@ -1,16 +1,19 @@ -package tencentcloud +package cdwch import ( "context" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clickhouse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClickhouseBackupJobs() *schema.Resource { +func DataSourceTencentCloudClickhouseBackupJobs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClickhouseBackupJobsRead, Schema: map[string]*schema.Schema{ @@ -87,12 +90,12 @@ func dataSourceTencentCloudClickhouseBackupJobs() *schema.Resource { } func dataSourceTencentCloudClickhouseBackupJobsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clickhouse_backup_jobs.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clickhouse_backup_jobs.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { @@ -107,14 +110,14 @@ func dataSourceTencentCloudClickhouseBackupJobsRead(d *schema.ResourceData, meta paramMap["end_time"] = helper.String(v.(string)) } - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var backUpJobs []*clickhouse.BackUpJobDisplay - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClickhouseBackupJobsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } backUpJobs = result return nil @@ -168,7 +171,7 @@ func dataSourceTencentCloudClickhouseBackupJobsRead(d *schema.ResourceData, meta d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clickhouse_backup_jobs_test.go b/tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_jobs_test.go similarity index 54% rename from tencentcloud/data_source_tc_clickhouse_backup_jobs_test.go rename to tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_jobs_test.go index 8a3ad272ff..b94a90bbc9 100644 --- a/tencentcloud/data_source_tc_clickhouse_backup_jobs_test.go +++ b/tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_jobs_test.go @@ -1,26 +1,28 @@ -package tencentcloud +package cdwch_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudClickhouseBackupJobsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClickhouseBackupJobsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clickhouse_backup_jobs.backup_jobs")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clickhouse_backup_jobs.backup_jobs")), }, }, }) } -const testAccClickhouseBackupJobsDataSource = DefaultClickhouseVariables + ` +const testAccClickhouseBackupJobsDataSource = tcacctest.DefaultClickhouseVariables + ` resource "tencentcloud_clickhouse_backup" "backup" { instance_id = var.instance_id cos_bucket_name = "keep-export-image-1308726196" diff --git a/tencentcloud/data_source_tc_clickhouse_backup_tables.go b/tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_tables.go similarity index 81% rename from tencentcloud/data_source_tc_clickhouse_backup_tables.go rename to tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_tables.go index 050c7f62c1..94b0d07f6b 100644 --- a/tencentcloud/data_source_tc_clickhouse_backup_tables.go +++ b/tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_tables.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdwch import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clickhouse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClickhouseBackupTables() *schema.Resource { +func DataSourceTencentCloudClickhouseBackupTables() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClickhouseBackupTablesRead, Schema: map[string]*schema.Schema{ @@ -74,22 +77,22 @@ func dataSourceTencentCloudClickhouseBackupTables() *schema.Resource { } func dataSourceTencentCloudClickhouseBackupTablesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clickhouse_backup_tables.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clickhouse_backup_tables.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instanceId := d.Get("instance_id").(string) - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var availableTables []*clickhouse.BackupTableContent - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClickhouseBackupTablesByFilter(ctx, instanceId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } availableTables = result return nil @@ -133,7 +136,7 @@ func dataSourceTencentCloudClickhouseBackupTablesRead(d *schema.ResourceData, me backupTableContentMap["rip"] = backupTableContent.Rip } - ids = append(ids, *backupTableContent.Database+FILED_SP+*backupTableContent.Table) + ids = append(ids, *backupTableContent.Database+tccommon.FILED_SP+*backupTableContent.Table) tmpList = append(tmpList, backupTableContentMap) } @@ -143,7 +146,7 @@ func dataSourceTencentCloudClickhouseBackupTablesRead(d *schema.ResourceData, me d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_tables_test.go b/tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_tables_test.go new file mode 100644 index 0000000000..5d84f26400 --- /dev/null +++ b/tencentcloud/services/cdwch/data_source_tc_clickhouse_backup_tables_test.go @@ -0,0 +1,29 @@ +package cdwch_test + +import ( + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudClickhouseBackupTablesDataSource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccClickhouseBackupTablesDataSource, + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clickhouse_backup_tables.backup_tables")), + }, + }, + }) +} + +const testAccClickhouseBackupTablesDataSource = tcacctest.DefaultClickhouseVariables + ` +data "tencentcloud_clickhouse_backup_tables" "backup_tables" { + instance_id = var.instance_id + } +` diff --git a/tencentcloud/data_source_tc_clickhouse_instance_shards.go b/tencentcloud/services/cdwch/data_source_tc_clickhouse_instance_shards.go similarity index 70% rename from tencentcloud/data_source_tc_clickhouse_instance_shards.go rename to tencentcloud/services/cdwch/data_source_tc_clickhouse_instance_shards.go index 4e9babe2c5..90a8ba33e5 100644 --- a/tencentcloud/data_source_tc_clickhouse_instance_shards.go +++ b/tencentcloud/services/cdwch/data_source_tc_clickhouse_instance_shards.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdwch import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdwch "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClickhouseInstanceShards() *schema.Resource { +func DataSourceTencentCloudClickhouseInstanceShards() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClickhouseInstanceShardsRead, Schema: map[string]*schema.Schema{ @@ -35,25 +38,25 @@ func dataSourceTencentCloudClickhouseInstanceShards() *schema.Resource { } func dataSourceTencentCloudClickhouseInstanceShardsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clickhouse_instance_shards.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clickhouse_instance_shards.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { paramMap["InstanceId"] = helper.String(v.(string)) } - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceShards *cdwch.DescribeInstanceShardsResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClickhouseInstanceShardsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceShards = result return nil @@ -70,7 +73,7 @@ func dataSourceTencentCloudClickhouseInstanceShardsRead(d *schema.ResourceData, output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clickhouse_instance_shards_test.go b/tencentcloud/services/cdwch/data_source_tc_clickhouse_instance_shards_test.go similarity index 58% rename from tencentcloud/data_source_tc_clickhouse_instance_shards_test.go rename to tencentcloud/services/cdwch/data_source_tc_clickhouse_instance_shards_test.go index 3a30018c7a..f498c2f90d 100644 --- a/tencentcloud/data_source_tc_clickhouse_instance_shards_test.go +++ b/tencentcloud/services/cdwch/data_source_tc_clickhouse_instance_shards_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdwch_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudClickhouseInstanceShardsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClickhouseInstanceShardsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clickhouse_instance_shards.instance_shards")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clickhouse_instance_shards.instance_shards")), }, }, }) diff --git a/tencentcloud/data_source_tc_clickhouse_spec.go b/tencentcloud/services/cdwch/data_source_tc_clickhouse_spec.go similarity index 96% rename from tencentcloud/data_source_tc_clickhouse_spec.go rename to tencentcloud/services/cdwch/data_source_tc_clickhouse_spec.go index 452f65d443..c42dccb55d 100644 --- a/tencentcloud/data_source_tc_clickhouse_spec.go +++ b/tencentcloud/services/cdwch/data_source_tc_clickhouse_spec.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdwch import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdwch "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClickhouseSpec() *schema.Resource { +func DataSourceTencentCloudClickhouseSpec() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClickhouseSpecRead, Schema: map[string]*schema.Schema{ @@ -322,12 +325,12 @@ func dataSourceTencentCloudClickhouseSpec() *schema.Resource { } func dataSourceTencentCloudClickhouseSpecRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clickhouse_spec.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clickhouse_spec.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("zone"); ok { @@ -342,13 +345,13 @@ func dataSourceTencentCloudClickhouseSpecRead(d *schema.ResourceData, meta inter paramMap["IsElastic"] = helper.Bool(v.(bool)) } - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var spec *cdwch.DescribeSpecResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClickhouseSpecByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } spec = result return nil @@ -598,7 +601,7 @@ func dataSourceTencentCloudClickhouseSpecRead(d *schema.ResourceData, meta inter output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clickhouse_spec_test.go b/tencentcloud/services/cdwch/data_source_tc_clickhouse_spec_test.go similarity index 59% rename from tencentcloud/data_source_tc_clickhouse_spec_test.go rename to tencentcloud/services/cdwch/data_source_tc_clickhouse_spec_test.go index 4aec9dc29b..7dea532e06 100644 --- a/tencentcloud/data_source_tc_clickhouse_spec_test.go +++ b/tencentcloud/services/cdwch/data_source_tc_clickhouse_spec_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdwch_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudClickhouseSpecDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClickhouseSpecDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clickhouse_spec.spec")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clickhouse_spec.spec")), }, }, }) diff --git a/tencentcloud/services/cdwch/extension_cdwch.go b/tencentcloud/services/cdwch/extension_cdwch.go new file mode 100644 index 0000000000..daa1a6fd9e --- /dev/null +++ b/tencentcloud/services/cdwch/extension_cdwch.go @@ -0,0 +1,61 @@ +package cdwch + +import cdwch "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" + +const ( + CDWCH_PAY_MODE_HOUR = "hour" + CDWCH_PAY_MODE_PREPAY = "prepay" +) + +const ( + CDWCH_CHARGE_TYPE_PREPAID = "PREPAID" + CDWCH_CHARGE_TYPE_POSTPAID_BY_HOUR = "POSTPAID_BY_HOUR" +) + +const ( + NODE_TYPE_CLICKHOUSE = "DATA" + NODE_TYPE_ZOOKEEPER = "COMMON" +) + +const ( + OPERATION_TYPE_CREATE = "create" + OPERATION_TYPE_UPDATE = "update" +) + +const ( + SCHEDULE_TYPE_DATA = "data" + SCHEDULE_TYPE_META = "meta" +) + +const ( + ACTION_ALTER_CK_USER_ADD_SYSTEM_USER = "AddSystemUser" + ACTION_ALTER_CK_USER_UPDATE_SYSTEM_USER = "UpdateSystemUser" +) + +const ( + DESCRIBE_CK_SQL_APIS_GET_SYSTEM_USERS = "GetSystemUsers" + DESCRIBE_CK_SQL_APIS_REVOKE_CLUSTER_USER = "RevokeClusterUser" + DESCRIBE_CK_SQL_APIS_DELETE_SYSTEM_USER = "DeleteSystemUser" +) + +var PAY_MODE_TO_CHARGE_TYPE = map[string]string{ + CDWCH_PAY_MODE_HOUR: CDWCH_CHARGE_TYPE_POSTPAID_BY_HOUR, + CDWCH_PAY_MODE_PREPAY: CDWCH_CHARGE_TYPE_PREPAID, +} + +type AccountInfo struct { + InstanceId string `json:"InstanceId"` + UserName string `json:"UserName"` + Describe string `json:"Describe"` + Type string `json:"Type"` + Cluster string `json:"Cluster"` +} + +type AccountPermission struct { + InstanceId string `json:"InstanceId"` + Cluster string `json:"Cluster"` + UserName string `json:"UserName"` + AllDatabase bool `json:"AllDatabase"` + GlobalPrivileges []string `json:"GlobalPrivileges"` + DatabasePrivilegeList []*cdwch.DatabasePrivilegeInfo `json:"DatabasePrivilegeList"` +} diff --git a/tencentcloud/services/cdwch/extension_tags.go b/tencentcloud/services/cdwch/extension_tags.go new file mode 100644 index 0000000000..be6a76c23a --- /dev/null +++ b/tencentcloud/services/cdwch/extension_tags.go @@ -0,0 +1,3 @@ +package cdwch + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/resource_tc_clickhouse_account.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_account.go similarity index 67% rename from tencentcloud/resource_tc_clickhouse_account.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_account.go index 59cff97e3b..d6dd79bb57 100644 --- a/tencentcloud/resource_tc_clickhouse_account.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_account.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdwch import ( "context" @@ -6,10 +6,12 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudClickhouseAccount() *schema.Resource { +func ResourceTencentCloudClickhouseAccount() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClickhouseAccountCreate, Read: resourceTencentCloudClickhouseAccountRead, @@ -45,11 +47,11 @@ func resourceTencentCloudClickhouseAccount() *schema.Resource { } func resourceTencentCloudClickhouseAccountCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_account.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_account.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instanceId := d.Get("instance_id").(string) userName := d.Get("user_name").(string) params := make(map[string]interface{}) @@ -59,24 +61,24 @@ func resourceTencentCloudClickhouseAccountCreate(d *schema.ResourceData, meta in if v, ok := d.GetOk("describe"); ok { params["describe"] = v.(string) } - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} err := service.ActionAlterCkUser(ctx, ACTION_ALTER_CK_USER_ADD_SYSTEM_USER, params) if err != nil { return err } - d.SetId(instanceId + FILED_SP + userName) + d.SetId(instanceId + tccommon.FILED_SP + userName) return resourceTencentCloudClickhouseAccountRead(d, meta) } func resourceTencentCloudClickhouseAccountRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_account.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_account.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("tencentcloud_clickhouse_account id is broken, id is %s", d.Id()) } @@ -99,13 +101,13 @@ func resourceTencentCloudClickhouseAccountRead(d *schema.ResourceData, meta inte } func resourceTencentCloudClickhouseAccountUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_account.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_account.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("tencentcloud_clickhouse_account id is broken, id is %s", d.Id()) } @@ -125,7 +127,7 @@ func resourceTencentCloudClickhouseAccountUpdate(d *schema.ResourceData, meta in if v, ok := d.GetOk("describe"); ok { params["describe"] = v.(string) } - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} err := service.ActionAlterCkUser(ctx, ACTION_ALTER_CK_USER_UPDATE_SYSTEM_USER, params) if err != nil { return err @@ -135,13 +137,13 @@ func resourceTencentCloudClickhouseAccountUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudClickhouseAccountDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_account.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_account.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("tencentcloud_clickhouse_account id is broken, id is %s", d.Id()) } diff --git a/tencentcloud/resource_tc_clickhouse_account_permission.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_account_permission.go similarity index 85% rename from tencentcloud/resource_tc_clickhouse_account_permission.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_account_permission.go index 1504bc9be1..4980423f9b 100644 --- a/tencentcloud/resource_tc_clickhouse_account_permission.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_account_permission.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdwch import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clickhouse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClickhouseAccountPermission() *schema.Resource { +func ResourceTencentCloudClickhouseAccountPermission() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClickhouseAccountPermissionCreate, Read: resourceTencentCloudClickhouseAccountPermissionRead, @@ -104,10 +107,10 @@ func resourceTencentCloudClickhouseAccountPermission() *schema.Resource { } func resourceTencentCloudClickhouseAccountPermissionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_account_permission.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_account_permission.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = clickhouse.NewModifyUserNewPrivilegeRequest() @@ -164,10 +167,10 @@ func resourceTencentCloudClickhouseAccountPermissionCreate(d *schema.ResourceDat } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwchClient().ModifyUserNewPrivilege(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwchClient().ModifyUserNewPrivilege(request) if e != nil { - return retryError(e) + 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()) } @@ -178,20 +181,20 @@ func resourceTencentCloudClickhouseAccountPermissionCreate(d *schema.ResourceDat return err } - d.SetId(instanceId + FILED_SP + cluster + FILED_SP + userName) + d.SetId(instanceId + tccommon.FILED_SP + cluster + tccommon.FILED_SP + userName) return resourceTencentCloudClickhouseAccountPermissionRead(d, meta) } func resourceTencentCloudClickhouseAccountPermissionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_account_permission.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_account_permission.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("tencentcloud_clickhouse_account id is broken, id is %s", d.Id()) } @@ -270,14 +273,14 @@ func resourceTencentCloudClickhouseAccountPermissionRead(d *schema.ResourceData, } func resourceTencentCloudClickhouseAccountPermissionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_account_permission.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_account_permission.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := clickhouse.NewModifyUserNewPrivilegeRequest() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("tencentcloud_clickhouse_account id is broken, id is %s", d.Id()) } @@ -342,10 +345,10 @@ func resourceTencentCloudClickhouseAccountPermissionUpdate(d *schema.ResourceDat } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwchClient().ModifyUserNewPrivilege(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwchClient().ModifyUserNewPrivilege(request) if e != nil { - return retryError(e) + 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()) } @@ -360,18 +363,18 @@ func resourceTencentCloudClickhouseAccountPermissionUpdate(d *schema.ResourceDat } func resourceTencentCloudClickhouseAccountPermissionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_account_permission.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_account_permission.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("tencentcloud_clickhouse_account id is broken, id is %s", d.Id()) } - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} err := service.DescribeCkSqlApis(ctx, idSplit[0], idSplit[1], idSplit[2], DESCRIBE_CK_SQL_APIS_REVOKE_CLUSTER_USER) if err != nil { return err diff --git a/tencentcloud/resource_tc_clickhouse_account_permission_test.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_account_permission_test.go similarity index 72% rename from tencentcloud/resource_tc_clickhouse_account_permission_test.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_account_permission_test.go index 87560937cd..1270e14bd5 100644 --- a/tencentcloud/resource_tc_clickhouse_account_permission_test.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_account_permission_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cdwch_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudClickhouseAccountPermissionResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClickhouseAccountPermission, @@ -25,7 +27,7 @@ func TestAccTencentCloudClickhouseAccountPermissionResource_basic(t *testing.T) }) } -const testAccClickhouseAccountPermission = DefaultClickhouseVariables + ` +const testAccClickhouseAccountPermission = tcacctest.DefaultClickhouseVariables + ` resource "tencentcloud_clickhouse_account_permission" "account_permission" { instance_id = var.instance_id diff --git a/tencentcloud/resource_tc_clickhouse_account_test.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_account_test.go similarity index 71% rename from tencentcloud/resource_tc_clickhouse_account_test.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_account_test.go index 5fba6293a4..8b6a81bab0 100644 --- a/tencentcloud/resource_tc_clickhouse_account_test.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_account_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cdwch_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudClickhouseAccountResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClickhouseAccount, @@ -26,7 +28,7 @@ func TestAccTencentCloudClickhouseAccountResource_basic(t *testing.T) { }) } -const testAccClickhouseAccount = DefaultClickhouseVariables + ` +const testAccClickhouseAccount = tcacctest.DefaultClickhouseVariables + ` resource "tencentcloud_clickhouse_account" "account" { instance_id = var.instance_id user_name = "test123" diff --git a/tencentcloud/resource_tc_clickhouse_backup.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_backup.go similarity index 71% rename from tencentcloud/resource_tc_clickhouse_backup.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_backup.go index 93c1f7a36f..69085b4009 100644 --- a/tencentcloud/resource_tc_clickhouse_backup.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_backup.go @@ -1,17 +1,20 @@ -package tencentcloud +package cdwch import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clickhouse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClickhouseBackup() *schema.Resource { +func ResourceTencentCloudClickhouseBackup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClickhouseBackupCreate, Read: resourceTencentCloudClickhouseBackupRead, @@ -37,10 +40,10 @@ func resourceTencentCloudClickhouseBackup() *schema.Resource { } func resourceTencentCloudClickhouseBackupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_backup.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_backup.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = clickhouse.NewOpenBackUpRequest() @@ -57,10 +60,10 @@ func resourceTencentCloudClickhouseBackupCreate(d *schema.ResourceData, meta int request.CosBucketName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwchClient().OpenBackUp(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwchClient().OpenBackUp(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -77,14 +80,14 @@ func resourceTencentCloudClickhouseBackupCreate(d *schema.ResourceData, meta int } func resourceTencentCloudClickhouseBackupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_backup.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_backup.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -109,8 +112,8 @@ func resourceTencentCloudClickhouseBackupRead(d *schema.ResourceData, meta inter } func resourceTencentCloudClickhouseBackupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_backup.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_backup.update")() + defer tccommon.InconsistentCheck(d, meta)() immutableArgs := []string{"instance_id", "operation_type", "cos_bucket_name"} @@ -123,20 +126,20 @@ func resourceTencentCloudClickhouseBackupUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudClickhouseBackupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_backup.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_backup.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) instanceId := d.Id() request := clickhouse.NewOpenBackUpRequest() request.InstanceId = helper.String(instanceId) request.OperationType = helper.String("close") request.CosBucketName = helper.String(d.Get("cos_bucket_name").(string)) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwchClient().OpenBackUp(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwchClient().OpenBackUp(request) if e != nil { - return retryError(e) + 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()) } diff --git a/tencentcloud/resource_tc_clickhouse_backup_strategy.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_backup_strategy.go similarity index 88% rename from tencentcloud/resource_tc_clickhouse_backup_strategy.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_backup_strategy.go index aeb05c2664..b69efa4f77 100644 --- a/tencentcloud/resource_tc_clickhouse_backup_strategy.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_backup_strategy.go @@ -1,14 +1,16 @@ -package tencentcloud +package cdwch import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudClickhouseBackupStrategy() *schema.Resource { +func ResourceTencentCloudClickhouseBackupStrategy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClickhouseBackupStrategyCreate, Read: resourceTencentCloudClickhouseBackupStrategyRead, @@ -134,14 +136,14 @@ func resourceTencentCloudClickhouseBackupStrategy() *schema.Resource { } func resourceTencentCloudClickhouseBackupStrategyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_backup_strategy.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_backup_strategy.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instanceId := d.Get("instance_id").(string) - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} backUpSchedule, err := service.DescribeBackUpScheduleById(ctx, instanceId) if err != nil { return err @@ -179,14 +181,14 @@ func resourceTencentCloudClickhouseBackupStrategyCreate(d *schema.ResourceData, } func resourceTencentCloudClickhouseBackupStrategyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_backup_strategy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_backup_strategy.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() _ = d.Set("instance_id", instanceId) @@ -261,11 +263,11 @@ func resourceTencentCloudClickhouseBackupStrategyRead(d *schema.ResourceData, me } func resourceTencentCloudClickhouseBackupStrategyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_backup_strategy.update")() - defer inconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_backup_strategy.update")() + defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() backUpSchedule, err := service.DescribeBackUpScheduleById(ctx, instanceId) @@ -339,8 +341,8 @@ func resourceTencentCloudClickhouseBackupStrategyUpdate(d *schema.ResourceData, } func resourceTencentCloudClickhouseBackupStrategyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_backup_strategy.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_backup_strategy.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_clickhouse_backup_strategy_test.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_backup_strategy_test.go similarity index 78% rename from tencentcloud/resource_tc_clickhouse_backup_strategy_test.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_backup_strategy_test.go index 0cb6f1ebe3..f401c6113e 100644 --- a/tencentcloud/resource_tc_clickhouse_backup_strategy_test.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_backup_strategy_test.go @@ -1,15 +1,17 @@ -package tencentcloud +package cdwch_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudClickhouseBackupStrategyResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClickhouseBackupStrategy, @@ -24,7 +26,7 @@ func TestAccTencentCloudClickhouseBackupStrategyResource_basic(t *testing.T) { }) } -const testAccClickhouseBackupStrategy = DefaultClickhouseVariables + ` +const testAccClickhouseBackupStrategy = tcacctest.DefaultClickhouseVariables + ` resource "tencentcloud_clickhouse_backup" "backup" { instance_id = var.instance_id cos_bucket_name = "keep-export-image-1308726196" diff --git a/tencentcloud/resource_tc_clickhouse_backup_test.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_backup_test.go similarity index 68% rename from tencentcloud/resource_tc_clickhouse_backup_test.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_backup_test.go index 5b782932a3..05119752f5 100644 --- a/tencentcloud/resource_tc_clickhouse_backup_test.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_backup_test.go @@ -1,15 +1,17 @@ -package tencentcloud +package cdwch_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudClickhouseBackupResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClickhouseBackup, @@ -24,7 +26,7 @@ func TestAccTencentCloudClickhouseBackupResource_basic(t *testing.T) { }) } -const testAccClickhouseBackup = DefaultClickhouseVariables + ` +const testAccClickhouseBackup = tcacctest.DefaultClickhouseVariables + ` resource "tencentcloud_clickhouse_backup" "backup" { instance_id = var.instance_id cos_bucket_name = "keep-export-image-1308726196" diff --git a/tencentcloud/resource_tc_clickhouse_delete_backup_data.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_delete_backup_data.go similarity index 70% rename from tencentcloud/resource_tc_clickhouse_delete_backup_data.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_delete_backup_data.go index 832bd81a76..ddca148d07 100644 --- a/tencentcloud/resource_tc_clickhouse_delete_backup_data.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_delete_backup_data.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdwch import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clickhouse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClickhouseDeleteBackupData() *schema.Resource { +func ResourceTencentCloudClickhouseDeleteBackupData() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClickhouseDeleteBackupDataCreate, Read: resourceTencentCloudClickhouseDeleteBackupDataRead, @@ -33,10 +36,10 @@ func resourceTencentCloudClickhouseDeleteBackupData() *schema.Resource { } func resourceTencentCloudClickhouseDeleteBackupDataCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_delete_backup_data.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_delete_backup_data.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = clickhouse.NewDeleteBackUpDataRequest() @@ -53,10 +56,10 @@ func resourceTencentCloudClickhouseDeleteBackupDataCreate(d *schema.ResourceData request.BackUpJobId = helper.IntInt64(backUpJobId) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwchClient().DeleteBackUpData(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwchClient().DeleteBackUpData(request) if e != nil { - return retryError(e) + 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()) } @@ -73,15 +76,15 @@ func resourceTencentCloudClickhouseDeleteBackupDataCreate(d *schema.ResourceData } func resourceTencentCloudClickhouseDeleteBackupDataRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_delete_backup_data.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_delete_backup_data.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudClickhouseDeleteBackupDataDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_delete_backup_data.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_delete_backup_data.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_clickhouse_instance.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_instance.go similarity index 82% rename from tencentcloud/resource_tc_clickhouse_instance.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_instance.go index b92c1e7bd9..cc934240c2 100644 --- a/tencentcloud/resource_tc_clickhouse_instance.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_instance.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdwch import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdwch "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClickhouseInstance() *schema.Resource { +func ResourceTencentCloudClickhouseInstance() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudClickhouseInstanceRead, Create: resourceTencentCloudClickhouseInstanceCreate, @@ -164,14 +167,14 @@ func resourceTencentCloudClickhouseInstance() *schema.Resource { } func resourceTencentCloudClickhouseInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -222,7 +225,7 @@ func resourceTencentCloudClickhouseInstanceRead(d *schema.ResourceData, meta int _ = d.Set("common_spec", []map[string]interface{}{commonSpec}) } - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "cdwch", "cdwchInstance", tcClient.Region, d.Id()) if err != nil { @@ -234,10 +237,10 @@ func resourceTencentCloudClickhouseInstanceRead(d *schema.ResourceData, meta int } func resourceTencentCloudClickhouseInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdwch_tmp_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cdwch_tmp_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cdwch.NewCreateInstanceNewRequest() @@ -324,10 +327,10 @@ func resourceTencentCloudClickhouseInstanceCreate(d *schema.ResourceData, meta i request.CommonSpec = &nodeSpec } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwchClient().CreateInstanceNew(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwchClient().CreateInstanceNew(request) if e != nil { - return retryError(e) + 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()) } @@ -339,13 +342,13 @@ func resourceTencentCloudClickhouseInstanceCreate(d *schema.ResourceData, meta i return err } instanceId = *response.Response.InstanceId - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - err = resource.Retry(10*writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(10*tccommon.WriteRetryTimeout, func() *resource.RetryError { instanceInfo, innerErr := service.DescribeInstance(ctx, instanceId) if innerErr != nil { - return retryError(innerErr) + return tccommon.RetryError(innerErr) } if *instanceInfo.Status != "Serving" { return resource.RetryableError(fmt.Errorf("Still creating")) @@ -357,8 +360,8 @@ func resourceTencentCloudClickhouseInstanceCreate(d *schema.ResourceData, meta i } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::cdwch:%s:uin/:cdwchInstance/%s", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -371,18 +374,18 @@ func resourceTencentCloudClickhouseInstanceCreate(d *schema.ResourceData, meta i } func resourceTencentCloudClickhouseInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("cdwch", "cdwchInstance", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("cdwch", "cdwchInstance", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -400,13 +403,13 @@ func resourceTencentCloudClickhouseInstanceUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudClickhouseInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() if d.Get("charge_type").(string) == "PREPAID" { @@ -414,10 +417,10 @@ func resourceTencentCloudClickhouseInstanceDelete(d *schema.ResourceData, meta i return err } - err := resource.Retry(5*writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(5*tccommon.WriteRetryTimeout, func() *resource.RetryError { instanceInfo, innerErr := service.DescribeInstance(ctx, instanceId) if innerErr != nil { - return retryError(innerErr) + return tccommon.RetryError(innerErr) } if *instanceInfo.Status != "Isolated" { return resource.RetryableError(fmt.Errorf("Still isolating")) @@ -432,10 +435,10 @@ func resourceTencentCloudClickhouseInstanceDelete(d *schema.ResourceData, meta i if err := service.DestroyInstance(ctx, instanceId); err != nil { return err } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { instancesList, innerErr := service.DescribeInstancesNew(ctx, instanceId) if innerErr != nil { - return retryError(innerErr) + return tccommon.RetryError(innerErr) } if len(instancesList) != 0 { return resource.RetryableError(fmt.Errorf("Still destroying")) diff --git a/tencentcloud/resource_tc_clickhouse_instance_test.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_instance_test.go similarity index 85% rename from tencentcloud/resource_tc_clickhouse_instance_test.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_instance_test.go index 98a9909801..335f54c1f0 100644 --- a/tencentcloud/resource_tc_clickhouse_instance_test.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_instance_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cdwch_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudClickhouseInstanceResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClickhouseInstanceBasic, @@ -29,8 +31,8 @@ func TestAccTencentCloudClickhouseInstanceResource_basic(t *testing.T) { func TestAccTencentCloudClickhouseInstanceResource_prepaid(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClickhouseInstancePrepaid, diff --git a/tencentcloud/resource_tc_clickhouse_keyval_config.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_keyval_config.go similarity index 68% rename from tencentcloud/resource_tc_clickhouse_keyval_config.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_keyval_config.go index a0518cb9dd..690b78a249 100644 --- a/tencentcloud/resource_tc_clickhouse_keyval_config.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_keyval_config.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdwch import ( "context" @@ -7,12 +7,14 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdwch "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" ) -func resourceTencentCloudClickhouseKeyvalConfig() *schema.Resource { +func ResourceTencentCloudClickhouseKeyvalConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClickhouseKeyvalConfigCreate, Read: resourceTencentCloudClickhouseKeyvalConfigRead, @@ -54,10 +56,10 @@ func resourceTencentCloudClickhouseKeyvalConfig() *schema.Resource { } func resourceTencentCloudClickhouseKeyvalConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_keyval_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_keyval_config.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cdwch.NewModifyInstanceKeyValConfigsRequest() @@ -87,10 +89,10 @@ func resourceTencentCloudClickhouseKeyvalConfigCreate(d *schema.ResourceData, me request.InstanceId = &instanceId request.AddItems = addItems - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwchClient().ModifyInstanceKeyValConfigs(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwchClient().ModifyInstanceKeyValConfigs(request) if e != nil { - return retryError(e) + 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()) } @@ -101,29 +103,29 @@ func resourceTencentCloudClickhouseKeyvalConfigCreate(d *schema.ResourceData, me return err } - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} - conf := BuildStateChangeConf([]string{}, []string{"Serving"}, 10*readRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId)) + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + conf := tccommon.BuildStateChangeConf([]string{}, []string{"Serving"}, 10*tccommon.ReadRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId)) if _, e := conf.WaitForState(); e != nil { return e } - d.SetId(strings.Join(ids, FILED_SP)) + d.SetId(strings.Join(ids, tccommon.FILED_SP)) return resourceTencentCloudClickhouseKeyvalConfigRead(d, meta) } func resourceTencentCloudClickhouseKeyvalConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_keyval_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_keyval_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -161,14 +163,14 @@ func resourceTencentCloudClickhouseKeyvalConfigRead(d *schema.ResourceData, meta } func resourceTencentCloudClickhouseKeyvalConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_keyval_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_keyval_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cdwch.NewModifyInstanceKeyValConfigsRequest() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -200,10 +202,10 @@ func resourceTencentCloudClickhouseKeyvalConfigUpdate(d *schema.ResourceData, me request.InstanceId = &instanceId request.UpdateItems = updateItems - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwchClient().ModifyInstanceKeyValConfigs(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwchClient().ModifyInstanceKeyValConfigs(request) if e != nil { - return retryError(e) + 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()) } @@ -214,27 +216,27 @@ func resourceTencentCloudClickhouseKeyvalConfigUpdate(d *schema.ResourceData, me return err } - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} - conf := BuildStateChangeConf([]string{}, []string{"Serving"}, 10*readRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId)) + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + conf := tccommon.BuildStateChangeConf([]string{}, []string{"Serving"}, 10*tccommon.ReadRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId)) if _, e := conf.WaitForState(); e != nil { return e } - d.SetId(strings.Join(ids, FILED_SP)) + d.SetId(strings.Join(ids, tccommon.FILED_SP)) return resourceTencentCloudClickhouseKeyvalConfigRead(d, meta) } func resourceTencentCloudClickhouseKeyvalConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_keyval_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_keyval_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cdwch.NewModifyInstanceKeyValConfigsRequest() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -251,10 +253,10 @@ func resourceTencentCloudClickhouseKeyvalConfigDelete(d *schema.ResourceData, me request.InstanceId = &instanceId request.DelItems = delItems - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwchClient().ModifyInstanceKeyValConfigs(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwchClient().ModifyInstanceKeyValConfigs(request) if e != nil { - return retryError(e) + 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()) } @@ -265,8 +267,8 @@ func resourceTencentCloudClickhouseKeyvalConfigDelete(d *schema.ResourceData, me return err } - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} - conf := BuildStateChangeConf([]string{}, []string{"Serving"}, 10*readRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId)) + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + conf := tccommon.BuildStateChangeConf([]string{}, []string{"Serving"}, 10*tccommon.ReadRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId)) if _, e := conf.WaitForState(); e != nil { return e diff --git a/tencentcloud/resource_tc_clickhouse_keyval_config_test.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_keyval_config_test.go similarity index 82% rename from tencentcloud/resource_tc_clickhouse_keyval_config_test.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_keyval_config_test.go index faca4ecbe0..7303139de3 100644 --- a/tencentcloud/resource_tc_clickhouse_keyval_config_test.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_keyval_config_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdwch_test import ( "context" @@ -6,18 +6,23 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" cdwch "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" + + localcdwch "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdwch" ) func TestAccTencentCloudClickhouseKeyvalConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClickhouseKeyvalConfigDestroy, Steps: []resource.TestStep{ { @@ -50,9 +55,9 @@ func TestAccTencentCloudClickhouseKeyvalConfigResource_basic(t *testing.T) { } func testAccCheckClickhouseKeyvalConfigDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CdwchService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localcdwch.NewCdwchService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_clickhouse_keyval_config" { continue @@ -61,7 +66,7 @@ func testAccCheckClickhouseKeyvalConfigDestroy(s *terraform.State) error { return fmt.Errorf("resource id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } diff --git a/tencentcloud/resource_tc_clickhouse_recover_backup_job.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_recover_backup_job.go similarity index 70% rename from tencentcloud/resource_tc_clickhouse_recover_backup_job.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_recover_backup_job.go index 98a05a4053..b04ab282a3 100644 --- a/tencentcloud/resource_tc_clickhouse_recover_backup_job.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_recover_backup_job.go @@ -1,15 +1,18 @@ -package tencentcloud +package cdwch import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clickhouse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClickhouseRecoverBackupJob() *schema.Resource { +func ResourceTencentCloudClickhouseRecoverBackupJob() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClickhouseRecoverBackupJobCreate, Read: resourceTencentCloudClickhouseRecoverBackupJobRead, @@ -33,10 +36,10 @@ func resourceTencentCloudClickhouseRecoverBackupJob() *schema.Resource { } func resourceTencentCloudClickhouseRecoverBackupJobCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_recover_backup_job.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_recover_backup_job.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = clickhouse.NewRecoverBackUpJobRequest() @@ -53,10 +56,10 @@ func resourceTencentCloudClickhouseRecoverBackupJobCreate(d *schema.ResourceData request.BackUpJobId = helper.IntInt64(backUpJobId) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwchClient().RecoverBackUpJob(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwchClient().RecoverBackUpJob(request) if e != nil { - return retryError(e) + 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()) } @@ -73,15 +76,15 @@ func resourceTencentCloudClickhouseRecoverBackupJobCreate(d *schema.ResourceData } func resourceTencentCloudClickhouseRecoverBackupJobRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_recover_backup_job.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_recover_backup_job.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudClickhouseRecoverBackupJobDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_recover_backup_job.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_recover_backup_job.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_clickhouse_xml_config.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_xml_config.go similarity index 75% rename from tencentcloud/resource_tc_clickhouse_xml_config.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_xml_config.go index 48c94016a8..cee4937386 100644 --- a/tencentcloud/resource_tc_clickhouse_xml_config.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_xml_config.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdwch import ( "context" @@ -7,12 +7,14 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdwch "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" ) -func resourceTencentCloudClickhouseXmlConfig() *schema.Resource { +func ResourceTencentCloudClickhouseXmlConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClickhouseXmlConfigCreate, Read: resourceTencentCloudClickhouseXmlConfigRead, @@ -59,8 +61,8 @@ func resourceTencentCloudClickhouseXmlConfig() *schema.Resource { } func resourceTencentCloudClickhouseXmlConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_xml_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_xml_config.create")() + defer tccommon.InconsistentCheck(d, meta)() var ids []string var instanceId string @@ -79,22 +81,22 @@ func resourceTencentCloudClickhouseXmlConfigCreate(d *schema.ResourceData, meta } } - d.SetId(strings.Join(ids, FILED_SP)) + d.SetId(strings.Join(ids, tccommon.FILED_SP)) return resourceTencentCloudClickhouseXmlConfigUpdate(d, meta) } func resourceTencentCloudClickhouseXmlConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_xml_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_xml_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -140,14 +142,14 @@ func resourceTencentCloudClickhouseXmlConfigRead(d *schema.ResourceData, meta in } func resourceTencentCloudClickhouseXmlConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_xml_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_xml_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cdwch.NewModifyClusterConfigsRequest() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -176,10 +178,10 @@ func resourceTencentCloudClickhouseXmlConfigUpdate(d *schema.ResourceData, meta request.ModifyConfContext = modifyConfContexts if len(modifyConfContexts) > 0 { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwchClient().ModifyClusterConfigs(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwchClient().ModifyClusterConfigs(request) if e != nil { - return retryError(e) + 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()) } @@ -191,8 +193,8 @@ func resourceTencentCloudClickhouseXmlConfigUpdate(d *schema.ResourceData, meta } } - service := CdwchService{client: meta.(*TencentCloudClient).apiV3Conn} - conf := BuildStateChangeConf([]string{}, []string{"Serving"}, 10*readRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId)) + service := CdwchService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + conf := tccommon.BuildStateChangeConf([]string{}, []string{"Serving"}, 10*tccommon.ReadRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId)) if _, e := conf.WaitForState(); e != nil { return e @@ -202,8 +204,8 @@ func resourceTencentCloudClickhouseXmlConfigUpdate(d *schema.ResourceData, meta } func resourceTencentCloudClickhouseXmlConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clickhouse_xml_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clickhouse_xml_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_clickhouse_xml_config_test.go b/tencentcloud/services/cdwch/resource_tc_clickhouse_xml_config_test.go similarity index 95% rename from tencentcloud/resource_tc_clickhouse_xml_config_test.go rename to tencentcloud/services/cdwch/resource_tc_clickhouse_xml_config_test.go index 9cf2f932cd..4e98fe3fb8 100644 --- a/tencentcloud/resource_tc_clickhouse_xml_config_test.go +++ b/tencentcloud/services/cdwch/resource_tc_clickhouse_xml_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cdwch_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudClickhouseXmlConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClickhouseXmlConfig, diff --git a/tencentcloud/services/cdwch/service_tencentcloud_cdwch.go b/tencentcloud/services/cdwch/service_tencentcloud_cdwch.go new file mode 100644 index 0000000000..4184c07d36 --- /dev/null +++ b/tencentcloud/services/cdwch/service_tencentcloud_cdwch.go @@ -0,0 +1,693 @@ +package cdwch + +import ( + "context" + "encoding/json" + "fmt" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + + cdwch "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" + clickhouse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +func NewCdwchService(client *connectivity.TencentCloudClient) CdwchService { + return CdwchService{client: client} +} + +type CdwchService struct { + client *connectivity.TencentCloudClient +} + +func (me *CdwchService) DescribeInstance(ctx context.Context, instanceId string) (InstanceInfo *cdwch.InstanceInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdwch.NewDescribeInstanceRequest() + request.IsOpenApi = helper.Bool(true) + request.InstanceId = &instanceId + + 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.UseCdwchClient().DescribeInstance(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()) + + InstanceInfo = response.Response.InstanceInfo + + return +} + +func (me *CdwchService) DestroyInstance(ctx context.Context, instanceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdwch.NewDestroyInstanceRequest() + request.InstanceId = &instanceId + + 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.UseCdwchClient().DestroyInstance(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()) + if response.Response.ErrorMsg != nil && *response.Response.ErrorMsg != "" { + errRet = fmt.Errorf(*response.Response.ErrorMsg) + } + return +} + +func (me *CdwchService) ResizeDisk(ctx context.Context, instanceId string, nodeType string, resizeDisk int) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdwch.NewResizeDiskRequest() + + 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()) + } + }() + request.InstanceId = &instanceId + request.Type = &nodeType + request.DiskSize = helper.IntInt64(resizeDisk) + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCdwchClient().ResizeDisk(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()) + + if response.Response.ErrorMsg != nil && *response.Response.ErrorMsg != "" { + errRet = fmt.Errorf(*response.Response.ErrorMsg) + } + return +} + +func (me *CdwchService) ScaleUpInstance(ctx context.Context, instanceId, nodeType, specName string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdwch.NewScaleUpInstanceRequest() + + 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()) + } + }() + request.InstanceId = &instanceId + request.ScaleUpEnableRolling = helper.Bool(true) + request.Type = &nodeType + request.SpecName = &specName + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCdwchClient().ScaleUpInstance(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()) + + if response.Response.ErrorMsg != nil && *response.Response.ErrorMsg != "" { + errRet = fmt.Errorf(*response.Response.ErrorMsg) + } + return +} + +func (me *CdwchService) ScaleOutInstance(ctx context.Context, instanceId string, nodeType string, scaleOutCluster string, nodeCount int, userSubnetIPNum int, shardIps []*string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdwch.NewScaleOutInstanceRequest() + + 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()) + } + }() + request.InstanceId = &instanceId + request.Type = &nodeType + request.NodeCount = helper.IntInt64(nodeCount) + request.ScaleOutCluster = &scaleOutCluster + request.UserSubnetIPNum = helper.IntInt64(userSubnetIPNum) + if shardIps != nil { + request.ReduceShardInfo = shardIps + } + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCdwchClient().ScaleOutInstance(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()) + if response.Response.ErrorMsg != nil && *response.Response.ErrorMsg != "" { + errRet = fmt.Errorf(*response.Response.ErrorMsg) + } + return +} + +func (me *CdwchService) DescribeInstanceClusters(ctx context.Context, instanceId string) (clusterInfos []*cdwch.ClusterInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdwch.NewDescribeInstanceClustersRequest() + request.InstanceId = &instanceId + + 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.UseCdwchClient().DescribeInstanceClusters(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()) + + clusterInfos = response.Response.Clusters + + return +} + +func (me *CdwchService) DescribeInstancesNew(ctx context.Context, instanceId string) (instancesList []*cdwch.InstanceInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdwch.NewDescribeInstancesNewRequest() + request.SearchInstanceId = &instanceId + + 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.UseCdwchClient().DescribeInstancesNew(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()) + + instancesList = response.Response.InstancesList + + return +} + +func (me *CdwchService) DescribeBackUpScheduleById(ctx context.Context, instanceId string) (backup *cdwch.DescribeBackUpScheduleResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdwch.NewDescribeBackUpScheduleRequest() + request.InstanceId = &instanceId + + 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.UseCdwchClient().DescribeBackUpSchedule(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()) + + backup = response.Response + return +} + +func (me *CdwchService) CreateBackUpSchedule(ctx context.Context, instanceId string, paramMap map[string]interface{}) error { + logId := tccommon.GetLogId(ctx) + + request := cdwch.NewCreateBackUpScheduleRequest() + request.InstanceId = &instanceId + for k, v := range paramMap { + if k == "schedule_id" { + value := v.(int64) + request.ScheduleId = helper.Int64(value) + } + if k == "operation_type" { + value := v.(string) + request.OperationType = helper.String(value) + } + if k == "schedule_type" { + value := v.(string) + request.ScheduleType = helper.String(value) + } + if k == "week_days" { + value := v.(string) + request.WeekDays = helper.String(value) + } + if k == "execute_hour" { + value := v.(int) + request.ExecuteHour = helper.IntInt64(value) + } + if k == "retain_days" { + value := v.(int) + request.RetainDays = helper.IntInt64(value) + } + if k == "back_up_tables" { + for _, item := range v.([]interface{}) { + dMap := item.(map[string]interface{}) + backupTableContent := cdwch.BackupTableContent{} + if v, ok := dMap["database"]; ok { + backupTableContent.Database = helper.String(v.(string)) + } + if v, ok := dMap["table"]; ok { + backupTableContent.Table = helper.String(v.(string)) + } + if v, ok := dMap["total_bytes"]; ok { + backupTableContent.TotalBytes = helper.IntInt64(v.(int)) + } + if v, ok := dMap["v_cluster"]; ok { + backupTableContent.VCluster = helper.String(v.(string)) + } + if v, ok := dMap["ips"]; ok { + backupTableContent.Ips = helper.String(v.(string)) + } + if v, ok := dMap["zoo_path"]; ok { + backupTableContent.ZooPath = helper.String(v.(string)) + } + if v, ok := dMap["rip"]; ok { + backupTableContent.Rip = helper.String(v.(string)) + } + request.BackUpTables = append(request.BackUpTables, &backupTableContent) + } + } + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, e := me.client.UseCdwchClient().CreateBackUpSchedule(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 create clickhouse backUpSchedule failed, reason:%+v", logId, err) + return err + } + + return nil +} + +func (me *CdwchService) DescribeClickhouseBackupJobsByFilter(ctx context.Context, param map[string]interface{}) (backupJobs []*clickhouse.BackUpJobDisplay, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdwch.NewDescribeBackUpJobRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "instance_id" { + request.InstanceId = v.(*string) + } + if k == "begin_time" { + request.BeginTime = v.(*string) + } + if k == "end_time" { + request.EndTime = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.PageNum = &offset + request.PageSize = &limit + response, err := me.client.UseCdwchClient().DescribeBackUpJob(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()) + + if response == nil || len(response.Response.BackUpJobs) < 1 { + break + } + backupJobs = append(backupJobs, response.Response.BackUpJobs...) + if len(response.Response.BackUpJobs) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *CdwchService) DescribeClickhouseAccountByUserName(ctx context.Context, instanceId, userName string) (accounts []*AccountInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := clickhouse.NewDescribeCkSqlApisRequest() + request.InstanceId = helper.String(instanceId) + request.UserName = helper.String(userName) + request.ApiType = helper.String(DESCRIBE_CK_SQL_APIS_GET_SYSTEM_USERS) + + 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.UseCdwchClient().DescribeCkSqlApis(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()) + + if response.Response == nil || response.Response.ReturnData == nil { + errRet = fmt.Errorf("DescribeCkSqlApis response is null") + return + } + accounts = make([]*AccountInfo, 0) + err = json.Unmarshal([]byte(*response.Response.ReturnData), &accounts) + if err != nil { + errRet = err + return + } + return +} + +func (me *CdwchService) DescribeCkSqlApis(ctx context.Context, instanceId, cluster, userName, apiType string) error { + logId := tccommon.GetLogId(ctx) + + request := clickhouse.NewDescribeCkSqlApisRequest() + request.InstanceId = helper.String(instanceId) + request.UserName = helper.String(userName) + request.ApiType = helper.String(apiType) + if cluster != "" { + request.Cluster = helper.String(cluster) + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCdwchClient().DescribeCkSqlApis(request) + if err != nil { + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CdwchService) ActionAlterCkUser(ctx context.Context, apiType string, userInfo map[string]interface{}) error { + logId := tccommon.GetLogId(ctx) + + request := clickhouse.NewActionAlterCkUserRequest() + ckUserAlterInfo := clickhouse.CkUserAlterInfo{} + if v, ok := userInfo["instance_id"]; ok { + ckUserAlterInfo.InstanceId = helper.String(v.(string)) + } + if v, ok := userInfo["user_name"]; ok { + ckUserAlterInfo.UserName = helper.String(v.(string)) + } + if v, ok := userInfo["password"]; ok { + ckUserAlterInfo.PassWord = helper.String(v.(string)) + } + if v, ok := userInfo["describe"]; ok { + ckUserAlterInfo.Describe = helper.String(v.(string)) + } + + request.UserInfo = &ckUserAlterInfo + request.ApiType = helper.String(apiType) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseCdwchClient().ActionAlterCkUser(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 operate clickhouse account failed, reason:%+v", logId, err) + return err + } + return nil +} + +func (me *CdwchService) DescribeCdwchAccountPermission(ctx context.Context, instanceId, cluster, username string) (userNewPrivilege *cdwch.ModifyUserNewPrivilegeRequestParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdwch.NewDescribeCkSqlApisRequest() + request.InstanceId = &instanceId + request.Cluster = &cluster + request.UserName = &username + request.ApiType = helper.String("GetUserClusterNewPrivileges") + + 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.UseCdwchClient().DescribeCkSqlApis(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()) + + if response.Response == nil || response.Response.ReturnData == nil { + errRet = fmt.Errorf("DescribeCkSqlApis response is null") + return + } + returnDate := *response.Response.ReturnData + userNewPrivilege = &cdwch.ModifyUserNewPrivilegeRequestParams{} + err = json.Unmarshal([]byte(returnDate), userNewPrivilege) + if err != nil { + errRet = err + return + } + return +} + +func (me *CdwchService) DescribeClickhouseBackupTablesByFilter(ctx context.Context, instanceId string) (backupTables []*clickhouse.BackupTableContent, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdwch.NewDescribeBackUpTablesRequest() + ) + + 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()) + } + }() + + request.InstanceId = &instanceId + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCdwchClient().DescribeBackUpTables(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()) + + if response.Response != nil { + backupTables = response.Response.AvailableTables + } + + return +} + +func (me *CdwchService) DescribeClickhouseKeyvalConfigById(ctx context.Context, instanceId string) (config []*cdwch.InstanceConfigInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdwch.NewDescribeInstanceKeyValConfigsRequest() + request.InstanceId = &instanceId + + 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.UseCdwchClient().DescribeInstanceKeyValConfigs(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()) + + if response == nil || len(response.Response.ConfigItems) < 1 { + return + } + + config = response.Response.ConfigItems + return +} + +func (me *CdwchService) DescribeClickhouseXmlConfigById(ctx context.Context, instanceId string) (xmlConfig []*cdwch.ClusterConfigsInfoFromEMR, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdwch.NewDescribeClusterConfigsRequest() + request.InstanceId = &instanceId + + 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.UseCdwchClient().DescribeClusterConfigs(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()) + + if response == nil || len(response.Response.ClusterConfList) < 1 { + return + } + + xmlConfig = response.Response.ClusterConfList + return +} + +func (me *CdwchService) InstanceStateRefreshFunc(instanceId string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + request := cdwch.NewDescribeInstanceStateRequest() + request.InstanceId = &instanceId + ratelimit.Check(request.GetAction()) + object, err := me.client.UseCdwchClient().DescribeInstanceState(request) + + if err != nil { + return nil, "", err + } + if object == nil || object.Response == nil || object.Response.InstanceState == nil { + return nil, "", nil + } + + return object, *object.Response.InstanceState, nil + } +} + +func (me *CdwchService) DescribeClickhouseSpecByFilter(ctx context.Context, param map[string]interface{}) (spec *cdwch.DescribeSpecResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdwch.NewDescribeSpecRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Zone" { + request.Zone = v.(*string) + } + if k == "PayMode" { + request.PayMode = v.(*string) + } + if k == "IsElastic" { + request.IsElastic = v.(*bool) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCdwchClient().DescribeSpec(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()) + + if response == nil || response.Response == nil { + return + } + + spec = response.Response + return +} + +func (me *CdwchService) DescribeClickhouseInstanceShardsByFilter(ctx context.Context, param map[string]interface{}) (instanceShards *cdwch.DescribeInstanceShardsResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdwch.NewDescribeInstanceShardsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCdwchClient().DescribeInstanceShards(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()) + + if response == nil || response.Response == nil { + return + } + + instanceShards = response.Response + return +} diff --git a/tencentcloud/services/cdwch/service_tencentcloud_tag.go b/tencentcloud/services/cdwch/service_tencentcloud_tag.go new file mode 100644 index 0000000000..2f96e6ff1e --- /dev/null +++ b/tencentcloud/services/cdwch/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package cdwch + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 e5c92b031a08b5bcf7ad14bd34e21cfd64e35698 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 11:28:57 +0800 Subject: [PATCH 10/31] refactor: migrate package tencentcloud/services/cdwpg --- tencentcloud/provider.go | 3 +- tencentcloud/services/cdwpg/extension_tags.go | 3 + .../cdwpg}/resource_tc_cdwpg_instance.go | 75 ++-- .../cdwpg}/resource_tc_cdwpg_instance_test.go | 8 +- .../cdwpg/service_tencentcloud_cdwpg.go | 89 ++++ .../cdwpg/service_tencentcloud_tag.go | 415 ++++++++++++++++++ 6 files changed, 553 insertions(+), 40 deletions(-) create mode 100644 tencentcloud/services/cdwpg/extension_tags.go rename tencentcloud/{ => services/cdwpg}/resource_tc_cdwpg_instance.go (80%) rename tencentcloud/{ => services/cdwpg}/resource_tc_cdwpg_instance_test.go (93%) create mode 100644 tencentcloud/services/cdwpg/service_tencentcloud_cdwpg.go create mode 100644 tencentcloud/services/cdwpg/service_tencentcloud_tag.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 3658f95855..1355cf9155 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdwpg" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdwch" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdn" "encoding/json" @@ -1858,7 +1859,7 @@ func Provider() *schema.Provider { "tencentcloud_bi_datasource_cloud": bi.ResourceTencentCloudBiDatasourceCloud(), "tencentcloud_bi_embed_token_apply": bi.ResourceTencentCloudBiEmbedTokenApply(), "tencentcloud_bi_embed_interval_apply": bi.ResourceTencentCloudBiEmbedIntervalApply(), - "tencentcloud_cdwpg_instance": resourceTencentCloudCdwpgInstance(), + "tencentcloud_cdwpg_instance": cdwpg.ResourceTencentCloudCdwpgInstance(), "tencentcloud_clickhouse_keyval_config": cdwch.ResourceTencentCloudClickhouseKeyvalConfig(), "tencentcloud_clickhouse_xml_config": cdwch.ResourceTencentCloudClickhouseXmlConfig(), "tencentcloud_clb_target_group_attachments": resourceTencentCloudClbTargetGroupAttachments(), diff --git a/tencentcloud/services/cdwpg/extension_tags.go b/tencentcloud/services/cdwpg/extension_tags.go new file mode 100644 index 0000000000..d5e34473ea --- /dev/null +++ b/tencentcloud/services/cdwpg/extension_tags.go @@ -0,0 +1,3 @@ +package cdwpg + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/resource_tc_cdwpg_instance.go b/tencentcloud/services/cdwpg/resource_tc_cdwpg_instance.go similarity index 80% rename from tencentcloud/resource_tc_cdwpg_instance.go rename to tencentcloud/services/cdwpg/resource_tc_cdwpg_instance.go index 48ae38872a..a95365133b 100644 --- a/tencentcloud/resource_tc_cdwpg_instance.go +++ b/tencentcloud/services/cdwpg/resource_tc_cdwpg_instance.go @@ -1,4 +1,4 @@ -package tencentcloud +package cdwpg import ( "context" @@ -6,13 +6,16 @@ import ( "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cdwpg "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwpg/v20201230" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCdwpgInstance() *schema.Resource { +func ResourceTencentCloudCdwpgInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCdwpgInstanceCreate, Read: resourceTencentCloudCdwpgInstanceRead, @@ -144,10 +147,10 @@ func resourceTencentCloudCdwpgInstance() *schema.Resource { } func resourceTencentCloudCdwpgInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdwpg_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cdwpg.NewCreateInstanceByApiRequest() @@ -221,10 +224,10 @@ func resourceTencentCloudCdwpgInstanceCreate(d *schema.ResourceData, meta interf } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwpgClient().CreateInstanceByApi(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwpgClient().CreateInstanceByApi(request) if e != nil { - return retryError(e) + 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()) } @@ -237,8 +240,8 @@ func resourceTencentCloudCdwpgInstanceCreate(d *schema.ResourceData, meta interf } instanceId = *response.Response.InstanceId - service := CdwpgService{client: meta.(*TencentCloudClient).apiV3Conn} - conf := BuildStateChangeConf([]string{}, []string{"Serving"}, 10*readRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId, []string{})) + service := CdwpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + conf := tccommon.BuildStateChangeConf([]string{}, []string{"Serving"}, 10*tccommon.ReadRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId, []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -246,10 +249,10 @@ func resourceTencentCloudCdwpgInstanceCreate(d *schema.ResourceData, meta interf d.SetId(instanceId) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::cdwpg:%s:uin/:cdwpgInstance/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -260,14 +263,14 @@ func resourceTencentCloudCdwpgInstanceCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudCdwpgInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdwpg_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CdwpgService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -362,7 +365,7 @@ func resourceTencentCloudCdwpgInstanceRead(d *schema.ResourceData, meta interfac } - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "cdwpg", "cdwpgInstance", tcClient.Region, d.Id()) if err != nil { @@ -374,10 +377,10 @@ func resourceTencentCloudCdwpgInstanceRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudCdwpgInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdwpg_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cdwpg.NewModifyInstanceRequest() @@ -399,10 +402,10 @@ func resourceTencentCloudCdwpgInstanceUpdate(d *schema.ResourceData, meta interf } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCdwpgClient().ModifyInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwpgClient().ModifyInstance(request) if e != nil { - return retryError(e) + 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()) } @@ -413,20 +416,20 @@ func resourceTencentCloudCdwpgInstanceUpdate(d *schema.ResourceData, meta interf return err } - service := CdwpgService{client: meta.(*TencentCloudClient).apiV3Conn} - conf := BuildStateChangeConf([]string{}, []string{"Serving"}, 10*readRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId, []string{})) + service := CdwpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + conf := tccommon.BuildStateChangeConf([]string{}, []string{"Serving"}, 10*tccommon.ReadRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId, []string{})) if _, e := conf.WaitForState(); e != nil { return e } if d.HasChange("tags") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("cdwpg", "cdwpgInstance", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("cdwpg", "cdwpgInstance", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -436,20 +439,20 @@ func resourceTencentCloudCdwpgInstanceUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudCdwpgInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cdwpg_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CdwpgService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CdwpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() if err := service.DeleteCdwpgInstanceById(ctx, instanceId); err != nil { return err } - conf := BuildStateChangeConf([]string{}, []string{"Deleted"}, 10*readRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId, []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"Deleted"}, 10*tccommon.ReadRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId, []string{})) if _, e := conf.WaitForState(); e != nil { return e diff --git a/tencentcloud/resource_tc_cdwpg_instance_test.go b/tencentcloud/services/cdwpg/resource_tc_cdwpg_instance_test.go similarity index 93% rename from tencentcloud/resource_tc_cdwpg_instance_test.go rename to tencentcloud/services/cdwpg/resource_tc_cdwpg_instance_test.go index 28195cfcad..26a0754ad8 100644 --- a/tencentcloud/resource_tc_cdwpg_instance_test.go +++ b/tencentcloud/services/cdwpg/resource_tc_cdwpg_instance_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cdwpg_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCdwpgInstanceResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCdwpgInstance, diff --git a/tencentcloud/services/cdwpg/service_tencentcloud_cdwpg.go b/tencentcloud/services/cdwpg/service_tencentcloud_cdwpg.go new file mode 100644 index 0000000000..c3472d99d7 --- /dev/null +++ b/tencentcloud/services/cdwpg/service_tencentcloud_cdwpg.go @@ -0,0 +1,89 @@ +package cdwpg + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + cdwpg "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwpg/v20201230" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +type CdwpgService struct { + client *connectivity.TencentCloudClient +} + +func (me *CdwpgService) DescribeCdwpgInstanceById(ctx context.Context, instanceId string) (instance *cdwpg.SimpleInstanceInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdwpg.NewDescribeInstanceInfoRequest() + request.InstanceId = &instanceId + + 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.UseCdwpgClient().DescribeInstanceInfo(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()) + + if response == nil { + return + } + + instance = response.Response.SimpleInstanceInfo + return +} + +func (me *CdwpgService) DeleteCdwpgInstanceById(ctx context.Context, instanceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdwpg.NewDestroyInstanceByApiRequest() + request.InstanceId = &instanceId + + 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.UseCdwpgClient().DestroyInstanceByApi(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 +} + +func (me *CdwpgService) InstanceStateRefreshFunc(instanceId string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + request := cdwpg.NewDescribeInstanceStateRequest() + request.InstanceId = &instanceId + ratelimit.Check(request.GetAction()) + object, err := me.client.UseCdwpgClient().DescribeInstanceState(request) + + if err != nil { + return nil, "", err + } + if object == nil || object.Response == nil || object.Response.InstanceState == nil { + return nil, "", nil + } + + return object, *object.Response.InstanceState, nil + } +} diff --git a/tencentcloud/services/cdwpg/service_tencentcloud_tag.go b/tencentcloud/services/cdwpg/service_tencentcloud_tag.go new file mode 100644 index 0000000000..5aed0895da --- /dev/null +++ b/tencentcloud/services/cdwpg/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package cdwpg + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 9cfd6e9c77c4502706b2d141a0331b2e3ad67095 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 11:33:12 +0800 Subject: [PATCH 11/31] refactor: migrate package tencentcloud/services/cfs --- tencentcloud/provider.go | 27 +- .../cfs}/data_source_tc_cfs_access_groups.go | 21 +- .../data_source_tc_cfs_access_groups_test.go | 10 +- .../cfs}/data_source_tc_cfs_access_rules.go | 21 +- .../data_source_tc_cfs_access_rules_test.go | 10 +- .../cfs}/data_source_tc_cfs_available_zone.go | 27 +- .../data_source_tc_cfs_available_zone_test.go | 10 +- .../data_source_tc_cfs_file_system_clients.go | 22 +- ..._source_tc_cfs_file_system_clients_test.go | 10 +- .../cfs}/data_source_tc_cfs_file_systems.go | 21 +- .../data_source_tc_cfs_file_systems_test.go | 10 +- .../cfs}/data_source_tc_cfs_mount_targets.go | 22 +- .../data_source_tc_cfs_mount_targets_test.go | 10 +- tencentcloud/services/cfs/extension_cfs.go | 59 ++ tencentcloud/services/cfs/extension_tags.go | 3 + .../cfs}/resource_tc_cfs_access_group.go | 59 +- .../cfs}/resource_tc_cfs_access_group_test.go | 51 +- .../cfs}/resource_tc_cfs_access_rule.go | 59 +- .../cfs}/resource_tc_cfs_access_rule_test.go | 36 +- .../resource_tc_cfs_auto_snapshot_policy.go | 51 +- ..._tc_cfs_auto_snapshot_policy_attachment.go | 45 +- ...fs_auto_snapshot_policy_attachment_test.go | 8 +- ...source_tc_cfs_auto_snapshot_policy_test.go | 8 +- .../cfs}/resource_tc_cfs_file_system.go | 87 +-- .../cfs}/resource_tc_cfs_file_system_test.go | 50 +- .../resource_tc_cfs_sign_up_cfs_service.go | 34 +- ...esource_tc_cfs_sign_up_cfs_service_test.go | 8 +- .../cfs}/resource_tc_cfs_snapshot.go | 73 +- .../cfs}/resource_tc_cfs_snapshot_test.go | 8 +- .../services/cfs/service_tencentcloud_cfs.go | 660 ++++++++++++++++++ .../services/cfs/service_tencentcloud_tag.go | 415 +++++++++++ 31 files changed, 1565 insertions(+), 370 deletions(-) rename tencentcloud/{ => services/cfs}/data_source_tc_cfs_access_groups.go (82%) rename tencentcloud/{ => services/cfs}/data_source_tc_cfs_access_groups_test.go (85%) rename tencentcloud/{ => services/cfs}/data_source_tc_cfs_access_rules.go (83%) rename tencentcloud/{ => services/cfs}/data_source_tc_cfs_access_rules_test.go (82%) rename tencentcloud/{ => services/cfs}/data_source_tc_cfs_available_zone.go (89%) rename tencentcloud/{ => services/cfs}/data_source_tc_cfs_available_zone_test.go (58%) rename tencentcloud/{ => services/cfs}/data_source_tc_cfs_file_system_clients.go (82%) rename tencentcloud/{ => services/cfs}/data_source_tc_cfs_file_system_clients_test.go (60%) rename tencentcloud/{ => services/cfs}/data_source_tc_cfs_file_systems.go (89%) rename tencentcloud/{ => services/cfs}/data_source_tc_cfs_file_systems_test.go (89%) rename tencentcloud/{ => services/cfs}/data_source_tc_cfs_mount_targets.go (86%) rename tencentcloud/{ => services/cfs}/data_source_tc_cfs_mount_targets_test.go (59%) create mode 100644 tencentcloud/services/cfs/extension_cfs.go create mode 100644 tencentcloud/services/cfs/extension_tags.go rename tencentcloud/{ => services/cfs}/resource_tc_cfs_access_group.go (66%) rename tencentcloud/{ => services/cfs}/resource_tc_cfs_access_group_test.go (71%) rename tencentcloud/{ => services/cfs}/resource_tc_cfs_access_rule.go (75%) rename tencentcloud/{ => services/cfs}/resource_tc_cfs_access_rule_test.go (67%) rename tencentcloud/{ => services/cfs}/resource_tc_cfs_auto_snapshot_policy.go (77%) rename tencentcloud/{ => services/cfs}/resource_tc_cfs_auto_snapshot_policy_attachment.go (69%) rename tencentcloud/{ => services/cfs}/resource_tc_cfs_auto_snapshot_policy_attachment_test.go (84%) rename tencentcloud/{ => services/cfs}/resource_tc_cfs_auto_snapshot_policy_test.go (82%) rename tencentcloud/{ => services/cfs}/resource_tc_cfs_file_system.go (77%) rename tencentcloud/{ => services/cfs}/resource_tc_cfs_file_system_test.go (77%) rename tencentcloud/{ => services/cfs}/resource_tc_cfs_sign_up_cfs_service.go (67%) rename tencentcloud/{ => services/cfs}/resource_tc_cfs_sign_up_cfs_service_test.go (80%) rename tencentcloud/{ => services/cfs}/resource_tc_cfs_snapshot.go (66%) rename tencentcloud/{ => services/cfs}/resource_tc_cfs_snapshot_test.go (80%) create mode 100644 tencentcloud/services/cfs/service_tencentcloud_cfs.go create mode 100644 tencentcloud/services/cfs/service_tencentcloud_tag.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 1355cf9155..98013bbcaa 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cfs" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdwpg" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdwch" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdn" @@ -299,12 +300,12 @@ func Provider() *schema.Provider { "tencentcloud_cos_batchs": dataSourceTencentCloudCosBatchs(), "tencentcloud_cos_bucket_inventorys": dataSourceTencentCloudCosBucketInventorys(), "tencentcloud_cos_bucket_multipart_uploads": dataSourceTencentCloudCosBucketMultipartUploads(), - "tencentcloud_cfs_file_systems": dataSourceTencentCloudCfsFileSystems(), - "tencentcloud_cfs_access_groups": dataSourceTencentCloudCfsAccessGroups(), - "tencentcloud_cfs_access_rules": dataSourceTencentCloudCfsAccessRules(), - "tencentcloud_cfs_mount_targets": dataSourceTencentCloudCfsMountTargets(), - "tencentcloud_cfs_file_system_clients": dataSourceTencentCloudCfsFileSystemClients(), - "tencentcloud_cfs_available_zone": dataSourceTencentCloudCfsAvailableZone(), + "tencentcloud_cfs_file_systems": cfs.DataSourceTencentCloudCfsFileSystems(), + "tencentcloud_cfs_access_groups": cfs.DataSourceTencentCloudCfsAccessGroups(), + "tencentcloud_cfs_access_rules": cfs.DataSourceTencentCloudCfsAccessRules(), + "tencentcloud_cfs_mount_targets": cfs.DataSourceTencentCloudCfsMountTargets(), + "tencentcloud_cfs_file_system_clients": cfs.DataSourceTencentCloudCfsFileSystemClients(), + "tencentcloud_cfs_available_zone": cfs.DataSourceTencentCloudCfsAvailableZone(), "tencentcloud_redis_zone_config": dataSourceTencentRedisZoneConfig(), "tencentcloud_redis_instances": dataSourceTencentRedisInstances(), "tencentcloud_redis_backup": dataSourceTencentCloudRedisBackup(), @@ -1076,14 +1077,14 @@ func Provider() *schema.Provider { "tencentcloud_cos_bucket_object": resourceTencentCloudCosBucketObject(), "tencentcloud_cos_bucket_referer": resourceTencentCloudCosBucketReferer(), "tencentcloud_cos_bucket_version": resourceTencentCloudCosBucketVersion(), - "tencentcloud_cfs_file_system": resourceTencentCloudCfsFileSystem(), - "tencentcloud_cfs_access_group": resourceTencentCloudCfsAccessGroup(), - "tencentcloud_cfs_access_rule": resourceTencentCloudCfsAccessRule(), - "tencentcloud_cfs_auto_snapshot_policy": resourceTencentCloudCfsAutoSnapshotPolicy(), - "tencentcloud_cfs_auto_snapshot_policy_attachment": resourceTencentCloudCfsAutoSnapshotPolicyAttachment(), - "tencentcloud_cfs_snapshot": resourceTencentCloudCfsSnapshot(), + "tencentcloud_cfs_file_system": cfs.ResourceTencentCloudCfsFileSystem(), + "tencentcloud_cfs_access_group": cfs.ResourceTencentCloudCfsAccessGroup(), + "tencentcloud_cfs_access_rule": cfs.ResourceTencentCloudCfsAccessRule(), + "tencentcloud_cfs_auto_snapshot_policy": cfs.ResourceTencentCloudCfsAutoSnapshotPolicy(), + "tencentcloud_cfs_auto_snapshot_policy_attachment": cfs.ResourceTencentCloudCfsAutoSnapshotPolicyAttachment(), + "tencentcloud_cfs_snapshot": cfs.ResourceTencentCloudCfsSnapshot(), "tencentcloud_cfs_user_quota": resourceTencentCloudCfsUserQuota(), - "tencentcloud_cfs_sign_up_cfs_service": resourceTencentCloudCfsSignUpCfsService(), + "tencentcloud_cfs_sign_up_cfs_service": cfs.ResourceTencentCloudCfsSignUpCfsService(), "tencentcloud_redis_instance": resourceTencentCloudRedisInstance(), "tencentcloud_redis_backup_config": resourceTencentCloudRedisBackupConfig(), "tencentcloud_redis_account": resourceTencentCloudRedisAccount(), diff --git a/tencentcloud/data_source_tc_cfs_access_groups.go b/tencentcloud/services/cfs/data_source_tc_cfs_access_groups.go similarity index 82% rename from tencentcloud/data_source_tc_cfs_access_groups.go rename to tencentcloud/services/cfs/data_source_tc_cfs_access_groups.go index 79995220ca..1e6ffdb5b1 100644 --- a/tencentcloud/data_source_tc_cfs_access_groups.go +++ b/tencentcloud/services/cfs/data_source_tc_cfs_access_groups.go @@ -1,16 +1,19 @@ -package tencentcloud +package cfs import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCfsAccessGroups() *schema.Resource { +func DataSourceTencentCloudCfsAccessGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCfsAccessGroupsRead, @@ -65,11 +68,11 @@ func dataSourceTencentCloudCfsAccessGroups() *schema.Resource { } func dataSourceTencentCloudCfsAccessGroupsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cfs_access_groups.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_cfs_access_groups.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cfsService := CfsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var accessGroupId string @@ -83,10 +86,10 @@ func dataSourceTencentCloudCfsAccessGroupsRead(d *schema.ResourceData, meta inte var accessGroups []*cfs.PGroupInfo var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { accessGroups, errRet = cfsService.DescribeAccessGroup(ctx, accessGroupId, name) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -115,7 +118,7 @@ func dataSourceTencentCloudCfsAccessGroupsRead(d *schema.ResourceData, meta inte } output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), accessGroupList); err != nil { + if err := tccommon.WriteToFile(output.(string), accessGroupList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_cfs_access_groups_test.go b/tencentcloud/services/cfs/data_source_tc_cfs_access_groups_test.go similarity index 85% rename from tencentcloud/data_source_tc_cfs_access_groups_test.go rename to tencentcloud/services/cfs/data_source_tc_cfs_access_groups_test.go index 286e7df30c..d68787d7d8 100644 --- a/tencentcloud/data_source_tc_cfs_access_groups_test.go +++ b/tencentcloud/services/cfs/data_source_tc_cfs_access_groups_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCfsAccessGroupsDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCfsAccessGroupDestroy, Steps: []resource.TestStep{ { @@ -27,7 +29,7 @@ func TestAccTencentCloudCfsAccessGroupsDataSource(t *testing.T) { }) } -const defaultCfsAccessGroup = ` +const DefaultCfsAccessGroup = ` data "tencentcloud_cfs_access_groups" "access_groups" { name = "keep_access_group" } diff --git a/tencentcloud/data_source_tc_cfs_access_rules.go b/tencentcloud/services/cfs/data_source_tc_cfs_access_rules.go similarity index 83% rename from tencentcloud/data_source_tc_cfs_access_rules.go rename to tencentcloud/services/cfs/data_source_tc_cfs_access_rules.go index 76e0a49f7e..3e98a56d9c 100644 --- a/tencentcloud/data_source_tc_cfs_access_rules.go +++ b/tencentcloud/services/cfs/data_source_tc_cfs_access_rules.go @@ -1,16 +1,19 @@ -package tencentcloud +package cfs import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCfsAccessRules() *schema.Resource { +func DataSourceTencentCloudCfsAccessRules() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCfsAccessRulesRead, @@ -70,11 +73,11 @@ func dataSourceTencentCloudCfsAccessRules() *schema.Resource { } func dataSourceTencentCloudCfsAccessRulesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cfs_access_rules.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_cfs_access_rules.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cfsService := CfsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var accessRuleId string @@ -85,10 +88,10 @@ func dataSourceTencentCloudCfsAccessRulesRead(d *schema.ResourceData, meta inter var accessRules []*cfs.PGroupRuleInfo var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { accessRules, errRet = cfsService.DescribeAccessRule(ctx, accessGroupId, accessRuleId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -118,7 +121,7 @@ func dataSourceTencentCloudCfsAccessRulesRead(d *schema.ResourceData, meta inter } output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), accessRuleList); err != nil { + if err := tccommon.WriteToFile(output.(string), accessRuleList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_cfs_access_rules_test.go b/tencentcloud/services/cfs/data_source_tc_cfs_access_rules_test.go similarity index 82% rename from tencentcloud/data_source_tc_cfs_access_rules_test.go rename to tencentcloud/services/cfs/data_source_tc_cfs_access_rules_test.go index 866524cf71..ed79576b12 100644 --- a/tencentcloud/data_source_tc_cfs_access_rules_test.go +++ b/tencentcloud/services/cfs/data_source_tc_cfs_access_rules_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCfsAccessRulesDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCfsAccessRuleDestroy, Steps: []resource.TestStep{ { @@ -27,7 +29,7 @@ func TestAccTencentCloudCfsAccessRulesDataSource(t *testing.T) { }) } -const testAccCfsAccessRulesDataSource = defaultCfsAccessGroup + ` +const testAccCfsAccessRulesDataSource = DefaultCfsAccessGroup + ` resource "tencentcloud_cfs_access_rule" "foo" { access_group_id = local.cfs_access_group_id diff --git a/tencentcloud/data_source_tc_cfs_available_zone.go b/tencentcloud/services/cfs/data_source_tc_cfs_available_zone.go similarity index 89% rename from tencentcloud/data_source_tc_cfs_available_zone.go rename to tencentcloud/services/cfs/data_source_tc_cfs_available_zone.go index 59a7dc001f..ea3c241e6b 100644 --- a/tencentcloud/data_source_tc_cfs_available_zone.go +++ b/tencentcloud/services/cfs/data_source_tc_cfs_available_zone.go @@ -1,15 +1,18 @@ -package tencentcloud +package cfs import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCfsAvailableZone() *schema.Resource { +func DataSourceTencentCloudCfsAvailableZone() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCfsAvailableZoneRead, Schema: map[string]*schema.Schema{ @@ -68,8 +71,8 @@ func dataSourceTencentCloudCfsAvailableZone() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "sale_status": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Computed: true, Description: " Sale status. Valid values: sale_out (sold out), saling (purchasable), no_saling (non-purchasable).", }, "protocol": { @@ -120,21 +123,21 @@ func dataSourceTencentCloudCfsAvailableZone() *schema.Resource { } func dataSourceTencentCloudCfsAvailableZoneRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cfs_available_zone.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cfs_available_zone.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var regionZones []*cfs.AvailableRegion - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCfsAvailableZoneByFilter(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } regionZones = result return nil @@ -240,7 +243,7 @@ func dataSourceTencentCloudCfsAvailableZoneRead(d *schema.ResourceData, meta int } output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cfs_available_zone_test.go b/tencentcloud/services/cfs/data_source_tc_cfs_available_zone_test.go similarity index 58% rename from tencentcloud/data_source_tc_cfs_available_zone_test.go rename to tencentcloud/services/cfs/data_source_tc_cfs_available_zone_test.go index ff35a632bb..31fe29b6fb 100644 --- a/tencentcloud/data_source_tc_cfs_available_zone_test.go +++ b/tencentcloud/services/cfs/data_source_tc_cfs_available_zone_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCfsAvailableZoneDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfsAvailableZoneDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cfs_available_zone.available_zone")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cfs_available_zone.available_zone")), }, }, }) diff --git a/tencentcloud/data_source_tc_cfs_file_system_clients.go b/tencentcloud/services/cfs/data_source_tc_cfs_file_system_clients.go similarity index 82% rename from tencentcloud/data_source_tc_cfs_file_system_clients.go rename to tencentcloud/services/cfs/data_source_tc_cfs_file_system_clients.go index 34fc5f5bd1..8da66ba0d8 100644 --- a/tencentcloud/data_source_tc_cfs_file_system_clients.go +++ b/tencentcloud/services/cfs/data_source_tc_cfs_file_system_clients.go @@ -1,14 +1,16 @@ -package tencentcloud +package cfs import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" ) -func dataSourceTencentCloudCfsFileSystemClients() *schema.Resource { +func DataSourceTencentCloudCfsFileSystemClients() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCfsFileSystemClientsRead, Schema: map[string]*schema.Schema{ @@ -68,23 +70,23 @@ func dataSourceTencentCloudCfsFileSystemClients() *schema.Resource { } func dataSourceTencentCloudCfsFileSystemClientsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cfs_file_system_clients.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cfs_file_system_clients.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) fsId := d.Get("file_system_id").(string) - service := CfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var clientList []*cfs.FileSystemClient - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCfsFileSystemClientsById(ctx, fsId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } clientList = result return nil @@ -132,7 +134,7 @@ func dataSourceTencentCloudCfsFileSystemClientsRead(d *schema.ResourceData, meta d.SetId(fsId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cfs_file_system_clients_test.go b/tencentcloud/services/cfs/data_source_tc_cfs_file_system_clients_test.go similarity index 60% rename from tencentcloud/data_source_tc_cfs_file_system_clients_test.go rename to tencentcloud/services/cfs/data_source_tc_cfs_file_system_clients_test.go index f864a34082..1e53bd49f5 100644 --- a/tencentcloud/data_source_tc_cfs_file_system_clients_test.go +++ b/tencentcloud/services/cfs/data_source_tc_cfs_file_system_clients_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCfsFileSystemClientsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfsFileSystemClientsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cfs_file_system_clients.file_system_clients")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cfs_file_system_clients.file_system_clients")), }, }, }) diff --git a/tencentcloud/data_source_tc_cfs_file_systems.go b/tencentcloud/services/cfs/data_source_tc_cfs_file_systems.go similarity index 89% rename from tencentcloud/data_source_tc_cfs_file_systems.go rename to tencentcloud/services/cfs/data_source_tc_cfs_file_systems.go index 588786f2e2..2492ae9c66 100644 --- a/tencentcloud/data_source_tc_cfs_file_systems.go +++ b/tencentcloud/services/cfs/data_source_tc_cfs_file_systems.go @@ -1,16 +1,19 @@ -package tencentcloud +package cfs import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCfsFileSystems() *schema.Resource { +func DataSourceTencentCloudCfsFileSystems() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCfsFileSystemsRead, @@ -120,11 +123,11 @@ func dataSourceTencentCloudCfsFileSystems() *schema.Resource { } func dataSourceTencentCloudCfsFileSystemsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cfs_file_systems.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_cfs_file_systems.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cfsService := CfsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var fileSystemId string @@ -150,10 +153,10 @@ func dataSourceTencentCloudCfsFileSystemsRead(d *schema.ResourceData, meta inter var fileSystems []*cfs.FileSystemInfo var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { fileSystems, errRet = cfsService.DescribeFileSystem(ctx, fileSystemId, vpcId, subnetId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -206,7 +209,7 @@ func dataSourceTencentCloudCfsFileSystemsRead(d *schema.ResourceData, meta inter } output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), fileSystemList); err != nil { + if err := tccommon.WriteToFile(output.(string), fileSystemList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_cfs_file_systems_test.go b/tencentcloud/services/cfs/data_source_tc_cfs_file_systems_test.go similarity index 89% rename from tencentcloud/data_source_tc_cfs_file_systems_test.go rename to tencentcloud/services/cfs/data_source_tc_cfs_file_systems_test.go index d1b7bd2cac..e4c52b3cd4 100644 --- a/tencentcloud/data_source_tc_cfs_file_systems_test.go +++ b/tencentcloud/services/cfs/data_source_tc_cfs_file_systems_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCfsFileSystemsDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCfsFileSystemDestroy, Steps: []resource.TestStep{ { @@ -32,7 +34,7 @@ func TestAccTencentCloudCfsFileSystemsDataSource(t *testing.T) { }) } -const testAccCfsFileSystemsDataSource = defaultCfsAccessGroup + ` +const testAccCfsFileSystemsDataSource = DefaultCfsAccessGroup + ` resource "tencentcloud_vpc" "vpc" { name = "test-cfs-vpc" cidr_block = "10.2.0.0/16" diff --git a/tencentcloud/data_source_tc_cfs_mount_targets.go b/tencentcloud/services/cfs/data_source_tc_cfs_mount_targets.go similarity index 86% rename from tencentcloud/data_source_tc_cfs_mount_targets.go rename to tencentcloud/services/cfs/data_source_tc_cfs_mount_targets.go index 3828075aa1..57f8ebd49a 100644 --- a/tencentcloud/data_source_tc_cfs_mount_targets.go +++ b/tencentcloud/services/cfs/data_source_tc_cfs_mount_targets.go @@ -1,14 +1,16 @@ -package tencentcloud +package cfs import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" ) -func dataSourceTencentCloudCfsMountTargets() *schema.Resource { +func DataSourceTencentCloudCfsMountTargets() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCfsMountTargetsRead, Schema: map[string]*schema.Schema{ @@ -98,22 +100,22 @@ func dataSourceTencentCloudCfsMountTargets() *schema.Resource { } func dataSourceTencentCloudCfsMountTargetsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cfs_mount_targets.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cfs_mount_targets.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var mountTargets []*cfs.MountInfo fsId := d.Get("file_system_id").(string) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCfsMountTargetsById(ctx, fsId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } mountTargets = result return nil @@ -185,7 +187,7 @@ func dataSourceTencentCloudCfsMountTargetsRead(d *schema.ResourceData, meta inte d.SetId(fsId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cfs_mount_targets_test.go b/tencentcloud/services/cfs/data_source_tc_cfs_mount_targets_test.go similarity index 59% rename from tencentcloud/data_source_tc_cfs_mount_targets_test.go rename to tencentcloud/services/cfs/data_source_tc_cfs_mount_targets_test.go index 8b792960a5..e571111734 100644 --- a/tencentcloud/data_source_tc_cfs_mount_targets_test.go +++ b/tencentcloud/services/cfs/data_source_tc_cfs_mount_targets_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCfsMountTargetsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfsMountTargetsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cfs_mount_targets.mount_targets")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cfs_mount_targets.mount_targets")), }, }, }) diff --git a/tencentcloud/services/cfs/extension_cfs.go b/tencentcloud/services/cfs/extension_cfs.go new file mode 100644 index 0000000000..e32e7e3647 --- /dev/null +++ b/tencentcloud/services/cfs/extension_cfs.go @@ -0,0 +1,59 @@ +package cfs + +const ( + CFS_PROTOCOL_NFS = "NFS" + CFS_PROTOCOL_CIFS = "CIFS" + CFS_PROTOCOL_TURBO = "TURBO" + + CFS_STORAGETYPE_SD = "SD" + CFS_STORAGETYPE_HP = "HP" + CFS_STORAGETYPE_TB = "TB" + CFS_STORAGETYPE_TP = "TP" + + CFS_NET_VPC = "VPC" + CFS_NET_CCN = "CCN" + + CFS_FILE_SYSTEM_STATUS_CREATING = "creating" + CFS_FILE_SYSTEM_STATUS_SUCCESS = "available" + CFS_FILE_SYSTEM_STATUS_FAILED = "create_failed" + + CFS_RW_PERMISSION_RO = "RO" + CFS_RW_PERMISSION_RW = "RW" + + CFS_USER_PERMISSION_ALL_SQUASH = "all_squash" + CFS_USER_PERMISSION_NO_ALL_SQUASH = "no_all_squash" + CFS_USER_PERMISSION_ROOT_SQUASH = "root_squash" + CFS_USER_PERMISSION_NO_ROOT_SQUASH = "no_root_squash" +) + +var CFS_STORAGETYPE = []string{ + CFS_STORAGETYPE_SD, + CFS_STORAGETYPE_HP, + CFS_STORAGETYPE_TB, + CFS_STORAGETYPE_TP, +} + +var CFS_PROTOCOL = []string{ + CFS_PROTOCOL_NFS, + CFS_PROTOCOL_CIFS, + CFS_PROTOCOL_TURBO, +} + +var CFS_NET = []string{ + CFS_NET_VPC, + CFS_NET_CCN, +} + +var CFS_RW_PERMISSION = []string{ + CFS_RW_PERMISSION_RO, + CFS_RW_PERMISSION_RW, +} + +var CFS_USER_PERMISSION = []string{ + CFS_USER_PERMISSION_ALL_SQUASH, + CFS_USER_PERMISSION_NO_ALL_SQUASH, + CFS_USER_PERMISSION_ROOT_SQUASH, + CFS_USER_PERMISSION_NO_ROOT_SQUASH, +} + +const CfsInvalidPgroup = "InvalidParameterValue.InvalidPgroup" diff --git a/tencentcloud/services/cfs/extension_tags.go b/tencentcloud/services/cfs/extension_tags.go new file mode 100644 index 0000000000..15b6aa4c7f --- /dev/null +++ b/tencentcloud/services/cfs/extension_tags.go @@ -0,0 +1,3 @@ +package cfs + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/resource_tc_cfs_access_group.go b/tencentcloud/services/cfs/resource_tc_cfs_access_group.go similarity index 66% rename from tencentcloud/resource_tc_cfs_access_group.go rename to tencentcloud/services/cfs/resource_tc_cfs_access_group.go index a6254ad566..bf679084bc 100644 --- a/tencentcloud/resource_tc_cfs_access_group.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_access_group.go @@ -1,17 +1,20 @@ -package tencentcloud +package cfs import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudCfsAccessGroup() *schema.Resource { +func ResourceTencentCloudCfsAccessGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfsAccessGroupCreate, Read: resourceTencentCloudCfsAccessGroupRead, @@ -25,13 +28,13 @@ func resourceTencentCloudCfsAccessGroup() *schema.Resource { "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 64), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 64), Description: "Name of the access group, and max length is 64.", }, "description": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 255), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 255), Description: "Description of the access group, and max length is 255.", }, //computed @@ -45,11 +48,11 @@ func resourceTencentCloudCfsAccessGroup() *schema.Resource { } func resourceTencentCloudCfsAccessGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_access_group.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_cfs_access_group.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cfsService := CfsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } name := d.Get("name").(string) @@ -58,10 +61,10 @@ func resourceTencentCloudCfsAccessGroupCreate(d *schema.ResourceData, meta inter description = v.(string) } accessGroupId := "" - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { id, errRet := cfsService.CreateAccessGroup(ctx, name, description) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } accessGroupId = id return nil @@ -75,21 +78,21 @@ func resourceTencentCloudCfsAccessGroupCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudCfsAccessGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_access_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_access_group.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cfsService := CfsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } id := d.Id() var accessGroup *cfs.PGroupInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { accessGroups, errRet := cfsService.DescribeAccessGroup(ctx, id, "") if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } if len(accessGroups) > 0 { accessGroup = accessGroups[0] @@ -112,8 +115,8 @@ func resourceTencentCloudCfsAccessGroupRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudCfsAccessGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_access_group.update")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_cfs_access_group.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) request := cfs.NewUpdateCfsPGroupRequest() if d.HasChange("name") { @@ -124,13 +127,13 @@ func resourceTencentCloudCfsAccessGroupUpdate(d *schema.ResourceData, meta inter } id := d.Id() request.PGroupId = &id - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCfsClient().UpdateCfsPGroup(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfsClient().UpdateCfsPGroup(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) - return retryError(err) + return tccommon.RetryError(err) } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) @@ -144,18 +147,18 @@ func resourceTencentCloudCfsAccessGroupUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudCfsAccessGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_access_group.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_cfs_access_group.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() cfsService := CfsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := cfsService.DeleteAccessGroup(ctx, id) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) diff --git a/tencentcloud/resource_tc_cfs_access_group_test.go b/tencentcloud/services/cfs/resource_tc_cfs_access_group_test.go similarity index 71% rename from tencentcloud/resource_tc_cfs_access_group_test.go rename to tencentcloud/services/cfs/resource_tc_cfs_access_group_test.go index 32632b2754..7b2a66a3d5 100644 --- a/tencentcloud/resource_tc_cfs_access_group_test.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_access_group_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cfs_test import ( "context" @@ -6,8 +6,13 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + localcfs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cfs" ) func init() { @@ -15,12 +20,12 @@ func init() { resource.AddTestSweepers("tencentcloud_cfs_access_group", &resource.Sweeper{ Name: "tencentcloud_cfs_access_group", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() - service := CfsService{client} + service := localcfs.NewCfsService(client) groups, err := service.DescribeAccessGroup(ctx, "", "") @@ -37,10 +42,10 @@ func init() { if err == nil { // ignore deleting the access rules when an error happened for _, item := range rules { ruleId := *item.RuleId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if delErr := service.DeleteAccessRule(ctx, id, ruleId); delErr != nil { // retry when Pgroup is under deleting rule operation - return retryError(delErr) + return tccommon.RetryError(delErr) } return nil }) @@ -50,7 +55,7 @@ func init() { } } - if isResourcePersist(name, nil) || !strings.HasPrefix(name, "test") { + if tcacctest.IsResourcePersist(name, nil) || !strings.HasPrefix(name, "test") { continue } if err := service.DeleteAccessGroup(ctx, id); err != nil { @@ -67,8 +72,8 @@ func init() { func TestAccTencentCloudCfsAccessGroup_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCfsAccessGroupDestroy, Steps: []resource.TestStep{ { @@ -97,11 +102,9 @@ func TestAccTencentCloudCfsAccessGroup_basic(t *testing.T) { } func testAccCheckCfsAccessGroupDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cfsService := CfsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cfsService := localcfs.NewCfsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cfs_access_group" { continue @@ -109,10 +112,10 @@ func testAccCheckCfsAccessGroupDestroy(s *terraform.State) error { accessGroups, err := cfsService.DescribeAccessGroup(ctx, rs.Primary.ID, "") if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { accessGroups, err = cfsService.DescribeAccessGroup(ctx, rs.Primary.ID, "") if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -129,8 +132,8 @@ func testAccCheckCfsAccessGroupDestroy(s *terraform.State) error { func testAccCheckCfsAccessGroupExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -139,15 +142,13 @@ func testAccCheckCfsAccessGroupExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cfs access group id is not set") } - cfsService := CfsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cfsService := localcfs.NewCfsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) accessGroups, err := cfsService.DescribeAccessGroup(ctx, rs.Primary.ID, "") if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { accessGroups, err = cfsService.DescribeAccessGroup(ctx, rs.Primary.ID, "") if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) diff --git a/tencentcloud/resource_tc_cfs_access_rule.go b/tencentcloud/services/cfs/resource_tc_cfs_access_rule.go similarity index 75% rename from tencentcloud/resource_tc_cfs_access_rule.go rename to tencentcloud/services/cfs/resource_tc_cfs_access_rule.go index 8cfa7b28f9..467433f096 100644 --- a/tencentcloud/resource_tc_cfs_access_rule.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_access_rule.go @@ -1,4 +1,4 @@ -package tencentcloud +package cfs import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudCfsAccessRule() *schema.Resource { +func ResourceTencentCloudCfsAccessRule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfsAccessRuleCreate, Read: resourceTencentCloudCfsAccessRuleRead, @@ -35,21 +38,21 @@ func resourceTencentCloudCfsAccessRule() *schema.Resource { "priority": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateIntegerInRange(1, 100), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 100), Description: "The priority level of rule. Valid value ranges: (1~100). `1` indicates the highest priority.", }, "rw_permission": { Type: schema.TypeString, Optional: true, Default: CFS_RW_PERMISSION_RO, - ValidateFunc: validateAllowedStringValue(CFS_RW_PERMISSION), + ValidateFunc: tccommon.ValidateAllowedStringValue(CFS_RW_PERMISSION), Description: "Read and write permissions. Valid values are `RO` and `RW`. and default is `RO`.", }, "user_permission": { Type: schema.TypeString, Optional: true, Default: CFS_USER_PERMISSION_ROOT_SQUASH, - ValidateFunc: validateAllowedStringValue(CFS_USER_PERMISSION), + ValidateFunc: tccommon.ValidateAllowedStringValue(CFS_USER_PERMISSION), Description: "The permissions of accessing users. Valid values are `all_squash`, `no_all_squash`, `root_squash` and `no_root_squash`. and default is `root_squash`. `all_squash` indicates that all access users are mapped as anonymous users or user groups; `no_all_squash` indicates that access users will match local users first and be mapped to anonymous users or user groups after matching failed; `root_squash` indicates that map access root users to anonymous users or user groups; `no_root_squash` indicates that access root users keep root account permission.", }, }, @@ -57,8 +60,8 @@ func resourceTencentCloudCfsAccessRule() *schema.Resource { } func resourceTencentCloudCfsAccessRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_access_rule.create")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_cfs_access_rule.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) request := cfs.NewCreateCfsRuleRequest() request.PGroupId = helper.String(d.Get("access_group_id").(string)) @@ -67,13 +70,13 @@ func resourceTencentCloudCfsAccessRuleCreate(d *schema.ResourceData, meta interf request.RWPermission = helper.String(d.Get("rw_permission").(string)) request.UserPermission = helper.String(d.Get("user_permission").(string)) ruleId := "" - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCfsClient().CreateCfsRule(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfsClient().CreateCfsRule(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) - return retryError(err) + return tccommon.RetryError(err) } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) @@ -93,22 +96,22 @@ func resourceTencentCloudCfsAccessRuleCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudCfsAccessRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_access_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_access_rule.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) ruleId := d.Id() groupId := d.Get("access_group_id").(string) cfsService := CfsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var accessRule *cfs.PGroupRuleInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { rules, errRet := cfsService.DescribeAccessRule(ctx, groupId, ruleId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if len(rules) > 0 { accessRule = rules[0] @@ -134,8 +137,8 @@ func resourceTencentCloudCfsAccessRuleRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudCfsAccessRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_access_rule.update")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_cfs_access_rule.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) request := cfs.NewUpdateCfsRuleRequest() request.RuleId = helper.String(d.Id()) @@ -153,13 +156,13 @@ func resourceTencentCloudCfsAccessRuleUpdate(d *schema.ResourceData, meta interf request.Priority = helper.IntInt64(d.Get("priority").(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCfsClient().UpdateCfsRule(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfsClient().UpdateCfsRule(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) - return retryError(err) + return tccommon.RetryError(err) } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) @@ -174,18 +177,18 @@ func resourceTencentCloudCfsAccessRuleUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudCfsAccessRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_access_rule.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_cfs_access_rule.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cfsService := CfsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } ruleId := d.Id() groupId := d.Get("access_group_id").(string) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := cfsService.DeleteAccessRule(ctx, groupId, ruleId) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) diff --git a/tencentcloud/resource_tc_cfs_access_rule_test.go b/tencentcloud/services/cfs/resource_tc_cfs_access_rule_test.go similarity index 67% rename from tencentcloud/resource_tc_cfs_access_rule_test.go rename to tencentcloud/services/cfs/resource_tc_cfs_access_rule_test.go index 3110aece54..31dbb8c126 100644 --- a/tencentcloud/resource_tc_cfs_access_rule_test.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_access_rule_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package cfs_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcfs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cfs" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -12,8 +16,8 @@ import ( func TestAccTencentCloudCfsAccessRule(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCfsAccessRuleDestroy, Steps: []resource.TestStep{ { @@ -30,11 +34,9 @@ func TestAccTencentCloudCfsAccessRule(t *testing.T) { } func testAccCheckCfsAccessRuleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cfsService := CfsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cfsService := localcfs.NewCfsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cfs_access_rule" { continue @@ -43,10 +45,10 @@ func testAccCheckCfsAccessRuleDestroy(s *terraform.State) error { accessGroupId := rs.Primary.Attributes["access_group_id"] accessRules, err := cfsService.DescribeAccessRule(ctx, accessGroupId, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { accessRules, err = cfsService.DescribeAccessRule(ctx, accessGroupId, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -63,8 +65,8 @@ func testAccCheckCfsAccessRuleDestroy(s *terraform.State) error { func testAccCheckCfsAccessRuleExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -74,15 +76,13 @@ func testAccCheckCfsAccessRuleExists(n string) resource.TestCheckFunc { return fmt.Errorf("cfs access rule id is not set") } accessGroupId := rs.Primary.Attributes["access_group_id"] - cfsService := CfsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cfsService := localcfs.NewCfsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) accessRules, err := cfsService.DescribeAccessRule(ctx, accessGroupId, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { accessRules, err = cfsService.DescribeAccessRule(ctx, accessGroupId, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -97,7 +97,7 @@ func testAccCheckCfsAccessRuleExists(n string) resource.TestCheckFunc { } } -const testAccCfsAccessRule = defaultCfsAccessGroup + ` +const testAccCfsAccessRule = DefaultCfsAccessGroup + ` resource "tencentcloud_cfs_access_rule" "foo" { access_group_id = local.cfs_access_group_id diff --git a/tencentcloud/resource_tc_cfs_auto_snapshot_policy.go b/tencentcloud/services/cfs/resource_tc_cfs_auto_snapshot_policy.go similarity index 77% rename from tencentcloud/resource_tc_cfs_auto_snapshot_policy.go rename to tencentcloud/services/cfs/resource_tc_cfs_auto_snapshot_policy.go index a185e271da..e785c70975 100644 --- a/tencentcloud/resource_tc_cfs_auto_snapshot_policy.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_auto_snapshot_policy.go @@ -1,17 +1,20 @@ -package tencentcloud +package cfs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCfsAutoSnapshotPolicy() *schema.Resource { +func ResourceTencentCloudCfsAutoSnapshotPolicy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfsAutoSnapshotPolicyCreate, Read: resourceTencentCloudCfsAutoSnapshotPolicyRead, @@ -61,10 +64,10 @@ func resourceTencentCloudCfsAutoSnapshotPolicy() *schema.Resource { } func resourceTencentCloudCfsAutoSnapshotPolicyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_auto_snapshot_policy.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_auto_snapshot_policy.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cfs.NewCreateAutoSnapshotPolicyRequest() @@ -95,10 +98,10 @@ func resourceTencentCloudCfsAutoSnapshotPolicyCreate(d *schema.ResourceData, met request.IntervalDays = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfsClient().CreateAutoSnapshotPolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfsClient().CreateAutoSnapshotPolicy(request) if e != nil { - return retryError(e) + 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()) } @@ -117,14 +120,14 @@ func resourceTencentCloudCfsAutoSnapshotPolicyCreate(d *schema.ResourceData, met } func resourceTencentCloudCfsAutoSnapshotPolicyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_auto_snapshot_policy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_auto_snapshot_policy.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} autoSnapshotPolicyId := d.Id() @@ -166,10 +169,10 @@ func resourceTencentCloudCfsAutoSnapshotPolicyRead(d *schema.ResourceData, meta } func resourceTencentCloudCfsAutoSnapshotPolicyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_auto_snapshot_policy.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_auto_snapshot_policy.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cfs.NewUpdateAutoSnapshotPolicyRequest() @@ -212,10 +215,10 @@ func resourceTencentCloudCfsAutoSnapshotPolicyUpdate(d *schema.ResourceData, met } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfsClient().UpdateAutoSnapshotPolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfsClient().UpdateAutoSnapshotPolicy(request) if e != nil { - return retryError(e) + 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()) } @@ -230,13 +233,13 @@ func resourceTencentCloudCfsAutoSnapshotPolicyUpdate(d *schema.ResourceData, met } func resourceTencentCloudCfsAutoSnapshotPolicyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_auto_snapshot_policy.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_auto_snapshot_policy.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} autoSnapshotPolicyId := d.Id() if err := service.DeleteCfsAutoSnapshotPolicyById(ctx, autoSnapshotPolicyId); err != nil { diff --git a/tencentcloud/resource_tc_cfs_auto_snapshot_policy_attachment.go b/tencentcloud/services/cfs/resource_tc_cfs_auto_snapshot_policy_attachment.go similarity index 69% rename from tencentcloud/resource_tc_cfs_auto_snapshot_policy_attachment.go rename to tencentcloud/services/cfs/resource_tc_cfs_auto_snapshot_policy_attachment.go index a0314b4134..9d7da79029 100644 --- a/tencentcloud/resource_tc_cfs_auto_snapshot_policy_attachment.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_auto_snapshot_policy_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package cfs import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCfsAutoSnapshotPolicyAttachment() *schema.Resource { +func ResourceTencentCloudCfsAutoSnapshotPolicyAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfsAutoSnapshotPolicyAttachmentCreate, Read: resourceTencentCloudCfsAutoSnapshotPolicyAttachmentRead, @@ -39,10 +42,10 @@ func resourceTencentCloudCfsAutoSnapshotPolicyAttachment() *schema.Resource { } func resourceTencentCloudCfsAutoSnapshotPolicyAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_auto_snapshot_policy_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_auto_snapshot_policy_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cfs.NewBindAutoSnapshotPolicyRequest() @@ -59,10 +62,10 @@ func resourceTencentCloudCfsAutoSnapshotPolicyAttachmentCreate(d *schema.Resourc request.FileSystemIds = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfsClient().BindAutoSnapshotPolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfsClient().BindAutoSnapshotPolicy(request) if e != nil { - return retryError(e) + 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()) } @@ -73,22 +76,22 @@ func resourceTencentCloudCfsAutoSnapshotPolicyAttachmentCreate(d *schema.Resourc return err } - d.SetId(autoSnapshotPolicyId + FILED_SP + fileSystemIds) + d.SetId(autoSnapshotPolicyId + tccommon.FILED_SP + fileSystemIds) return resourceTencentCloudCfsAutoSnapshotPolicyAttachmentRead(d, meta) } func resourceTencentCloudCfsAutoSnapshotPolicyAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_auto_snapshot_policy_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_auto_snapshot_policy_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -117,14 +120,14 @@ func resourceTencentCloudCfsAutoSnapshotPolicyAttachmentRead(d *schema.ResourceD } func resourceTencentCloudCfsAutoSnapshotPolicyAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_auto_snapshot_policy_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_auto_snapshot_policy_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CfsService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_cfs_auto_snapshot_policy_attachment_test.go b/tencentcloud/services/cfs/resource_tc_cfs_auto_snapshot_policy_attachment_test.go similarity index 84% rename from tencentcloud/resource_tc_cfs_auto_snapshot_policy_attachment_test.go rename to tencentcloud/services/cfs/resource_tc_cfs_auto_snapshot_policy_attachment_test.go index 9db5d461be..d305383d2d 100644 --- a/tencentcloud/resource_tc_cfs_auto_snapshot_policy_attachment_test.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_auto_snapshot_policy_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCfsAutoSnapshotPolicyAttachmentResource_basic(t *testing t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfsAutoSnapshotPolicyAttachment, diff --git a/tencentcloud/resource_tc_cfs_auto_snapshot_policy_test.go b/tencentcloud/services/cfs/resource_tc_cfs_auto_snapshot_policy_test.go similarity index 82% rename from tencentcloud/resource_tc_cfs_auto_snapshot_policy_test.go rename to tencentcloud/services/cfs/resource_tc_cfs_auto_snapshot_policy_test.go index 14c6fd0b5a..4d6faa8cfd 100644 --- a/tencentcloud/resource_tc_cfs_auto_snapshot_policy_test.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_auto_snapshot_policy_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCfsAutoSnapshotPolicyResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfsAutoSnapshotPolicy, diff --git a/tencentcloud/resource_tc_cfs_file_system.go b/tencentcloud/services/cfs/resource_tc_cfs_file_system.go similarity index 77% rename from tencentcloud/resource_tc_cfs_file_system.go rename to tencentcloud/services/cfs/resource_tc_cfs_file_system.go index 378a9df1f6..328f39b102 100644 --- a/tencentcloud/resource_tc_cfs_file_system.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_file_system.go @@ -1,18 +1,21 @@ -package tencentcloud +package cfs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudCfsFileSystem() *schema.Resource { +func ResourceTencentCloudCfsFileSystem() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfsFileSystemCreate, Read: resourceTencentCloudCfsFileSystemRead, @@ -44,14 +47,14 @@ func resourceTencentCloudCfsFileSystem() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CFS_NET_VPC, - ValidateFunc: validateAllowedStringValue(CFS_NET), + ValidateFunc: tccommon.ValidateAllowedStringValue(CFS_NET), Description: "Network type, Default `VPC`. Valid values: `VPC` and `CCN`. Select `VPC` for a Standard or High-Performance file system, and `CCN` for a Standard Turbo or High-Performance Turbo one.", }, "protocol": { Type: schema.TypeString, Optional: true, Default: CFS_PROTOCOL_NFS, - ValidateFunc: validateAllowedStringValue(CFS_PROTOCOL), + ValidateFunc: tccommon.ValidateAllowedStringValue(CFS_PROTOCOL), ForceNew: true, Description: "File system protocol. Valid values: `NFS`, `CIFS`, `TURBO`. If this parameter is left empty, `NFS` is used by default. For the Turbo series, you must set this parameter to `TURBO`.", }, @@ -59,7 +62,7 @@ func resourceTencentCloudCfsFileSystem() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CFS_STORAGETYPE_SD, - ValidateFunc: validateAllowedStringValue(CFS_STORAGETYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CFS_STORAGETYPE), ForceNew: true, Description: "Storage type of the file system. Valid values: `SD` (Standard), `HP` (High-Performance), `TB` (Standard Turbo), and `TP` (High-Performance Turbo). Default value: `SD`.", }, @@ -123,11 +126,11 @@ func resourceTencentCloudCfsFileSystem() *schema.Resource { } func resourceTencentCloudCfsFileSystemCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_file_system.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_cfs_file_system.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cfsService := CfsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } request := cfs.NewCreateCfsFileSystemRequest() @@ -165,13 +168,13 @@ func resourceTencentCloudCfsFileSystemCreate(d *schema.ResourceData, meta interf } fsId := "" - err := resource.Retry(3*writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(3*tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCfsClient().CreateCfsFileSystem(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfsClient().CreateCfsFileSystem(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) - return retryError(err) + return tccommon.RetryError(err) } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) @@ -189,10 +192,10 @@ func resourceTencentCloudCfsFileSystemCreate(d *schema.ResourceData, meta interf d.SetId(fsId) // wait for success status - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { fileSystems, errRet := cfsService.DescribeFileSystem(ctx, fsId, "", "") if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if len(fileSystems) < 1 { return resource.RetryableError(fmt.Errorf("file system %s not exist", fsId)) @@ -206,9 +209,9 @@ func resourceTencentCloudCfsFileSystemCreate(d *schema.ResourceData, meta interf return err } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("cfs", "filesystem", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("cfs", "filesystem", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -218,21 +221,21 @@ func resourceTencentCloudCfsFileSystemCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudCfsFileSystemRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_file_system.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_file_system.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) fsId := d.Id() cfsService := CfsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var fileSystem *cfs.FileSystemInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { fileSystems, errRet := cfsService.DescribeFileSystem(ctx, fsId, "", "") if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if len(fileSystems) > 0 { fileSystem = fileSystems[0] @@ -256,10 +259,10 @@ func resourceTencentCloudCfsFileSystemRead(d *schema.ResourceData, meta interfac _ = d.Set("capacity", fileSystem.SizeLimit) var mountTarget *cfs.MountInfo - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { targets, errRet := cfsService.DescribeMountTargets(ctx, fsId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if len(targets) > 0 { mountTarget = targets[0] @@ -269,7 +272,7 @@ func resourceTencentCloudCfsFileSystemRead(d *schema.ResourceData, meta interfac if err != nil { return err } - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "cfs", "filesystem", tcClient.Region, d.Id()) if err != nil { @@ -291,12 +294,12 @@ func resourceTencentCloudCfsFileSystemRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudCfsFileSystemUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_file_system.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_cfs_file_system.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) fsId := d.Id() cfsService := CfsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } immutableArgs := []string{"ccn_id", "cidr_block", "net_interface", "capacity"} @@ -310,10 +313,10 @@ func resourceTencentCloudCfsFileSystemUpdate(d *schema.ResourceData, meta interf d.Partial(true) if d.HasChange("name") { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := cfsService.ModifyFileSystemName(ctx, fsId, d.Get("name").(string)) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -324,10 +327,10 @@ func resourceTencentCloudCfsFileSystemUpdate(d *schema.ResourceData, meta interf } if d.HasChange("access_group_id") { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := cfsService.ModifyFileSystemAccessGroup(ctx, fsId, d.Get("access_group_id").(string)) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -342,9 +345,9 @@ func resourceTencentCloudCfsFileSystemUpdate(d *schema.ResourceData, meta interf oldValue, newValue := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("cfs", "filesystem", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("cfs", "filesystem", tcClient.Region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -358,18 +361,18 @@ func resourceTencentCloudCfsFileSystemUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudCfsFileSystemDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_file_system.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_cfs_file_system.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) fsId := d.Id() cfsService := CfsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := cfsService.DeleteFileSystem(ctx, fsId) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) diff --git a/tencentcloud/resource_tc_cfs_file_system_test.go b/tencentcloud/services/cfs/resource_tc_cfs_file_system_test.go similarity index 77% rename from tencentcloud/resource_tc_cfs_file_system_test.go rename to tencentcloud/services/cfs/resource_tc_cfs_file_system_test.go index 1b2f9f6b61..d0c4336f6d 100644 --- a/tencentcloud/resource_tc_cfs_file_system_test.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_file_system_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cfs_test import ( "context" @@ -7,6 +7,10 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcfs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cfs" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -16,12 +20,12 @@ func init() { resource.AddTestSweepers("tencentcloud_cfs_file_system", &resource.Sweeper{ Name: "tencentcloud_cfs_file_system", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() - service := CfsService{client} + service := localcfs.NewCfsService(client) fsList, err := service.DescribeFileSystem(ctx, "", "", "") if err != nil { @@ -37,7 +41,7 @@ func init() { created = result } } - if isResourcePersist(name, &created) { + if tcacctest.IsResourcePersist(name, &created) { continue } log.Printf("%s -> %s will be sweep", id, name) @@ -55,8 +59,8 @@ func init() { func TestAccTencentCloudCfsFileSystemResource_Basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCfsFileSystemDestroy, Steps: []resource.TestStep{ { @@ -98,11 +102,9 @@ func TestAccTencentCloudCfsFileSystemResource_Basic(t *testing.T) { } func testAccCheckCfsFileSystemDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cfsService := CfsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cfsService := localcfs.NewCfsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cfs_file_system" { continue @@ -110,10 +112,10 @@ func testAccCheckCfsFileSystemDestroy(s *terraform.State) error { fileSystems, err := cfsService.DescribeFileSystem(ctx, rs.Primary.ID, "", "") if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { fileSystems, err = cfsService.DescribeFileSystem(ctx, rs.Primary.ID, "", "") if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -130,8 +132,8 @@ func testAccCheckCfsFileSystemDestroy(s *terraform.State) error { func testAccCheckCfsFileSystemExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -140,15 +142,13 @@ func testAccCheckCfsFileSystemExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cfs file system id is not set") } - cfsService := CfsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cfsService := localcfs.NewCfsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) fileSystems, err := cfsService.DescribeFileSystem(ctx, rs.Primary.ID, "", "") if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { fileSystems, err = cfsService.DescribeFileSystem(ctx, rs.Primary.ID, "", "") if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -163,7 +163,7 @@ func testAccCheckCfsFileSystemExists(n string) resource.TestCheckFunc { } } -const testAccCfsFileSystem = defaultCfsAccessGroup + ` +const testAccCfsFileSystem = DefaultCfsAccessGroup + ` resource "tencentcloud_vpc" "vpc" { name = "test-cfs-vpc" cidr_block = "10.2.0.0/16" @@ -218,5 +218,5 @@ resource "tencentcloud_cfs_file_system" "foo" { role = "%s" } } -`, defaultCfsAccessGroup, value) +`, DefaultCfsAccessGroup, value) } diff --git a/tencentcloud/resource_tc_cfs_sign_up_cfs_service.go b/tencentcloud/services/cfs/resource_tc_cfs_sign_up_cfs_service.go similarity index 67% rename from tencentcloud/resource_tc_cfs_sign_up_cfs_service.go rename to tencentcloud/services/cfs/resource_tc_cfs_sign_up_cfs_service.go index 3ef4a86f93..2c88307a00 100644 --- a/tencentcloud/resource_tc_cfs_sign_up_cfs_service.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_sign_up_cfs_service.go @@ -1,14 +1,16 @@ -package tencentcloud +package cfs import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" ) -func resourceTencentCloudCfsSignUpCfsService() *schema.Resource { +func ResourceTencentCloudCfsSignUpCfsService() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfsSignUpCfsServiceCreate, Read: resourceTencentCloudCfsSignUpCfsServiceRead, @@ -27,20 +29,20 @@ func resourceTencentCloudCfsSignUpCfsService() *schema.Resource { } func resourceTencentCloudCfsSignUpCfsServiceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cfs_sign_up_cfs_service.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cfs_sign_up_cfs_service.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cfs.NewSignUpCfsServiceRequest() response = cfs.NewSignUpCfsServiceResponse() cfsServiceStatus string ) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfsClient().SignUpCfsService(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfsClient().SignUpCfsService(request) if e != nil { - return retryError(e) + 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()) } @@ -59,19 +61,19 @@ func resourceTencentCloudCfsSignUpCfsServiceCreate(d *schema.ResourceData, meta } func resourceTencentCloudCfsSignUpCfsServiceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_sign_up_cfs_service.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_sign_up_cfs_service.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cfs.NewDescribeCfsServiceStatusRequest() response = cfs.NewDescribeCfsServiceStatusResponse() ) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfsClient().DescribeCfsServiceStatus(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfsClient().DescribeCfsServiceStatus(request) if e != nil { - return retryError(e) + 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()) } @@ -89,8 +91,8 @@ func resourceTencentCloudCfsSignUpCfsServiceRead(d *schema.ResourceData, meta in } func resourceTencentCloudCfsSignUpCfsServiceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_sign_up_cfs_service.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_sign_up_cfs_service.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cfs_sign_up_cfs_service_test.go b/tencentcloud/services/cfs/resource_tc_cfs_sign_up_cfs_service_test.go similarity index 80% rename from tencentcloud/resource_tc_cfs_sign_up_cfs_service_test.go rename to tencentcloud/services/cfs/resource_tc_cfs_sign_up_cfs_service_test.go index 61588c8cb2..73da31052a 100644 --- a/tencentcloud/resource_tc_cfs_sign_up_cfs_service_test.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_sign_up_cfs_service_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCfsSignUpCfsServiceResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfsSignUpCfsService, diff --git a/tencentcloud/resource_tc_cfs_snapshot.go b/tencentcloud/services/cfs/resource_tc_cfs_snapshot.go similarity index 66% rename from tencentcloud/resource_tc_cfs_snapshot.go rename to tencentcloud/services/cfs/resource_tc_cfs_snapshot.go index 30b52dec74..38bba3ee67 100644 --- a/tencentcloud/resource_tc_cfs_snapshot.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_snapshot.go @@ -1,4 +1,4 @@ -package tencentcloud +package cfs import ( "context" @@ -6,13 +6,16 @@ import ( "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCfsSnapshot() *schema.Resource { +func ResourceTencentCloudCfsSnapshot() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfsSnapshotCreate, Read: resourceTencentCloudCfsSnapshotRead, @@ -45,10 +48,10 @@ func resourceTencentCloudCfsSnapshot() *schema.Resource { } func resourceTencentCloudCfsSnapshotCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_snapshot.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_snapshot.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cfs.NewCreateCfsSnapshotRequest() @@ -73,10 +76,10 @@ func resourceTencentCloudCfsSnapshotCreate(d *schema.ResourceData, meta interfac } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfsClient().CreateCfsSnapshot(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfsClient().CreateCfsSnapshot(request) if e != nil { - return retryError(e) + 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()) } @@ -91,18 +94,18 @@ func resourceTencentCloudCfsSnapshotCreate(d *schema.ResourceData, meta interfac snapshotId = *response.Response.SnapshotId d.SetId(snapshotId) - service := CfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - conf := BuildStateChangeConf([]string{}, []string{"available"}, 2*readRetryTimeout, time.Second, service.CfsSnapshotStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"available"}, 2*tccommon.ReadRetryTimeout, time.Second, service.CfsSnapshotStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e } - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::cfs:%s:uin/:snap/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -113,14 +116,14 @@ func resourceTencentCloudCfsSnapshotCreate(d *schema.ResourceData, meta interfac } func resourceTencentCloudCfsSnapshotRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_snapshot.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_snapshot.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} snapshotId := d.Id() @@ -143,7 +146,7 @@ func resourceTencentCloudCfsSnapshotRead(d *schema.ResourceData, meta interface{ _ = d.Set("snapshot_name", snapshot.SnapshotName) } - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "cfs", "snap", tcClient.Region, d.Id()) if err != nil { @@ -155,10 +158,10 @@ func resourceTencentCloudCfsSnapshotRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCfsSnapshotUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_snapshot.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_snapshot.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) needChange := false request := cfs.NewUpdateCfsSnapshotAttributeRequest() @@ -175,10 +178,10 @@ func resourceTencentCloudCfsSnapshotUpdate(d *schema.ResourceData, meta interfac } if needChange { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfsClient().UpdateCfsSnapshotAttribute(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfsClient().UpdateCfsSnapshotAttribute(request) if e != nil { - return retryError(e) + 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()) } @@ -191,12 +194,12 @@ func resourceTencentCloudCfsSnapshotUpdate(d *schema.ResourceData, meta interfac } if d.HasChange("tags") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("cfs", "snap", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("cfs", "snap", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -206,23 +209,23 @@ func resourceTencentCloudCfsSnapshotUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCloudCfsSnapshotDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfs_snapshot.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfs_snapshot.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} snapshotId := d.Id() if err := service.DeleteCfsSnapshotById(ctx, snapshotId); err != nil { return err } - err := resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := service.DescribeCfsSnapshotById(ctx, snapshotId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if instance == nil { return nil diff --git a/tencentcloud/resource_tc_cfs_snapshot_test.go b/tencentcloud/services/cfs/resource_tc_cfs_snapshot_test.go similarity index 80% rename from tencentcloud/resource_tc_cfs_snapshot_test.go rename to tencentcloud/services/cfs/resource_tc_cfs_snapshot_test.go index ecf6336bd4..53d3427b4d 100644 --- a/tencentcloud/resource_tc_cfs_snapshot_test.go +++ b/tencentcloud/services/cfs/resource_tc_cfs_snapshot_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCfsSnapshotResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfsSnapshot, diff --git a/tencentcloud/services/cfs/service_tencentcloud_cfs.go b/tencentcloud/services/cfs/service_tencentcloud_cfs.go new file mode 100644 index 0000000000..ade56998c8 --- /dev/null +++ b/tencentcloud/services/cfs/service_tencentcloud_cfs.go @@ -0,0 +1,660 @@ +package cfs + +import ( + "context" + "fmt" + "log" + "reflect" + "sort" + "strings" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + + cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +func NewCfsService(client *connectivity.TencentCloudClient) CfsService { + return CfsService{client: client} +} + +type CfsService struct { + client *connectivity.TencentCloudClient +} + +func (me *CfsService) DescribeFileSystem(ctx context.Context, fsId, vpcId, subnetId string) (fs []*cfs.FileSystemInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cfs.NewDescribeCfsFileSystemsRequest() + if fsId != "" { + request.FileSystemId = &fsId + } + if vpcId != "" { + request.VpcId = &vpcId + } + if subnetId != "" { + request.SubnetId = &subnetId + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCfsClient().DescribeCfsFileSystems(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + fs = response.Response.FileSystems + return +} + +func (me *CfsService) DescribeMountTargets(ctx context.Context, fsId string) (targets []*cfs.MountInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cfs.NewDescribeMountTargetsRequest() + request.FileSystemId = &fsId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCfsClient().DescribeMountTargets(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + targets = response.Response.MountTargets + return +} + +func (me *CfsService) ModifyFileSystemName(ctx context.Context, fsId, fsName string) error { + logId := tccommon.GetLogId(ctx) + request := cfs.NewUpdateCfsFileSystemNameRequest() + request.FileSystemId = &fsId + request.FsName = &fsName + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCfsClient().UpdateCfsFileSystemName(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CfsService) ModifyFileSystemAccessGroup(ctx context.Context, fsId, accessGroupId string) error { + logId := tccommon.GetLogId(ctx) + request := cfs.NewUpdateCfsFileSystemPGroupRequest() + request.FileSystemId = &fsId + request.PGroupId = &accessGroupId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCfsClient().UpdateCfsFileSystemPGroup(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CfsService) DeleteFileSystem(ctx context.Context, fsId string) error { + logId := tccommon.GetLogId(ctx) + request := cfs.NewDeleteCfsFileSystemRequest() + request.FileSystemId = &fsId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCfsClient().DeleteCfsFileSystem(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CfsService) CreateAccessGroup(ctx context.Context, name, description string) (id string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cfs.NewCreateCfsPGroupRequest() + request.Name = &name + if description != "" { + request.DescInfo = &description + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCfsClient().CreateCfsPGroup(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response.Response.PGroupId == nil { + errRet = fmt.Errorf("cfs access group id is nil") + return + } + id = *response.Response.PGroupId + return +} + +func (me *CfsService) DescribeAccessGroup(ctx context.Context, id, name string) (accessGroups []*cfs.PGroupInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cfs.NewDescribeCfsPGroupsRequest() + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCfsClient().DescribeCfsPGroups(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + accessGroups = make([]*cfs.PGroupInfo, 0) + for _, accessGroup := range response.Response.PGroupList { + if id != "" && *accessGroup.PGroupId != id { + continue + } + if name != "" && *accessGroup.Name != name { + continue + } + accessGroups = append(accessGroups, accessGroup) + } + return +} + +func (me *CfsService) DeleteAccessGroup(ctx context.Context, id string) error { + logId := tccommon.GetLogId(ctx) + request := cfs.NewDeleteCfsPGroupRequest() + request.PGroupId = &id + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCfsClient().DeleteCfsPGroup(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CfsService) DescribeAccessRule(ctx context.Context, accessGroupId, accessRuleId string) (accessRules []*cfs.PGroupRuleInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cfs.NewDescribeCfsRulesRequest() + request.PGroupId = &accessGroupId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCfsClient().DescribeCfsRules(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { + if sdkErr.Code == CfsInvalidPgroup { + return nil, 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()) + + accessRules = make([]*cfs.PGroupRuleInfo, 0) + for _, accessRule := range response.Response.RuleList { + if accessRuleId != "" && *accessRule.RuleId != accessRuleId { + continue + } + accessRules = append(accessRules, accessRule) + } + return +} + +func (me *CfsService) DeleteAccessRule(ctx context.Context, accessGroupId, accessRuleId string) error { + logId := tccommon.GetLogId(ctx) + request := cfs.NewDeleteCfsRuleRequest() + request.PGroupId = &accessGroupId + request.RuleId = &accessRuleId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCfsClient().DeleteCfsRule(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CfsService) DescribeCfsAutoSnapshotPolicyById(ctx context.Context, autoSnapshotPolicyId string) (autoSnapshotPolicy *cfs.AutoSnapshotPolicyInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfs.NewDescribeAutoSnapshotPoliciesRequest() + request.AutoSnapshotPolicyId = &autoSnapshotPolicyId + + 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()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*cfs.AutoSnapshotPolicyInfo, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCfsClient().DescribeAutoSnapshotPolicies(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()) + + if response == nil || len(response.Response.AutoSnapshotPolicies) < 1 { + break + } + instances = append(instances, response.Response.AutoSnapshotPolicies...) + if len(response.Response.AutoSnapshotPolicies) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + autoSnapshotPolicy = instances[0] + return +} + +func (me *CfsService) DeleteCfsAutoSnapshotPolicyById(ctx context.Context, autoSnapshotPolicyId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfs.NewDeleteAutoSnapshotPolicyRequest() + request.AutoSnapshotPolicyId = &autoSnapshotPolicyId + + 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.UseCfsClient().DeleteAutoSnapshotPolicy(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 +} + +func (me *CfsService) DescribeCfsAutoSnapshotPolicyAttachmentById(ctx context.Context, autoSnapshotPolicyId string, fileSystemIds string) (autoSnapshotPolicyAttachment *cfs.AutoSnapshotPolicyInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfs.NewDescribeAutoSnapshotPoliciesRequest() + request.AutoSnapshotPolicyId = &autoSnapshotPolicyId + + 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()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*cfs.AutoSnapshotPolicyInfo, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCfsClient().DescribeAutoSnapshotPolicies(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()) + + if response == nil || len(response.Response.AutoSnapshotPolicies) < 1 { + break + } + instances = append(instances, response.Response.AutoSnapshotPolicies...) + if len(response.Response.AutoSnapshotPolicies) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + var fileSystemIdsList []string + autoSnapshotPolicy := instances[0] + + for _, fileSystem := range autoSnapshotPolicy.FileSystems { + fileSystemIdsList = append(fileSystemIdsList, *fileSystem.FileSystemId) + } + + res := strings.Split(fileSystemIds, ",") + sort.Strings(res) + sort.Strings(fileSystemIdsList) + + if reflect.DeepEqual(res, fileSystemIdsList) { + autoSnapshotPolicyAttachment = autoSnapshotPolicy + } + + return +} + +func (me *CfsService) DeleteCfsAutoSnapshotPolicyAttachmentById(ctx context.Context, autoSnapshotPolicyId string, fileSystemIds string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfs.NewUnbindAutoSnapshotPolicyRequest() + request.AutoSnapshotPolicyId = &autoSnapshotPolicyId + request.FileSystemIds = &fileSystemIds + + 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.UseCfsClient().UnbindAutoSnapshotPolicy(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 +} + +func (me *CfsService) DescribeCfsSnapshotById(ctx context.Context, snapshotId string) (snapshot *cfs.SnapshotInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfs.NewDescribeCfsSnapshotsRequest() + request.SnapshotId = &snapshotId + + 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()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*cfs.SnapshotInfo, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCfsClient().DescribeCfsSnapshots(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()) + + if response == nil || len(response.Response.Snapshots) < 1 { + break + } + instances = append(instances, response.Response.Snapshots...) + if len(response.Response.Snapshots) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + snapshot = instances[0] + return +} + +func (me *CfsService) DeleteCfsSnapshotById(ctx context.Context, snapshotId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfs.NewDeleteCfsSnapshotRequest() + request.SnapshotId = &snapshotId + + 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.UseCfsClient().DeleteCfsSnapshot(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 +} + +func (me *CfsService) CfsSnapshotStateRefreshFunc(snapshotId string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + ctx := tccommon.ContextNil + + object, err := me.DescribeCfsSnapshotById(ctx, snapshotId) + + if err != nil { + return nil, "", err + } + + return object, helper.PString(object.Status), nil + } +} + +func (me *CfsService) DescribeCfsMountTargetsById(ctx context.Context, fileSystemId string) (mountTargets []*cfs.MountInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cfs.NewDescribeMountTargetsRequest() + ) + + 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()) + } + }() + + request.FileSystemId = helper.String(fileSystemId) + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCfsClient().DescribeMountTargets(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()) + + mountTargets = response.Response.MountTargets + + return +} + +func (me *CfsService) DescribeCfsFileSystemClientsById(ctx context.Context, fileSystemId string) (fileSystemClients []*cfs.FileSystemClient, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cfs.NewDescribeCfsFileSystemClientsRequest() + ) + + 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()) + } + }() + + request.FileSystemId = helper.String(fileSystemId) + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCfsClient().DescribeCfsFileSystemClients(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()) + + fileSystemClients = response.Response.ClientList + + return +} + +func (me *CfsService) DescribeCfsUserQuotaById(ctx context.Context, fileSystemId string, userType string, userId string) (userQuota *cfs.UserQuota, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfs.NewDescribeUserQuotaRequest() + request.FileSystemId = &fileSystemId + + typeFilter := cfs.Filter{ + Name: helper.String("UserType"), + Values: []*string{helper.String(userType)}, + } + request.Filters = append(request.Filters, &typeFilter) + + idFilter := cfs.Filter{ + Name: helper.String("UserId"), + Values: []*string{helper.String(userId)}, + } + request.Filters = append(request.Filters, &idFilter) + + 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()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*cfs.UserQuota, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCfsClient().DescribeUserQuota(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()) + + if response == nil || len(response.Response.UserQuotaInfo) < 1 { + break + } + instances = append(instances, response.Response.UserQuotaInfo...) + if len(response.Response.UserQuotaInfo) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + userQuota = instances[0] + return +} + +func (me *CfsService) DeleteCfsUserQuotaById(ctx context.Context, fileSystemId string, userType string, userId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfs.NewDeleteUserQuotaRequest() + request.FileSystemId = &fileSystemId + request.UserType = &userType + request.UserId = &userId + + 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.UseCfsClient().DeleteUserQuota(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 +} + +func (me *CfsService) DescribeCfsAvailableZoneByFilter(ctx context.Context) (availableZone []*cfs.AvailableRegion, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cfs.NewDescribeAvailableZoneInfoRequest() + ) + + 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()) + } + }() + + response, err := me.client.UseCfsClient().DescribeAvailableZoneInfo(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()) + + availableZone = response.Response.RegionZones + + return +} diff --git a/tencentcloud/services/cfs/service_tencentcloud_tag.go b/tencentcloud/services/cfs/service_tencentcloud_tag.go new file mode 100644 index 0000000000..6009c42f51 --- /dev/null +++ b/tencentcloud/services/cfs/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package cfs + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 8981e2e77b0a54011f85a3eb41a66c5e925a2f3c Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 12:43:24 +0800 Subject: [PATCH 12/31] refactor: migrate package tencentcloud/services/cfw --- tencentcloud/provider.go | 31 +- .../data_source_tc_cfw_edge_fw_switches.go | 22 +- ...ata_source_tc_cfw_edge_fw_switches_test.go | 10 +- .../data_source_tc_cfw_nat_fw_switches.go | 23 +- ...data_source_tc_cfw_nat_fw_switches_test.go | 10 +- .../data_source_tc_cfw_vpc_fw_switches.go | 22 +- ...data_source_tc_cfw_vpc_fw_switches_test.go | 10 +- tencentcloud/services/cfw/extension_cfw.go | 517 +++++++++++ .../cfw}/resource_tc_cfw_address_template.go | 53 +- .../resource_tc_cfw_address_template_test.go | 8 +- .../cfw}/resource_tc_cfw_block_ignore.go | 63 +- .../cfw}/resource_tc_cfw_block_ignore_test.go | 8 +- .../resource_tc_cfw_edge_firewall_switch.go | 45 +- ...source_tc_cfw_edge_firewall_switch_test.go | 8 +- .../cfw}/resource_tc_cfw_edge_policy.go | 57 +- .../cfw}/resource_tc_cfw_edge_policy_test.go | 8 +- .../resource_tc_cfw_nat_firewall_switch.go | 51 +- ...esource_tc_cfw_nat_firewall_switch_test.go | 8 +- .../cfw}/resource_tc_cfw_nat_instance.go | 65 +- .../cfw}/resource_tc_cfw_nat_instance_test.go | 8 +- .../cfw}/resource_tc_cfw_nat_policy.go | 55 +- .../cfw}/resource_tc_cfw_nat_policy_test.go | 8 +- .../cfw}/resource_tc_cfw_sync_asset.go | 32 +- .../cfw}/resource_tc_cfw_sync_asset_test.go | 8 +- .../cfw}/resource_tc_cfw_sync_route.go | 35 +- .../cfw}/resource_tc_cfw_sync_route_test.go | 8 +- .../resource_tc_cfw_vpc_firewall_switch.go | 51 +- ...esource_tc_cfw_vpc_firewall_switch_test.go | 8 +- .../cfw}/resource_tc_cfw_vpc_instance.go | 67 +- .../cfw}/resource_tc_cfw_vpc_instance_test.go | 8 +- .../cfw}/resource_tc_cfw_vpc_policy.go | 55 +- .../cfw}/resource_tc_cfw_vpc_policy_test.go | 8 +- .../services/cfw/service_tencentcloud_cfw.go | 849 ++++++++++++++++++ 33 files changed, 1829 insertions(+), 390 deletions(-) rename tencentcloud/{ => services/cfw}/data_source_tc_cfw_edge_fw_switches.go (85%) rename tencentcloud/{ => services/cfw}/data_source_tc_cfw_edge_fw_switches_test.go (68%) rename tencentcloud/{ => services/cfw}/data_source_tc_cfw_nat_fw_switches.go (90%) rename tencentcloud/{ => services/cfw}/data_source_tc_cfw_nat_fw_switches_test.go (69%) rename tencentcloud/{ => services/cfw}/data_source_tc_cfw_vpc_fw_switches.go (81%) rename tencentcloud/{ => services/cfw}/data_source_tc_cfw_vpc_fw_switches_test.go (69%) create mode 100644 tencentcloud/services/cfw/extension_cfw.go rename tencentcloud/{ => services/cfw}/resource_tc_cfw_address_template.go (71%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_address_template_test.go (92%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_block_ignore.go (78%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_block_ignore_test.go (93%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_edge_firewall_switch.go (72%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_edge_firewall_switch_test.go (90%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_edge_policy.go (84%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_edge_policy_test.go (95%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_nat_firewall_switch.go (68%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_nat_firewall_switch_test.go (91%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_nat_instance.go (86%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_nat_instance_test.go (89%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_nat_policy.go (82%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_nat_policy_test.go (95%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_sync_asset.go (61%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_sync_asset_test.go (78%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_sync_route.go (68%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_sync_route_test.go (79%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_vpc_firewall_switch.go (71%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_vpc_firewall_switch_test.go (91%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_vpc_instance.go (86%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_vpc_instance_test.go (91%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_vpc_policy.go (82%) rename tencentcloud/{ => services/cfw}/resource_tc_cfw_vpc_policy_test.go (89%) create mode 100644 tencentcloud/services/cfw/service_tencentcloud_cfw.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 98013bbcaa..414e9b05b2 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cfw" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cfs" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdwpg" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdwch" @@ -858,9 +859,9 @@ func Provider() *schema.Provider { "tencentcloud_waf_peak_points": dataSourceTencentCloudWafPeakPoints(), "tencentcloud_waf_instance_qps_limit": dataSourceTencentCloudWafInstanceQpsLimit(), "tencentcloud_waf_user_clb_regions": dataSourceTencentCloudWafUserClbRegions(), - "tencentcloud_cfw_nat_fw_switches": dataSourceTencentCloudCfwNatFwSwitches(), - "tencentcloud_cfw_vpc_fw_switches": dataSourceTencentCloudCfwVpcFwSwitches(), - "tencentcloud_cfw_edge_fw_switches": dataSourceTencentCloudCfwEdgeFwSwitches(), + "tencentcloud_cfw_nat_fw_switches": cfw.DataSourceTencentCloudCfwNatFwSwitches(), + "tencentcloud_cfw_vpc_fw_switches": cfw.DataSourceTencentCloudCfwVpcFwSwitches(), + "tencentcloud_cfw_edge_fw_switches": cfw.DataSourceTencentCloudCfwEdgeFwSwitches(), "tencentcloud_cwp_machines_simple": dataSourceTencentCloudCwpMachinesSimple(), "tencentcloud_ses_receivers": dataSourceTencentCloudSesReceivers(), "tencentcloud_ses_send_tasks": dataSourceTencentCloudSesSendTasks(), @@ -1813,18 +1814,18 @@ func Provider() *schema.Provider { "tencentcloud_wedata_integration_offline_task": resourceTencentCloudWedataIntegrationOfflineTask(), "tencentcloud_wedata_integration_realtime_task": resourceTencentCloudWedataIntegrationRealtimeTask(), "tencentcloud_wedata_integration_task_node": resourceTencentCloudWedataIntegrationTaskNode(), - "tencentcloud_cfw_address_template": resourceTencentCloudCfwAddressTemplate(), - "tencentcloud_cfw_block_ignore": resourceTencentCloudCfwBlockIgnore(), - "tencentcloud_cfw_edge_policy": resourceTencentCloudCfwEdgePolicy(), - "tencentcloud_cfw_nat_instance": resourceTencentCloudCfwNatInstance(), - "tencentcloud_cfw_nat_policy": resourceTencentCloudCfwNatPolicy(), - "tencentcloud_cfw_vpc_instance": resourceTencentCloudCfwVpcInstance(), - "tencentcloud_cfw_vpc_policy": resourceTencentCloudCfwVpcPolicy(), - "tencentcloud_cfw_sync_asset": resourceTencentCloudCfwSyncAsset(), - "tencentcloud_cfw_sync_route": resourceTencentCloudCfwSyncRoute(), - "tencentcloud_cfw_nat_firewall_switch": resourceTencentCloudCfwNatFirewallSwitch(), - "tencentcloud_cfw_vpc_firewall_switch": resourceTencentCloudCfwVpcFirewallSwitch(), - "tencentcloud_cfw_edge_firewall_switch": resourceTencentCloudCfwEdgeFirewallSwitch(), + "tencentcloud_cfw_address_template": cfw.ResourceTencentCloudCfwAddressTemplate(), + "tencentcloud_cfw_block_ignore": cfw.ResourceTencentCloudCfwBlockIgnore(), + "tencentcloud_cfw_edge_policy": cfw.ResourceTencentCloudCfwEdgePolicy(), + "tencentcloud_cfw_nat_instance": cfw.ResourceTencentCloudCfwNatInstance(), + "tencentcloud_cfw_nat_policy": cfw.ResourceTencentCloudCfwNatPolicy(), + "tencentcloud_cfw_vpc_instance": cfw.ResourceTencentCloudCfwVpcInstance(), + "tencentcloud_cfw_vpc_policy": cfw.ResourceTencentCloudCfwVpcPolicy(), + "tencentcloud_cfw_sync_asset": cfw.ResourceTencentCloudCfwSyncAsset(), + "tencentcloud_cfw_sync_route": cfw.ResourceTencentCloudCfwSyncRoute(), + "tencentcloud_cfw_nat_firewall_switch": cfw.ResourceTencentCloudCfwNatFirewallSwitch(), + "tencentcloud_cfw_vpc_firewall_switch": cfw.ResourceTencentCloudCfwVpcFirewallSwitch(), + "tencentcloud_cfw_edge_firewall_switch": cfw.ResourceTencentCloudCfwEdgeFirewallSwitch(), "tencentcloud_dasb_acl": bh.ResourceTencentCloudDasbAcl(), "tencentcloud_dasb_cmd_template": bh.ResourceTencentCloudDasbCmdTemplate(), "tencentcloud_dasb_device_group": bh.ResourceTencentCloudDasbDeviceGroup(), diff --git a/tencentcloud/data_source_tc_cfw_edge_fw_switches.go b/tencentcloud/services/cfw/data_source_tc_cfw_edge_fw_switches.go similarity index 85% rename from tencentcloud/data_source_tc_cfw_edge_fw_switches.go rename to tencentcloud/services/cfw/data_source_tc_cfw_edge_fw_switches.go index c2655a7966..4a9044ee49 100644 --- a/tencentcloud/data_source_tc_cfw_edge_fw_switches.go +++ b/tencentcloud/services/cfw/data_source_tc_cfw_edge_fw_switches.go @@ -1,16 +1,18 @@ -package tencentcloud +package cfw import ( "context" "strconv" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" ) -func dataSourceTencentCloudCfwEdgeFwSwitches() *schema.Resource { +func DataSourceTencentCloudCfwEdgeFwSwitches() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCfwEdgeFwSwitchesRead, Schema: map[string]*schema.Schema{ @@ -83,20 +85,20 @@ func dataSourceTencentCloudCfwEdgeFwSwitches() *schema.Resource { } func dataSourceTencentCloudCfwEdgeFwSwitchesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cfw_edge_fw_switches.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cfw_edge_fw_switches.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} data []*cfw.EdgeIpInfo ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCfwEdgeFwSwitchesByFilter(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } data = result @@ -162,7 +164,7 @@ func dataSourceTencentCloudCfwEdgeFwSwitchesRead(d *schema.ResourceData, meta in d.SetId(strconv.FormatInt(time.Now().Unix(), 10)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cfw_edge_fw_switches_test.go b/tencentcloud/services/cfw/data_source_tc_cfw_edge_fw_switches_test.go similarity index 68% rename from tencentcloud/data_source_tc_cfw_edge_fw_switches_test.go rename to tencentcloud/services/cfw/data_source_tc_cfw_edge_fw_switches_test.go index 3b02112f9e..425e63b27e 100644 --- a/tencentcloud/data_source_tc_cfw_edge_fw_switches_test.go +++ b/tencentcloud/services/cfw/data_source_tc_cfw_edge_fw_switches_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfw_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudNeedFixCfwEdgeFwSwitchesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfwEdgeFwSwitchesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cfw_edge_fw_switches.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cfw_edge_fw_switches.example"), ), }, }, diff --git a/tencentcloud/data_source_tc_cfw_nat_fw_switches.go b/tencentcloud/services/cfw/data_source_tc_cfw_nat_fw_switches.go similarity index 90% rename from tencentcloud/data_source_tc_cfw_nat_fw_switches.go rename to tencentcloud/services/cfw/data_source_tc_cfw_nat_fw_switches.go index c414d3d09e..56c897c539 100644 --- a/tencentcloud/data_source_tc_cfw_nat_fw_switches.go +++ b/tencentcloud/services/cfw/data_source_tc_cfw_nat_fw_switches.go @@ -1,15 +1,18 @@ -package tencentcloud +package cfw import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCfwNatFwSwitches() *schema.Resource { +func DataSourceTencentCloudCfwNatFwSwitches() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCfwNatFwSwitchesRead, Schema: map[string]*schema.Schema{ @@ -127,13 +130,13 @@ func dataSourceTencentCloudCfwNatFwSwitches() *schema.Resource { } func dataSourceTencentCloudCfwNatFwSwitchesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cfw_nat_fw_switches.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cfw_nat_fw_switches.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} data []*cfw.NatSwitchListData natInsId string ) @@ -148,10 +151,10 @@ func dataSourceTencentCloudCfwNatFwSwitchesRead(d *schema.ResourceData, meta int paramMap["Status"] = helper.IntInt64(v.(int)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCfwNatFwSwitchesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } data = result @@ -245,7 +248,7 @@ func dataSourceTencentCloudCfwNatFwSwitchesRead(d *schema.ResourceData, meta int d.SetId(natInsId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cfw_nat_fw_switches_test.go b/tencentcloud/services/cfw/data_source_tc_cfw_nat_fw_switches_test.go similarity index 69% rename from tencentcloud/data_source_tc_cfw_nat_fw_switches_test.go rename to tencentcloud/services/cfw/data_source_tc_cfw_nat_fw_switches_test.go index c6802d235f..50c709bbd7 100644 --- a/tencentcloud/data_source_tc_cfw_nat_fw_switches_test.go +++ b/tencentcloud/services/cfw/data_source_tc_cfw_nat_fw_switches_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfw_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudNeedFixCfwNatFwSwitchesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfwNatFwSwitchesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cfw_nat_fw_switches.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cfw_nat_fw_switches.example"), ), }, }, diff --git a/tencentcloud/data_source_tc_cfw_vpc_fw_switches.go b/tencentcloud/services/cfw/data_source_tc_cfw_vpc_fw_switches.go similarity index 81% rename from tencentcloud/data_source_tc_cfw_vpc_fw_switches.go rename to tencentcloud/services/cfw/data_source_tc_cfw_vpc_fw_switches.go index 52ad89f285..4eaac955a1 100644 --- a/tencentcloud/data_source_tc_cfw_vpc_fw_switches.go +++ b/tencentcloud/services/cfw/data_source_tc_cfw_vpc_fw_switches.go @@ -1,14 +1,16 @@ -package tencentcloud +package cfw import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" ) -func dataSourceTencentCloudCfwVpcFwSwitches() *schema.Resource { +func DataSourceTencentCloudCfwVpcFwSwitches() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCfwVpcFwSwitchesRead, Schema: map[string]*schema.Schema{ @@ -61,13 +63,13 @@ func dataSourceTencentCloudCfwVpcFwSwitches() *schema.Resource { } func dataSourceTencentCloudCfwVpcFwSwitchesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cfw_vpc_fw_switches.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cfw_vpc_fw_switches.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} switchList []*cfw.FwGroupSwitchShow vpcInsId string ) @@ -76,10 +78,10 @@ func dataSourceTencentCloudCfwVpcFwSwitchesRead(d *schema.ResourceData, meta int vpcInsId = v.(string) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCfwVpcFwSwitchesByFilter(ctx, vpcInsId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } switchList = result @@ -125,7 +127,7 @@ func dataSourceTencentCloudCfwVpcFwSwitchesRead(d *schema.ResourceData, meta int d.SetId(vpcInsId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cfw_vpc_fw_switches_test.go b/tencentcloud/services/cfw/data_source_tc_cfw_vpc_fw_switches_test.go similarity index 69% rename from tencentcloud/data_source_tc_cfw_vpc_fw_switches_test.go rename to tencentcloud/services/cfw/data_source_tc_cfw_vpc_fw_switches_test.go index 0bba32f403..8046e6261b 100644 --- a/tencentcloud/data_source_tc_cfw_vpc_fw_switches_test.go +++ b/tencentcloud/services/cfw/data_source_tc_cfw_vpc_fw_switches_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfw_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudNeedFixCfwVpcFwSwitchesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfwVpcFwSwitchesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cfw_vpc_fw_switches.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cfw_vpc_fw_switches.example"), ), }, }, diff --git a/tencentcloud/services/cfw/extension_cfw.go b/tencentcloud/services/cfw/extension_cfw.go new file mode 100644 index 0000000000..effe200fe2 --- /dev/null +++ b/tencentcloud/services/cfw/extension_cfw.go @@ -0,0 +1,517 @@ +package cfw + +const ( + ADDRESS_TEMPLATE_TYPE_1 = 1 + ADDRESS_TEMPLATE_TYPE_5 = 5 +) + +var ADDRESS_TEMPLATE_TYPE = []int{ + ADDRESS_TEMPLATE_TYPE_1, + ADDRESS_TEMPLATE_TYPE_5, +} + +const ( + RULE_TYPE_1 = 1 + RULE_TYPE_2 = 2 +) + +var RULE_TYPE = []int{ + RULE_TYPE_1, + RULE_TYPE_2, +} + +const ( + DIRECTION_0 = "0" + DIRECTION_1 = "1" + DIRECTION_3 = "3" +) + +var DIRECTION = []string{ + DIRECTION_0, + DIRECTION_1, + DIRECTION_3, +} + +const ( + MODE_0 = 0 + MODE_1 = 1 +) + +var MODE = []int{ + MODE_0, + MODE_1, +} + +const ( + CROSS_A_ZONE_0 = 0 + CROSS_A_ZONE_1 = 1 +) + +var CROSS_A_ZONE = []int{ + CROSS_A_ZONE_0, + CROSS_A_ZONE_1, +} + +var ZONE_MAP_EN2CN = map[string]string{ + "ap-guangzhou-1": "广州一区", + "ap-guangzhou-2": "广州二区", + "ap-guangzhou-3": "广州三区", + "ap-guangzhou-4": "广州四区", + "ap-guangzhou-5": "广州五区", + "ap-guangzhou-6": "广州六区", + "ap-guangzhou-7": "广州七区", + "ap-guangzhou-8": "广州八区", + "ap-guangzhou-9": "广州九区", + "ap-shenzhen-fsi-1": "深圳金融一区", + "ap-shenzhen-fsi-2": "深圳金融二区", + "ap-shenzhen-fsi-3": "深圳金融三区", + "ap-shenzhen-fsi-4": "深圳金融四区", + "ap-shenzhen-fsi-5": "深圳金融五区", + "ap-shenzhen-fsi-6": "深圳金融六区", + "ap-shenzhen-fsi-7": "深圳金融七区", + "ap-shenzhen-fsi-8": "深圳金融八区", + "ap-shenzhen-fsi-9": "深圳金融九区", + "ap-shanghai-1": "上海一区", + "ap-shanghai-2": "上海二区", + "ap-shanghai-3": "上海三区", + "ap-shanghai-4": "上海四区", + "ap-shanghai-5": "上海五区", + "ap-shanghai-6": "上海六区", + "ap-shanghai-7": "上海七区", + "ap-shanghai-8": "上海八区", + "ap-shanghai-9": "上海九区", + "ap-shanghai-fsi-1": "上海金融一区", + "ap-shanghai-fsi-2": "上海金融二区", + "ap-shanghai-fsi-3": "上海金融三区", + "ap-shanghai-fsi-4": "上海金融四区", + "ap-shanghai-fsi-5": "上海金融五区", + "ap-shanghai-fsi-6": "上海金融六区", + "ap-shanghai-fsi-7": "上海金融七区", + "ap-shanghai-fsi-8": "上海金融八区", + "ap-shanghai-fsi-9": "上海金融九区", + "ap-nanjing-1": "南京一区", + "ap-nanjing-2": "南京二区", + "ap-nanjing-3": "南京三区", + "ap-nanjing-4": "南京四区", + "ap-nanjing-5": "南京五区", + "ap-nanjing-6": "南京六区", + "ap-nanjing-7": "南京七区", + "ap-nanjing-8": "南京八区", + "ap-nanjing-9": "南京九区", + "ap-beijing-1": "北京一区", + "ap-beijing-2": "北京二区", + "ap-beijing-3": "北京三区", + "ap-beijing-4": "北京四区", + "ap-beijing-5": "北京五区", + "ap-beijing-6": "北京六区", + "ap-beijing-7": "北京七区", + "ap-beijing-8": "北京八区", + "ap-beijing-9": "北京九区", + "ap-chengdu-1": "成都一区", + "ap-chengdu-2": "成都二区", + "ap-chengdu-3": "成都三区", + "ap-chengdu-4": "成都四区", + "ap-chengdu-5": "成都五区", + "ap-chengdu-6": "成都六区", + "ap-chengdu-7": "成都七区", + "ap-chengdu-8": "成都八区", + "ap-chengdu-9": "成都九区", + "ap-chongqing-1": "重庆一区", + "ap-chongqing-2": "重庆二区", + "ap-chongqing-3": "重庆三区", + "ap-chongqing-4": "重庆四区", + "ap-chongqing-5": "重庆五区", + "ap-chongqing-6": "重庆六区", + "ap-chongqing-7": "重庆七区", + "ap-chongqing-8": "重庆八区", + "ap-chongqing-9": "重庆九区", + "ap-hongkong-1": "香港一区", + "ap-hongkong-2": "香港二区", + "ap-hongkong-3": "香港三区", + "ap-hongkong-4": "香港四区", + "ap-hongkong-5": "香港五区", + "ap-hongkong-6": "香港六区", + "ap-hongkong-7": "香港七区", + "ap-hongkong-8": "香港八区", + "ap-hongkong-9": "香港九区", + "ap-singapore-1": "新加坡一区", + "ap-singapore-2": "新加坡二区", + "ap-singapore-3": "新加坡三区", + "ap-singapore-4": "新加坡四区", + "ap-singapore-5": "新加坡五区", + "ap-singapore-6": "新加坡六区", + "ap-singapore-7": "新加坡七区", + "ap-singapore-8": "新加坡八区", + "ap-singapore-9": "新加坡九区", + "ap-seoul-1": "首尔一区", + "ap-seoul-2": "首尔二区", + "ap-seoul-3": "首尔三区", + "ap-seoul-4": "首尔四区", + "ap-seoul-5": "首尔五区", + "ap-seoul-6": "首尔六区", + "ap-seoul-7": "首尔七区", + "ap-seoul-8": "首尔八区", + "ap-seoul-9": "首尔九区", + "ap-tokyo-1": "东京一区", + "ap-tokyo-2": "东京二区", + "ap-tokyo-3": "东京三区", + "ap-tokyo-4": "东京四区", + "ap-tokyo-5": "东京五区", + "ap-tokyo-6": "东京六区", + "ap-tokyo-7": "东京七区", + "ap-tokyo-8": "东京八区", + "ap-tokyo-9": "东京九区", + "ap-mumbai-1": "孟买一区", + "ap-mumbai-2": "孟买二区", + "ap-mumbai-3": "孟买三区", + "ap-mumbai-4": "孟买四区", + "ap-mumbai-5": "孟买五区", + "ap-mumbai-6": "孟买六区", + "ap-mumbai-7": "孟买七区", + "ap-mumbai-8": "孟买八区", + "ap-mumbai-9": "孟买九区", + "ap-bangkok-1": "曼谷一区", + "ap-bangkok-2": "曼谷二区", + "ap-bangkok-3": "曼谷三区", + "ap-bangkok-4": "曼谷四区", + "ap-bangkok-5": "曼谷五区", + "ap-bangkok-6": "曼谷六区", + "ap-bangkok-7": "曼谷七区", + "ap-bangkok-8": "曼谷八区", + "ap-bangkok-9": "曼谷九区", + "ap-jakarta-1": "雅加达一区", + "ap-jakarta-2": "雅加达二区", + "ap-jakarta-3": "雅加达三区", + "ap-jakarta-4": "雅加达四区", + "ap-jakarta-5": "雅加达五区", + "ap-jakarta-6": "雅加达六区", + "ap-jakarta-7": "雅加达七区", + "ap-jakarta-8": "雅加达八区", + "sa-saopaulo-1": "圣保罗一区", + "sa-saopaulo-2": "圣保罗二区", + "sa-saopaulo-3": "圣保罗三区", + "sa-saopaulo-4": "圣保罗四区", + "sa-saopaulo-5": "圣保罗五区", + "sa-saopaulo-6": "圣保罗六区", + "sa-saopaulo-7": "圣保罗七区", + "sa-saopaulo-8": "圣保罗八区", + "na-toronto-1": "多伦多一区", + "na-toronto-2": "多伦多二区", + "na-toronto-3": "多伦多三区", + "na-toronto-4": "多伦多四区", + "na-toronto-5": "多伦多五区", + "na-toronto-6": "多伦多六区", + "na-toronto-7": "多伦多七区", + "na-toronto-8": "多伦多八区", + "na-toronto-9": "多伦多九区", + "na-siliconvalley-1": "硅谷一区", + "na-siliconvalley-2": "硅谷二区", + "na-siliconvalley-3": "硅谷三区", + "na-siliconvalley-4": "硅谷四区", + "na-siliconvalley-5": "硅谷五区", + "na-siliconvalley-6": "硅谷六区", + "na-siliconvalley-7": "硅谷七区", + "na-siliconvalley-8": "硅谷八区", + "na-siliconvalley-9": "硅谷九区", + "na-ashburn-1": "弗吉尼亚一区", + "na-ashburn-2": "弗吉尼亚二区", + "na-ashburn-3": "弗吉尼亚三区", + "na-ashburn-4": "弗吉尼亚四区", + "na-ashburn-5": "弗吉尼亚五区", + "na-ashburn-6": "弗吉尼亚六区", + "na-ashburn-7": "弗吉尼亚七区", + "na-ashburn-8": "弗吉尼亚八区", + "na-ashburn-9": "弗吉尼亚九区", + "eu-frankfurt-1": "法兰克福一区", + "eu-frankfurt-2": "法兰克福二区", + "eu-frankfurt-3": "法兰克福三区", + "eu-frankfurt-4": "法兰克福四区", + "eu-frankfurt-5": "法兰克福五区", + "eu-frankfurt-6": "法兰克福六区", + "eu-frankfurt-7": "法兰克福七区", + "eu-frankfurt-8": "法兰克福八区", + "eu-frankfurt-9": "法兰克福九区", + "eu-moscow-1": "莫斯科一区", + "eu-moscow-2": "莫斯科二区", + "eu-moscow-3": "莫斯科三区", + "eu-moscow-4": "莫斯科四区", + "eu-moscow-5": "莫斯科五区", + "eu-moscow-6": "莫斯科六区", + "eu-moscow-7": "莫斯科七区", + "eu-moscow-8": "莫斯科八区", + "eu-moscow-9": "莫斯科九区", + "ap-shanghai-adc-1": "上海自动驾驶云一区", + "ap-taipei-1": "中国台北一区", + "ap-taipei-2": "中国台北二区", + "ap-taipei-3": "中国台北三区", + "ap-taipei-4": "中国台北四区", + "ap-taipei-5": "中国台北五区", + "ap-taipei-6": "中国台北六区", +} + +var ZONE_MAP_CN2EN = map[string]string{ + "广州一区": "ap-guangzhou-1", + "广州二区": "ap-guangzhou-2", + "广州三区": "ap-guangzhou-3", + "广州四区": "ap-guangzhou-4", + "广州五区": "ap-guangzhou-5", + "广州六区": "ap-guangzhou-6", + "广州七区": "ap-guangzhou-7", + "广州八区": "ap-guangzhou-8", + "广州九区": "ap-guangzhou-9", + "深圳金融一区": "ap-shenzhen-fsi-1", + "深圳金融二区": "ap-shenzhen-fsi-2", + "深圳金融三区": "ap-shenzhen-fsi-3", + "深圳金融四区": "ap-shenzhen-fsi-4", + "深圳金融五区": "ap-shenzhen-fsi-5", + "深圳金融六区": "ap-shenzhen-fsi-6", + "深圳金融七区": "ap-shenzhen-fsi-7", + "深圳金融八区": "ap-shenzhen-fsi-8", + "深圳金融九区": "ap-shenzhen-fsi-9", + "上海一区": "ap-shanghai-1", + "上海二区": "ap-shanghai-2", + "上海三区": "ap-shanghai-3", + "上海四区": "ap-shanghai-4", + "上海五区": "ap-shanghai-5", + "上海六区": "ap-shanghai-6", + "上海七区": "ap-shanghai-7", + "上海八区": "ap-shanghai-8", + "上海九区": "ap-shanghai-9", + "上海金融一区": "ap-shanghai-fsi-1", + "上海金融二区": "ap-shanghai-fsi-2", + "上海金融三区": "ap-shanghai-fsi-3", + "上海金融四区": "ap-shanghai-fsi-4", + "上海金融五区": "ap-shanghai-fsi-5", + "上海金融六区": "ap-shanghai-fsi-6", + "上海金融七区": "ap-shanghai-fsi-7", + "上海金融八区": "ap-shanghai-fsi-8", + "上海金融九区": "ap-shanghai-fsi-9", + "南京一区": "ap-nanjing-1", + "南京二区": "ap-nanjing-2", + "南京三区": "ap-nanjing-3", + "南京四区": "ap-nanjing-4", + "南京五区": "ap-nanjing-5", + "南京六区": "ap-nanjing-6", + "南京七区": "ap-nanjing-7", + "南京八区": "ap-nanjing-8", + "南京九区": "ap-nanjing-9", + "北京一区": "ap-beijing-1", + "北京二区": "ap-beijing-2", + "北京三区": "ap-beijing-3", + "北京四区": "ap-beijing-4", + "北京五区": "ap-beijing-5", + "北京六区": "ap-beijing-6", + "北京七区": "ap-beijing-7", + "北京八区": "ap-beijing-8", + "北京九区": "ap-beijing-9", + "成都一区": "ap-chengdu-1", + "成都二区": "ap-chengdu-2", + "成都三区": "ap-chengdu-3", + "成都四区": "ap-chengdu-4", + "成都五区": "ap-chengdu-5", + "成都六区": "ap-chengdu-6", + "成都七区": "ap-chengdu-7", + "成都八区": "ap-chengdu-8", + "成都九区": "ap-chengdu-9", + "重庆一区": "ap-chongqing-1", + "重庆二区": "ap-chongqing-2", + "重庆三区": "ap-chongqing-3", + "重庆四区": "ap-chongqing-4", + "重庆五区": "ap-chongqing-5", + "重庆六区": "ap-chongqing-6", + "重庆七区": "ap-chongqing-7", + "重庆八区": "ap-chongqing-8", + "重庆九区": "ap-chongqing-9", + "香港一区": "ap-hongkong-1", + "香港二区": "ap-hongkong-2", + "香港三区": "ap-hongkong-3", + "香港四区": "ap-hongkong-4", + "香港五区": "ap-hongkong-5", + "香港六区": "ap-hongkong-6", + "香港七区": "ap-hongkong-7", + "香港八区": "ap-hongkong-8", + "香港九区": "ap-hongkong-9", + "新加坡一区": "ap-singapore-1", + "新加坡二区": "ap-singapore-2", + "新加坡三区": "ap-singapore-3", + "新加坡四区": "ap-singapore-4", + "新加坡五区": "ap-singapore-5", + "新加坡六区": "ap-singapore-6", + "新加坡七区": "ap-singapore-7", + "新加坡八区": "ap-singapore-8", + "新加坡九区": "ap-singapore-9", + "首尔一区": "ap-seoul-1", + "首尔二区": "ap-seoul-2", + "首尔三区": "ap-seoul-3", + "首尔四区": "ap-seoul-4", + "首尔五区": "ap-seoul-5", + "首尔六区": "ap-seoul-6", + "首尔七区": "ap-seoul-7", + "首尔八区": "ap-seoul-8", + "首尔九区": "ap-seoul-9", + "东京一区": "ap-tokyo-1", + "东京二区": "ap-tokyo-2", + "东京三区": "ap-tokyo-3", + "东京四区": "ap-tokyo-4", + "东京五区": "ap-tokyo-5", + "东京六区": "ap-tokyo-6", + "东京七区": "ap-tokyo-7", + "东京八区": "ap-tokyo-8", + "东京九区": "ap-tokyo-9", + "孟买一区": "ap-mumbai-1", + "孟买二区": "ap-mumbai-2", + "孟买三区": "ap-mumbai-3", + "孟买四区": "ap-mumbai-4", + "孟买五区": "ap-mumbai-5", + "孟买六区": "ap-mumbai-6", + "孟买七区": "ap-mumbai-7", + "孟买八区": "ap-mumbai-8", + "孟买九区": "ap-mumbai-9", + "曼谷一区": "ap-bangkok-1", + "曼谷二区": "ap-bangkok-2", + "曼谷三区": "ap-bangkok-3", + "曼谷四区": "ap-bangkok-4", + "曼谷五区": "ap-bangkok-5", + "曼谷六区": "ap-bangkok-6", + "曼谷七区": "ap-bangkok-7", + "曼谷八区": "ap-bangkok-8", + "曼谷九区": "ap-bangkok-9", + "雅加达一区": "ap-jakarta-1", + "雅加达二区": "ap-jakarta-2", + "雅加达三区": "ap-jakarta-3", + "雅加达四区": "ap-jakarta-4", + "雅加达五区": "ap-jakarta-5", + "雅加达六区": "ap-jakarta-6", + "雅加达七区": "ap-jakarta-7", + "雅加达八区": "ap-jakarta-8", + "圣保罗一区": "sa-saopaulo-1", + "圣保罗二区": "sa-saopaulo-2", + "圣保罗三区": "sa-saopaulo-3", + "圣保罗四区": "sa-saopaulo-4", + "圣保罗五区": "sa-saopaulo-5", + "圣保罗六区": "sa-saopaulo-6", + "圣保罗七区": "sa-saopaulo-7", + "圣保罗八区": "sa-saopaulo-8", + "多伦多一区": "na-toronto-1", + "多伦多二区": "na-toronto-2", + "多伦多三区": "na-toronto-3", + "多伦多四区": "na-toronto-4", + "多伦多五区": "na-toronto-5", + "多伦多六区": "na-toronto-6", + "多伦多七区": "na-toronto-7", + "多伦多八区": "na-toronto-8", + "多伦多九区": "na-toronto-9", + "硅谷一区": "na-siliconvalley-1", + "硅谷二区": "na-siliconvalley-2", + "硅谷三区": "na-siliconvalley-3", + "硅谷四区": "na-siliconvalley-4", + "硅谷五区": "na-siliconvalley-5", + "硅谷六区": "na-siliconvalley-6", + "硅谷七区": "na-siliconvalley-7", + "硅谷八区": "na-siliconvalley-8", + "硅谷九区": "na-siliconvalley-9", + "弗吉尼亚一区": "na-ashburn-1", + "弗吉尼亚二区": "na-ashburn-2", + "弗吉尼亚三区": "na-ashburn-3", + "弗吉尼亚四区": "na-ashburn-4", + "弗吉尼亚五区": "na-ashburn-5", + "弗吉尼亚六区": "na-ashburn-6", + "弗吉尼亚七区": "na-ashburn-7", + "弗吉尼亚八区": "na-ashburn-8", + "弗吉尼亚九区": "na-ashburn-9", + "法兰克福一区": "eu-frankfurt-1", + "法兰克福二区": "eu-frankfurt-2", + "法兰克福三区": "eu-frankfurt-3", + "法兰克福四区": "eu-frankfurt-4", + "法兰克福五区": "eu-frankfurt-5", + "法兰克福六区": "eu-frankfurt-6", + "法兰克福七区": "eu-frankfurt-7", + "法兰克福八区": "eu-frankfurt-8", + "法兰克福九区": "eu-frankfurt-9", + "莫斯科一区": "eu-moscow-1", + "莫斯科二区": "eu-moscow-2", + "莫斯科三区": "eu-moscow-3", + "莫斯科四区": "eu-moscow-4", + "莫斯科五区": "eu-moscow-5", + "莫斯科六区": "eu-moscow-6", + "莫斯科七区": "eu-moscow-7", + "莫斯科八区": "eu-moscow-8", + "莫斯科九区": "eu-moscow-9", + "上海自动驾驶云一区": "ap-shanghai-adc-1", + "中国台北一区": "ap-taipei-1", + "中国台北二区": "ap-taipei-2", + "中国台北三区": "ap-taipei-3", + "中国台北四区": "ap-taipei-4", + "中国台北五区": "ap-taipei-5", + "中国台北六区": "ap-taipei-6", +} + +const ( + BAND_WIDTH = 20 +) + +const ( + SWITCH_MODE_1 = 1 + SWITCH_MODE_2 = 2 + SWITCH_MODE_4 = 4 +) + +var SWITCH_MODE = []int{ + SWITCH_MODE_1, + SWITCH_MODE_2, + SWITCH_MODE_4, +} + +const ( + FW_TYPE_NAT = "nat" + FW_TYPE_EW = "ew" +) + +var FW_TYPE = []string{ + FW_TYPE_NAT, + FW_TYPE_EW, +} + +const ( + POLICY_ENABLE_TRUE = "true" + POLICY_ENABLE_FALSE = "false" +) + +var POLICY_ENABLE = []string{ + POLICY_ENABLE_TRUE, + POLICY_ENABLE_FALSE, +} + +const ( + POLICY_SCOPE_SERIAL = "serial" + POLICY_SCOPE_SIDE = "side" + POLICY_SCOPE_ALL = "all" +) + +var POLICY_SCOPE = []string{ + POLICY_SCOPE_SERIAL, + POLICY_SCOPE_SIDE, + POLICY_SCOPE_ALL, +} + +const ( + POLICY_RULE_ACTION_ACCEPT = "accept" + POLICY_RULE_ACTION_DROP = "drop" + POLICY_RULE_ACTION_LOG = "log" +) + +var POLICY_RULE_ACTION = []string{ + POLICY_RULE_ACTION_ACCEPT, + POLICY_RULE_ACTION_DROP, + POLICY_RULE_ACTION_LOG, +} + +type SourceContentJson struct { + Key string `json:"Key"` + Value string `json:"Value"` +} + +type TargetContentJson struct { + Key string `json:"Key"` + Value string `json:"Value"` +} diff --git a/tencentcloud/resource_tc_cfw_address_template.go b/tencentcloud/services/cfw/resource_tc_cfw_address_template.go similarity index 71% rename from tencentcloud/resource_tc_cfw_address_template.go rename to tencentcloud/services/cfw/resource_tc_cfw_address_template.go index bd40f142d8..3b41cf8fe3 100644 --- a/tencentcloud/resource_tc_cfw_address_template.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_address_template.go @@ -1,16 +1,19 @@ -package tencentcloud +package cfw import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCfwAddressTemplate() *schema.Resource { +func ResourceTencentCloudCfwAddressTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfwAddressTemplateCreate, Read: resourceTencentCloudCfwAddressTemplateRead, @@ -38,7 +41,7 @@ func resourceTencentCloudCfwAddressTemplate() *schema.Resource { "type": { Required: true, Type: schema.TypeInt, - ValidateFunc: validateAllowedIntValue(ADDRESS_TEMPLATE_TYPE), + ValidateFunc: tccommon.ValidateAllowedIntValue(ADDRESS_TEMPLATE_TYPE), Description: "1: ip template; 5: domain name templates.", }, }, @@ -46,11 +49,11 @@ func resourceTencentCloudCfwAddressTemplate() *schema.Resource { } func resourceTencentCloudCfwAddressTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_address_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_address_template.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cfw.NewCreateAddressTemplateRequest() response = cfw.NewCreateAddressTemplateResponse() uuid string @@ -72,10 +75,10 @@ func resourceTencentCloudCfwAddressTemplateCreate(d *schema.ResourceData, meta i request.Type = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().CreateAddressTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().CreateAddressTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -96,13 +99,13 @@ func resourceTencentCloudCfwAddressTemplateCreate(d *schema.ResourceData, meta i } func resourceTencentCloudCfwAddressTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_address_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_address_template.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} uuid = d.Id() ) @@ -137,11 +140,11 @@ func resourceTencentCloudCfwAddressTemplateRead(d *schema.ResourceData, meta int } func resourceTencentCloudCfwAddressTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_address_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_address_template.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cfw.NewModifyAddressTemplateRequest() uuid = d.Id() ) @@ -164,10 +167,10 @@ func resourceTencentCloudCfwAddressTemplateUpdate(d *schema.ResourceData, meta i request.Type = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().ModifyAddressTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().ModifyAddressTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -184,13 +187,13 @@ func resourceTencentCloudCfwAddressTemplateUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudCfwAddressTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_address_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_address_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} uuid = d.Id() ) diff --git a/tencentcloud/resource_tc_cfw_address_template_test.go b/tencentcloud/services/cfw/resource_tc_cfw_address_template_test.go similarity index 92% rename from tencentcloud/resource_tc_cfw_address_template_test.go rename to tencentcloud/services/cfw/resource_tc_cfw_address_template_test.go index b0ac08a9cd..d9839d9712 100644 --- a/tencentcloud/resource_tc_cfw_address_template_test.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_address_template_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfw_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCfwAddressTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfwAddressTemplate, diff --git a/tencentcloud/resource_tc_cfw_block_ignore.go b/tencentcloud/services/cfw/resource_tc_cfw_block_ignore.go similarity index 78% rename from tencentcloud/resource_tc_cfw_block_ignore.go rename to tencentcloud/services/cfw/resource_tc_cfw_block_ignore.go index 01a152b3f4..774394d9fc 100644 --- a/tencentcloud/resource_tc_cfw_block_ignore.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_block_ignore.go @@ -1,4 +1,4 @@ -package tencentcloud +package cfw import ( "context" @@ -7,13 +7,16 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCfwBlockIgnore() *schema.Resource { +func ResourceTencentCloudCfwBlockIgnore() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfwBlockIgnoreCreate, Read: resourceTencentCloudCfwBlockIgnoreRead, @@ -38,7 +41,7 @@ func resourceTencentCloudCfwBlockIgnore() *schema.Resource { "direction": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(DIRECTION), + ValidateFunc: tccommon.ValidateAllowedStringValue(DIRECTION), Description: "Rule direction, 0 outbound, 1 inbound, 3 intranet.", }, "end_time": { @@ -60,7 +63,7 @@ func resourceTencentCloudCfwBlockIgnore() *schema.Resource { "rule_type": { Required: true, Type: schema.TypeInt, - ValidateFunc: validateAllowedIntValue(RULE_TYPE), + ValidateFunc: tccommon.ValidateAllowedIntValue(RULE_TYPE), Description: "Rule type, 1 block, 2 ignore, domain block is not supported.", }, }, @@ -68,11 +71,11 @@ func resourceTencentCloudCfwBlockIgnore() *schema.Resource { } func resourceTencentCloudCfwBlockIgnoreCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_block_ignore.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_block_ignore.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cfw.NewCreateBlockIgnoreRuleListRequest() intrusionDefenseRule = cfw.IntrusionDefenseRule{} iP string @@ -116,10 +119,10 @@ func resourceTencentCloudCfwBlockIgnoreCreate(d *schema.ResourceData, meta inter ruleType = strconv.Itoa(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().CreateBlockIgnoreRuleList(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().CreateBlockIgnoreRuleList(request) if e != nil { - return retryError(e) + 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()) } @@ -132,22 +135,22 @@ func resourceTencentCloudCfwBlockIgnoreCreate(d *schema.ResourceData, meta inter return err } - d.SetId(strings.Join([]string{iP, domain, direction, ruleType}, FILED_SP)) + d.SetId(strings.Join([]string{iP, domain, direction, ruleType}, tccommon.FILED_SP)) return resourceTencentCloudCfwBlockIgnoreRead(d, meta) } func resourceTencentCloudCfwBlockIgnoreRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_block_ignore.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_block_ignore.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -201,11 +204,11 @@ func resourceTencentCloudCfwBlockIgnoreRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudCfwBlockIgnoreUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_block_ignore.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_block_ignore.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cfw.NewModifyBlockIgnoreRuleRequest() intrusionDefenseRule = cfw.IntrusionDefenseRule{} ) @@ -218,7 +221,7 @@ func resourceTencentCloudCfwBlockIgnoreUpdate(d *schema.ResourceData, meta inter } } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -253,10 +256,10 @@ func resourceTencentCloudCfwBlockIgnoreUpdate(d *schema.ResourceData, meta inter request.Rule = &intrusionDefenseRule - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().ModifyBlockIgnoreRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().ModifyBlockIgnoreRule(request) if e != nil { - return retryError(e) + 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()) } @@ -272,16 +275,16 @@ func resourceTencentCloudCfwBlockIgnoreUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudCfwBlockIgnoreDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_block_ignore.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_block_ignore.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_cfw_block_ignore_test.go b/tencentcloud/services/cfw/resource_tc_cfw_block_ignore_test.go similarity index 93% rename from tencentcloud/resource_tc_cfw_block_ignore_test.go rename to tencentcloud/services/cfw/resource_tc_cfw_block_ignore_test.go index 3dfd333630..b535204cc7 100644 --- a/tencentcloud/resource_tc_cfw_block_ignore_test.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_block_ignore_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfw_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCfwBlockIgnoreListResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfwBlockIgnoreIp, diff --git a/tencentcloud/resource_tc_cfw_edge_firewall_switch.go b/tencentcloud/services/cfw/resource_tc_cfw_edge_firewall_switch.go similarity index 72% rename from tencentcloud/resource_tc_cfw_edge_firewall_switch.go rename to tencentcloud/services/cfw/resource_tc_cfw_edge_firewall_switch.go index cf382c170f..cf9fc6a392 100644 --- a/tencentcloud/resource_tc_cfw_edge_firewall_switch.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_edge_firewall_switch.go @@ -1,17 +1,20 @@ -package tencentcloud +package cfw import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCfwEdgeFirewallSwitch() *schema.Resource { +func ResourceTencentCloudCfwEdgeFirewallSwitch() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfwEdgeFirewallSwitchCreate, Read: resourceTencentCloudCfwEdgeFirewallSwitchRead, @@ -45,8 +48,8 @@ func resourceTencentCloudCfwEdgeFirewallSwitch() *schema.Resource { } func resourceTencentCloudCfwEdgeFirewallSwitchCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_edge_firewall_switch.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_edge_firewall_switch.create")() + defer tccommon.InconsistentCheck(d, meta)() publicIp := d.Get("public_ip").(string) d.SetId(publicIp) @@ -55,13 +58,13 @@ func resourceTencentCloudCfwEdgeFirewallSwitchCreate(d *schema.ResourceData, met } func resourceTencentCloudCfwEdgeFirewallSwitchRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_edge_firewall_switch.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_edge_firewall_switch.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} publicIp = d.Id() ) @@ -92,13 +95,13 @@ func resourceTencentCloudCfwEdgeFirewallSwitchRead(d *schema.ResourceData, meta } func resourceTencentCloudCfwEdgeFirewallSwitchUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_edge_firewall_switch.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_edge_firewall_switch.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = cfw.NewModifyEdgeIpSwitchRequest() edgeIpSwitch = cfw.EdgeIpSwitch{} publicIp = d.Id() @@ -120,10 +123,10 @@ func resourceTencentCloudCfwEdgeFirewallSwitchUpdate(d *schema.ResourceData, met request.EdgeIpSwitchLst = append(request.EdgeIpSwitchLst, &edgeIpSwitch) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().ModifyEdgeIpSwitch(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().ModifyEdgeIpSwitch(request) if e != nil { - return retryError(e) + 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()) } @@ -137,10 +140,10 @@ func resourceTencentCloudCfwEdgeFirewallSwitchUpdate(d *schema.ResourceData, met } // wait - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { switchDetail, e := service.DescribeCfwEdgeFirewallSwitchById(ctx, publicIp) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if *switchDetail.Status == 0 || *switchDetail.Status == 1 { @@ -158,8 +161,8 @@ func resourceTencentCloudCfwEdgeFirewallSwitchUpdate(d *schema.ResourceData, met } func resourceTencentCloudCfwEdgeFirewallSwitchDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_edge_firewall_switch.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_edge_firewall_switch.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cfw_edge_firewall_switch_test.go b/tencentcloud/services/cfw/resource_tc_cfw_edge_firewall_switch_test.go similarity index 90% rename from tencentcloud/resource_tc_cfw_edge_firewall_switch_test.go rename to tencentcloud/services/cfw/resource_tc_cfw_edge_firewall_switch_test.go index d1c8cf4fcc..5e22ba034d 100644 --- a/tencentcloud/resource_tc_cfw_edge_firewall_switch_test.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_edge_firewall_switch_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfw_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCfwEdgeFirewallSwitchResource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfwEdgeFirewallSwitch, diff --git a/tencentcloud/resource_tc_cfw_edge_policy.go b/tencentcloud/services/cfw/resource_tc_cfw_edge_policy.go similarity index 84% rename from tencentcloud/resource_tc_cfw_edge_policy.go rename to tencentcloud/services/cfw/resource_tc_cfw_edge_policy.go index 33730ced7c..c52fc1a5b3 100644 --- a/tencentcloud/resource_tc_cfw_edge_policy.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_edge_policy.go @@ -1,4 +1,4 @@ -package tencentcloud +package cfw import ( "context" @@ -8,13 +8,16 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCfwEdgePolicy() *schema.Resource { +func ResourceTencentCloudCfwEdgePolicy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfwEdgePolicyCreate, Read: resourceTencentCloudCfwEdgePolicyRead, @@ -52,7 +55,7 @@ func resourceTencentCloudCfwEdgePolicy() *schema.Resource { "rule_action": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(POLICY_RULE_ACTION), + ValidateFunc: tccommon.ValidateAllowedStringValue(POLICY_RULE_ACTION), Description: "How the traffic set in the access control policy passes through the cloud firewall. Values: accept: allow; drop: reject; log: observe.", }, "port": { @@ -74,7 +77,7 @@ func resourceTencentCloudCfwEdgePolicy() *schema.Resource { Type: schema.TypeString, Optional: true, Default: POLICY_ENABLE_TRUE, - ValidateFunc: validateAllowedStringValue(POLICY_ENABLE), + ValidateFunc: tccommon.ValidateAllowedStringValue(POLICY_ENABLE), Description: "Rule status, true means enabled, false means disabled. Default is true.", }, "description": { @@ -86,7 +89,7 @@ func resourceTencentCloudCfwEdgePolicy() *schema.Resource { Type: schema.TypeString, Optional: true, Default: POLICY_SCOPE_ALL, - ValidateFunc: validateAllowedStringValue(POLICY_SCOPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(POLICY_SCOPE), Description: "Effective range. serial: serial; side: bypass; all: global, Default is all.", }, }, @@ -94,11 +97,11 @@ func resourceTencentCloudCfwEdgePolicy() *schema.Resource { } func resourceTencentCloudCfwEdgePolicyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_edge_policy.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_edge_policy.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cfw.NewAddAclRuleRequest() response = cfw.NewAddAclRuleResponse() createRuleItem = cfw.CreateRuleItem{} @@ -151,10 +154,10 @@ func resourceTencentCloudCfwEdgePolicyCreate(d *schema.ResourceData, meta interf request.Rules = append(request.Rules, &createRuleItem) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().AddAclRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().AddAclRule(request) if e != nil { - return retryError(e) + 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()) } @@ -176,13 +179,13 @@ func resourceTencentCloudCfwEdgePolicyCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudCfwEdgePolicyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_edge_policy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_edge_policy.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ruleUuid = d.Id() sourceType string targetType string @@ -271,11 +274,11 @@ func resourceTencentCloudCfwEdgePolicyRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudCfwEdgePolicyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_edge_policy.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_edge_policy.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cfw.NewModifyAclRuleRequest() modifyRuleItem = cfw.CreateRuleItem{} uuid = d.Id() @@ -338,10 +341,10 @@ func resourceTencentCloudCfwEdgePolicyUpdate(d *schema.ResourceData, meta interf request.Rules = append(request.Rules, &modifyRuleItem) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().ModifyAclRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().ModifyAclRule(request) if e != nil { - return retryError(e) + 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()) } @@ -358,13 +361,13 @@ func resourceTencentCloudCfwEdgePolicyUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudCfwEdgePolicyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_edge_policy.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_edge_policy.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} uuid = d.Id() ) diff --git a/tencentcloud/resource_tc_cfw_edge_policy_test.go b/tencentcloud/services/cfw/resource_tc_cfw_edge_policy_test.go similarity index 95% rename from tencentcloud/resource_tc_cfw_edge_policy_test.go rename to tencentcloud/services/cfw/resource_tc_cfw_edge_policy_test.go index c552f0d4cd..0c2462b42d 100644 --- a/tencentcloud/resource_tc_cfw_edge_policy_test.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_edge_policy_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfw_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCfwEdgePolicyResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfwEdgePolicy, diff --git a/tencentcloud/resource_tc_cfw_nat_firewall_switch.go b/tencentcloud/services/cfw/resource_tc_cfw_nat_firewall_switch.go similarity index 68% rename from tencentcloud/resource_tc_cfw_nat_firewall_switch.go rename to tencentcloud/services/cfw/resource_tc_cfw_nat_firewall_switch.go index 2360567919..251f6aa0a4 100644 --- a/tencentcloud/resource_tc_cfw_nat_firewall_switch.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_nat_firewall_switch.go @@ -1,4 +1,4 @@ -package tencentcloud +package cfw import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCfwNatFirewallSwitch() *schema.Resource { +func ResourceTencentCloudCfwNatFirewallSwitch() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfwNatFirewallSwitchCreate, Read: resourceTencentCloudCfwNatFirewallSwitchRead, @@ -45,28 +48,28 @@ func resourceTencentCloudCfwNatFirewallSwitch() *schema.Resource { } func resourceTencentCloudCfwNatFirewallSwitchCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_nat_firewall_switch.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_nat_firewall_switch.create")() + defer tccommon.InconsistentCheck(d, meta)() natInsId := d.Get("nat_ins_id").(string) subnetId := d.Get("subnet_id").(string) - d.SetId(strings.Join([]string{natInsId, subnetId}, FILED_SP)) + d.SetId(strings.Join([]string{natInsId, subnetId}, tccommon.FILED_SP)) return resourceTencentCloudCfwNatFirewallSwitchUpdate(d, meta) } func resourceTencentCloudCfwNatFirewallSwitchRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_nat_firewall_switch.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_nat_firewall_switch.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -92,17 +95,17 @@ func resourceTencentCloudCfwNatFirewallSwitchRead(d *schema.ResourceData, meta i } func resourceTencentCloudCfwNatFirewallSwitchUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_nat_firewall_switch.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_nat_firewall_switch.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = cfw.NewModifyNatFwSwitchRequest() ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -115,10 +118,10 @@ func resourceTencentCloudCfwNatFirewallSwitchUpdate(d *schema.ResourceData, meta request.SubnetIdList = common.StringPtrs([]string{subnetId}) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().ModifyNatFwSwitch(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().ModifyNatFwSwitch(request) if e != nil { - return retryError(e) + 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()) } @@ -132,10 +135,10 @@ func resourceTencentCloudCfwNatFirewallSwitchUpdate(d *schema.ResourceData, meta } // wait - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { switchDetail, e := service.DescribeCfwNatFirewallSwitchById(ctx, natInsId, subnetId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if *switchDetail.Status == 0 { @@ -153,8 +156,8 @@ func resourceTencentCloudCfwNatFirewallSwitchUpdate(d *schema.ResourceData, meta } func resourceTencentCloudCfwNatFirewallSwitchDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_nat_firewall_switch.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_nat_firewall_switch.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cfw_nat_firewall_switch_test.go b/tencentcloud/services/cfw/resource_tc_cfw_nat_firewall_switch_test.go similarity index 91% rename from tencentcloud/resource_tc_cfw_nat_firewall_switch_test.go rename to tencentcloud/services/cfw/resource_tc_cfw_nat_firewall_switch_test.go index e580b588ae..b6be75f793 100644 --- a/tencentcloud/resource_tc_cfw_nat_firewall_switch_test.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_nat_firewall_switch_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfw_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCfwNatFirewallSwitchResource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfwNatFirewallSwitch, diff --git a/tencentcloud/resource_tc_cfw_nat_instance.go b/tencentcloud/services/cfw/resource_tc_cfw_nat_instance.go similarity index 86% rename from tencentcloud/resource_tc_cfw_nat_instance.go rename to tencentcloud/services/cfw/resource_tc_cfw_nat_instance.go index 5dda751f09..f01a455278 100644 --- a/tencentcloud/resource_tc_cfw_nat_instance.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_nat_instance.go @@ -1,17 +1,20 @@ -package tencentcloud +package cfw import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCfwNatInstance() *schema.Resource { +func ResourceTencentCloudCfwNatInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfwNatInstanceCreate, Read: resourceTencentCloudCfwNatInstanceRead, @@ -29,13 +32,13 @@ func resourceTencentCloudCfwNatInstance() *schema.Resource { "width": { Required: true, Type: schema.TypeInt, - ValidateFunc: validateIntegerMin(BAND_WIDTH), + ValidateFunc: tccommon.ValidateIntegerMin(BAND_WIDTH), Description: "Bandwidth.", }, "mode": { Required: true, Type: schema.TypeInt, - ValidateFunc: validateAllowedIntValue(MODE), + ValidateFunc: tccommon.ValidateAllowedIntValue(MODE), Description: "Mode 1: access mode; 0: new mode.", }, "new_mode_items": { @@ -80,7 +83,7 @@ func resourceTencentCloudCfwNatInstance() *schema.Resource { Optional: true, Type: schema.TypeInt, Default: CROSS_A_ZONE_0, - ValidateFunc: validateAllowedIntValue(CROSS_A_ZONE), + ValidateFunc: tccommon.ValidateAllowedIntValue(CROSS_A_ZONE), Description: "Off-site disaster recovery 1: use off-site disaster recovery; 0: do not use off-site disaster recovery; if empty, the default is not to use off-site disaster recovery.", }, //"domain": { @@ -132,13 +135,13 @@ func resourceTencentCloudCfwNatInstance() *schema.Resource { } func resourceTencentCloudCfwNatInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_nat_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_nat_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = cfw.NewCreateNatFwInstanceWithDomainRequest() response = cfw.NewCreateNatFwInstanceWithDomainResponse() instanceId string @@ -277,10 +280,10 @@ func resourceTencentCloudCfwNatInstanceCreate(d *schema.ResourceData, meta inter fwCidrInfo.ComFwCidr = helper.String("") request.FwCidrInfo = &fwCidrInfo - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().CreateNatFwInstanceWithDomain(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().CreateNatFwInstanceWithDomain(request) if e != nil { - return retryError(e) + 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()) } @@ -298,10 +301,10 @@ func resourceTencentCloudCfwNatInstanceCreate(d *schema.ResourceData, meta inter d.SetId(instanceId) // wait - err = resource.Retry(writeRetryTimeout*3, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout*3, func() *resource.RetryError { natInstance, e := service.DescribeCfwNatInstanceById(ctx, instanceId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if natInstance == nil { @@ -325,13 +328,13 @@ func resourceTencentCloudCfwNatInstanceCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudCfwNatInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_nat_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_nat_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId = d.Id() zone string zoneBak string @@ -467,11 +470,11 @@ func resourceTencentCloudCfwNatInstanceRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudCfwNatInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_nat_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_nat_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cfw.NewModifyNatInstanceRequest() instanceId = d.Id() ) @@ -490,10 +493,10 @@ func resourceTencentCloudCfwNatInstanceUpdate(d *schema.ResourceData, meta inter request.InstanceName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().ModifyNatInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().ModifyNatInstance(request) if e != nil { - return retryError(e) + 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()) } @@ -510,13 +513,13 @@ func resourceTencentCloudCfwNatInstanceUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudCfwNatInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_nat_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_nat_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId = d.Id() ) diff --git a/tencentcloud/resource_tc_cfw_nat_instance_test.go b/tencentcloud/services/cfw/resource_tc_cfw_nat_instance_test.go similarity index 89% rename from tencentcloud/resource_tc_cfw_nat_instance_test.go rename to tencentcloud/services/cfw/resource_tc_cfw_nat_instance_test.go index 1cdfcbc562..3c016e4ca5 100644 --- a/tencentcloud/resource_tc_cfw_nat_instance_test.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_nat_instance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfw_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCfwNatInstanceResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfwNatInstance, diff --git a/tencentcloud/resource_tc_cfw_nat_policy.go b/tencentcloud/services/cfw/resource_tc_cfw_nat_policy.go similarity index 82% rename from tencentcloud/resource_tc_cfw_nat_policy.go rename to tencentcloud/services/cfw/resource_tc_cfw_nat_policy.go index 1195cfde4f..2050dc7b7d 100644 --- a/tencentcloud/resource_tc_cfw_nat_policy.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_nat_policy.go @@ -1,4 +1,4 @@ -package tencentcloud +package cfw import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCfwNatPolicy() *schema.Resource { +func ResourceTencentCloudCfwNatPolicy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfwNatPolicyCreate, Read: resourceTencentCloudCfwNatPolicyRead, @@ -50,7 +53,7 @@ func resourceTencentCloudCfwNatPolicy() *schema.Resource { "rule_action": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(POLICY_RULE_ACTION), + ValidateFunc: tccommon.ValidateAllowedStringValue(POLICY_RULE_ACTION), Description: "How the traffic set in the access control policy passes through the cloud firewall. Values: accept: allow; drop: reject; log: observe.", }, "port": { @@ -72,7 +75,7 @@ func resourceTencentCloudCfwNatPolicy() *schema.Resource { Type: schema.TypeString, Optional: true, Default: POLICY_ENABLE_TRUE, - ValidateFunc: validateAllowedStringValue(POLICY_ENABLE), + ValidateFunc: tccommon.ValidateAllowedStringValue(POLICY_ENABLE), Description: "Rule status, true means enabled, false means disabled. Default is true.", }, "description": { @@ -85,11 +88,11 @@ func resourceTencentCloudCfwNatPolicy() *schema.Resource { } func resourceTencentCloudCfwNatPolicyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_nat_policy.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_nat_policy.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cfw.NewAddNatAcRuleRequest() response = cfw.NewAddNatAcRuleResponse() createNatRuleItem = cfw.CreateNatRuleItem{} @@ -138,10 +141,10 @@ func resourceTencentCloudCfwNatPolicyCreate(d *schema.ResourceData, meta interfa request.Rules = append(request.Rules, &createNatRuleItem) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().AddNatAcRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().AddNatAcRule(request) if e != nil { - return retryError(e) + 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()) } @@ -163,13 +166,13 @@ func resourceTencentCloudCfwNatPolicyCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudCfwNatPolicyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_nat_policy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_nat_policy.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ruleUuid = d.Id() ) @@ -232,11 +235,11 @@ func resourceTencentCloudCfwNatPolicyRead(d *schema.ResourceData, meta interface } func resourceTencentCloudCfwNatPolicyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_nat_policy.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_nat_policy.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cfw.NewModifyNatAcRuleRequest() modifyRuleItem = cfw.CreateNatRuleItem{} uuid = d.Id() @@ -295,10 +298,10 @@ func resourceTencentCloudCfwNatPolicyUpdate(d *schema.ResourceData, meta interfa request.Rules = append(request.Rules, &modifyRuleItem) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().ModifyNatAcRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().ModifyNatAcRule(request) if e != nil { - return retryError(e) + 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()) } @@ -315,13 +318,13 @@ func resourceTencentCloudCfwNatPolicyUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudCfwNatPolicyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_nat_policy.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_nat_policy.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} uuid = d.Id() ) diff --git a/tencentcloud/resource_tc_cfw_nat_policy_test.go b/tencentcloud/services/cfw/resource_tc_cfw_nat_policy_test.go similarity index 95% rename from tencentcloud/resource_tc_cfw_nat_policy_test.go rename to tencentcloud/services/cfw/resource_tc_cfw_nat_policy_test.go index c7fe229a7f..ef8a9ab86c 100644 --- a/tencentcloud/resource_tc_cfw_nat_policy_test.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_nat_policy_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfw_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCfwNatPolicyResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfwNatPolicy, diff --git a/tencentcloud/resource_tc_cfw_sync_asset.go b/tencentcloud/services/cfw/resource_tc_cfw_sync_asset.go similarity index 61% rename from tencentcloud/resource_tc_cfw_sync_asset.go rename to tencentcloud/services/cfw/resource_tc_cfw_sync_asset.go index 090fa58d22..1b12c1811c 100644 --- a/tencentcloud/resource_tc_cfw_sync_asset.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_sync_asset.go @@ -1,4 +1,4 @@ -package tencentcloud +package cfw import ( "fmt" @@ -6,12 +6,14 @@ import ( "strconv" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" ) -func resourceTencentCloudCfwSyncAsset() *schema.Resource { +func ResourceTencentCloudCfwSyncAsset() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfwSyncAssetCreate, Read: resourceTencentCloudCfwSyncAssetRead, @@ -21,19 +23,19 @@ func resourceTencentCloudCfwSyncAsset() *schema.Resource { } func resourceTencentCloudCfwSyncAssetCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_sync_asset.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_sync_asset.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cfw.NewModifyAssetSyncRequest() statusRequest = cfw.NewDescribeAssetSyncRequest() ) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().ModifyAssetSync(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().ModifyAssetSync(request) if e != nil { - return retryError(e) + 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()) } @@ -47,10 +49,10 @@ func resourceTencentCloudCfwSyncAssetCreate(d *schema.ResourceData, meta interfa } // wait - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().DescribeAssetSync(statusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().DescribeAssetSync(statusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if *result.Response.Status == 2 { @@ -71,15 +73,15 @@ func resourceTencentCloudCfwSyncAssetCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudCfwSyncAssetRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_sync_asset.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_sync_asset.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCfwSyncAssetDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_sync_asset.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_sync_asset.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cfw_sync_asset_test.go b/tencentcloud/services/cfw/resource_tc_cfw_sync_asset_test.go similarity index 78% rename from tencentcloud/resource_tc_cfw_sync_asset_test.go rename to tencentcloud/services/cfw/resource_tc_cfw_sync_asset_test.go index 7f7f811188..43a6038040 100644 --- a/tencentcloud/resource_tc_cfw_sync_asset_test.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_sync_asset_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfw_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCfwSyncAssetResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfwCfwSyncAsset, diff --git a/tencentcloud/resource_tc_cfw_sync_route.go b/tencentcloud/services/cfw/resource_tc_cfw_sync_route.go similarity index 68% rename from tencentcloud/resource_tc_cfw_sync_route.go rename to tencentcloud/services/cfw/resource_tc_cfw_sync_route.go index 40b010d988..71239ff1ef 100644 --- a/tencentcloud/resource_tc_cfw_sync_route.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_sync_route.go @@ -1,4 +1,4 @@ -package tencentcloud +package cfw import ( "fmt" @@ -6,13 +6,16 @@ import ( "strconv" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCfwSyncRoute() *schema.Resource { +func ResourceTencentCloudCfwSyncRoute() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfwSyncRouteCreate, Read: resourceTencentCloudCfwSyncRouteRead, @@ -29,7 +32,7 @@ func resourceTencentCloudCfwSyncRoute() *schema.Resource { Optional: true, ForceNew: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(FW_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(FW_TYPE), Description: "Firewall type; nat: nat firewall; ew: inter-vpc firewall.", }, }, @@ -37,11 +40,11 @@ func resourceTencentCloudCfwSyncRoute() *schema.Resource { } func resourceTencentCloudCfwSyncRouteCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_sync_route.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_sync_route.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cfw.NewSyncFwOperateRequest() statusRequest = cfw.NewDescribeFwSyncStatusRequest() ) @@ -54,10 +57,10 @@ func resourceTencentCloudCfwSyncRouteCreate(d *schema.ResourceData, meta interfa request.FwType = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().SyncFwOperate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().SyncFwOperate(request) if e != nil { - return retryError(e) + 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()) } @@ -71,10 +74,10 @@ func resourceTencentCloudCfwSyncRouteCreate(d *schema.ResourceData, meta interfa } // wait - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().DescribeFwSyncStatus(statusRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().DescribeFwSyncStatus(statusRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if *result.Response.SyncStatus == 0 { @@ -95,15 +98,15 @@ func resourceTencentCloudCfwSyncRouteCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudCfwSyncRouteRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_sync_route.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_sync_route.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCfwSyncRouteDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_sync_route.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_sync_route.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cfw_sync_route_test.go b/tencentcloud/services/cfw/resource_tc_cfw_sync_route_test.go similarity index 79% rename from tencentcloud/resource_tc_cfw_sync_route_test.go rename to tencentcloud/services/cfw/resource_tc_cfw_sync_route_test.go index ddb41ef651..68921a826b 100644 --- a/tencentcloud/resource_tc_cfw_sync_route_test.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_sync_route_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfw_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCfwSyncRouteResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfwSyncRoute, diff --git a/tencentcloud/resource_tc_cfw_vpc_firewall_switch.go b/tencentcloud/services/cfw/resource_tc_cfw_vpc_firewall_switch.go similarity index 71% rename from tencentcloud/resource_tc_cfw_vpc_firewall_switch.go rename to tencentcloud/services/cfw/resource_tc_cfw_vpc_firewall_switch.go index 812cca656c..9cd0467d8d 100644 --- a/tencentcloud/resource_tc_cfw_vpc_firewall_switch.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_vpc_firewall_switch.go @@ -1,4 +1,4 @@ -package tencentcloud +package cfw import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCfwVpcFirewallSwitch() *schema.Resource { +func ResourceTencentCloudCfwVpcFirewallSwitch() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfwVpcFirewallSwitchCreate, Read: resourceTencentCloudCfwVpcFirewallSwitchRead, @@ -45,28 +48,28 @@ func resourceTencentCloudCfwVpcFirewallSwitch() *schema.Resource { } func resourceTencentCloudCfwVpcFirewallSwitchCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_vpc_firewall_switch.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_vpc_firewall_switch.create")() + defer tccommon.InconsistentCheck(d, meta)() vpcInsId := d.Get("vpc_ins_id").(string) switchId := d.Get("switch_id").(string) - d.SetId(strings.Join([]string{vpcInsId, switchId}, FILED_SP)) + d.SetId(strings.Join([]string{vpcInsId, switchId}, tccommon.FILED_SP)) return resourceTencentCloudCfwVpcFirewallSwitchUpdate(d, meta) } func resourceTencentCloudCfwVpcFirewallSwitchRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_vpc_firewall_switch.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_vpc_firewall_switch.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -92,18 +95,18 @@ func resourceTencentCloudCfwVpcFirewallSwitchRead(d *schema.ResourceData, meta i } func resourceTencentCloudCfwVpcFirewallSwitchUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_vpc_firewall_switch.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_vpc_firewall_switch.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = cfw.NewModifyFwGroupSwitchRequest() switchMode int64 ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -138,10 +141,10 @@ func resourceTencentCloudCfwVpcFirewallSwitchUpdate(d *schema.ResourceData, meta }, } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().ModifyFwGroupSwitch(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().ModifyFwGroupSwitch(request) if e != nil { - return retryError(e) + 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()) } @@ -155,10 +158,10 @@ func resourceTencentCloudCfwVpcFirewallSwitchUpdate(d *schema.ResourceData, meta } // wait - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { switchDetail, e := service.DescribeCfwVpcFirewallSwitchById(ctx, vpcInsId, switchId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if *switchDetail.Status == 0 { @@ -176,8 +179,8 @@ func resourceTencentCloudCfwVpcFirewallSwitchUpdate(d *schema.ResourceData, meta } func resourceTencentCloudCfwVpcFirewallSwitchDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_vpc_firewall_switch.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_vpc_firewall_switch.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cfw_vpc_firewall_switch_test.go b/tencentcloud/services/cfw/resource_tc_cfw_vpc_firewall_switch_test.go similarity index 91% rename from tencentcloud/resource_tc_cfw_vpc_firewall_switch_test.go rename to tencentcloud/services/cfw/resource_tc_cfw_vpc_firewall_switch_test.go index d7cd589d6f..8bc8689f6e 100644 --- a/tencentcloud/resource_tc_cfw_vpc_firewall_switch_test.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_vpc_firewall_switch_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfw_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCfwVpcFirewallSwitchResource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfwVpcFirewallSwitch, diff --git a/tencentcloud/resource_tc_cfw_vpc_instance.go b/tencentcloud/services/cfw/resource_tc_cfw_vpc_instance.go similarity index 86% rename from tencentcloud/resource_tc_cfw_vpc_instance.go rename to tencentcloud/services/cfw/resource_tc_cfw_vpc_instance.go index 8737784e30..79e346e365 100644 --- a/tencentcloud/resource_tc_cfw_vpc_instance.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_vpc_instance.go @@ -1,17 +1,20 @@ -package tencentcloud +package cfw import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCfwVpcInstance() *schema.Resource { +func ResourceTencentCloudCfwVpcInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfwVpcInstanceCreate, Read: resourceTencentCloudCfwVpcInstanceRead, @@ -29,7 +32,7 @@ func resourceTencentCloudCfwVpcInstance() *schema.Resource { "mode": { Required: true, Type: schema.TypeInt, - ValidateFunc: validateAllowedIntValue(MODE), + ValidateFunc: tccommon.ValidateAllowedIntValue(MODE), Description: "Mode 0: private network mode; 1: CCN cloud networking mode.", }, "vpc_fw_instances": { @@ -69,13 +72,13 @@ func resourceTencentCloudCfwVpcInstance() *schema.Resource { "width": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateIntegerMin(1024), + ValidateFunc: tccommon.ValidateIntegerMin(1024), Description: "Bandwidth, unit: Mbps.", }, "cross_a_zone": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue(CROSS_A_ZONE), + ValidateFunc: tccommon.ValidateAllowedIntValue(CROSS_A_ZONE), Description: "Off-site disaster recovery 1: use off-site disaster recovery; 0: do not use off-site disaster recovery; if it is empty, off-site disaster recovery will not be used by default.", }, "zone_set": { @@ -95,7 +98,7 @@ func resourceTencentCloudCfwVpcInstance() *schema.Resource { "switch_mode": { Required: true, Type: schema.TypeInt, - ValidateFunc: validateAllowedIntValue(SWITCH_MODE), + ValidateFunc: tccommon.ValidateAllowedIntValue(SWITCH_MODE), Description: "Switch mode of firewall instance. 1: Single point intercommunication; 2: Multi-point communication; 4: Custom Routing.", }, "fw_vpc_cidr": { @@ -114,13 +117,13 @@ func resourceTencentCloudCfwVpcInstance() *schema.Resource { } func resourceTencentCloudCfwVpcInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_vpc_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_vpc_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = cfw.NewCreateVpcFwGroupRequest() response = cfw.NewCreateVpcFwGroupResponse() fwGroupId string @@ -293,10 +296,10 @@ func resourceTencentCloudCfwVpcInstanceCreate(d *schema.ResourceData, meta inter request.FwVpcCidr = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().CreateVpcFwGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().CreateVpcFwGroup(request) if e != nil { - return retryError(e) + 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()) } @@ -314,10 +317,10 @@ func resourceTencentCloudCfwVpcInstanceCreate(d *schema.ResourceData, meta inter d.SetId(fwGroupId) // wait - err = resource.Retry(writeRetryTimeout*3, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout*3, func() *resource.RetryError { vpcFwGroupInfo, e := service.DescribeFwGroupInstanceInfoById(ctx, fwGroupId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if vpcFwGroupInfo == nil { @@ -341,13 +344,13 @@ func resourceTencentCloudCfwVpcInstanceCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudCfwVpcInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_vpc_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_vpc_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} fwGroupId = d.Id() mode int64 ) @@ -454,11 +457,11 @@ func resourceTencentCloudCfwVpcInstanceRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudCfwVpcInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_vpc_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_vpc_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cfw.NewModifyVpcFwGroupRequest() fwGroupId = d.Id() ) @@ -479,10 +482,10 @@ func resourceTencentCloudCfwVpcInstanceUpdate(d *schema.ResourceData, meta inter } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().ModifyVpcFwGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().ModifyVpcFwGroup(request) if e != nil { - return retryError(e) + 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()) } @@ -499,13 +502,13 @@ func resourceTencentCloudCfwVpcInstanceUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudCfwVpcInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_vpc_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_vpc_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} fwGroupId = d.Id() ) diff --git a/tencentcloud/resource_tc_cfw_vpc_instance_test.go b/tencentcloud/services/cfw/resource_tc_cfw_vpc_instance_test.go similarity index 91% rename from tencentcloud/resource_tc_cfw_vpc_instance_test.go rename to tencentcloud/services/cfw/resource_tc_cfw_vpc_instance_test.go index ec57e066ee..4f28d1dbfd 100644 --- a/tencentcloud/resource_tc_cfw_vpc_instance_test.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_vpc_instance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfw_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCfwVpcInstanceResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfwVpcInstance, diff --git a/tencentcloud/resource_tc_cfw_vpc_policy.go b/tencentcloud/services/cfw/resource_tc_cfw_vpc_policy.go similarity index 82% rename from tencentcloud/resource_tc_cfw_vpc_policy.go rename to tencentcloud/services/cfw/resource_tc_cfw_vpc_policy.go index 246c2d5e90..515b39481a 100644 --- a/tencentcloud/resource_tc_cfw_vpc_policy.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_vpc_policy.go @@ -1,4 +1,4 @@ -package tencentcloud +package cfw import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCfwVpcPolicy() *schema.Resource { +func ResourceTencentCloudCfwVpcPolicy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCfwVpcPolicyCreate, Read: resourceTencentCloudCfwVpcPolicyRead, @@ -50,7 +53,7 @@ func resourceTencentCloudCfwVpcPolicy() *schema.Resource { "rule_action": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(POLICY_RULE_ACTION), + ValidateFunc: tccommon.ValidateAllowedStringValue(POLICY_RULE_ACTION), Description: "How traffic set in the access control policy passes through the cloud firewall. Value: accept:accept, drop:drop, log:log.", }, "port": { @@ -67,7 +70,7 @@ func resourceTencentCloudCfwVpcPolicy() *schema.Resource { Type: schema.TypeString, Optional: true, Default: POLICY_ENABLE_TRUE, - ValidateFunc: validateAllowedStringValue(POLICY_ENABLE), + ValidateFunc: tccommon.ValidateAllowedStringValue(POLICY_ENABLE), Description: "Rule status, true means enabled, false means disabled. Default is true.", }, "fw_group_id": { @@ -96,11 +99,11 @@ func resourceTencentCloudCfwVpcPolicy() *schema.Resource { } func resourceTencentCloudCfwVpcPolicyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_vpc_policy.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_vpc_policy.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cfw.NewAddVpcAcRuleRequest() response = cfw.NewAddVpcAcRuleResponse() vpcRuleItem = cfw.VpcRuleItem{} @@ -151,10 +154,10 @@ func resourceTencentCloudCfwVpcPolicyCreate(d *schema.ResourceData, meta interfa request.Rules = append(request.Rules, &vpcRuleItem) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().AddVpcAcRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().AddVpcAcRule(request) if e != nil { - return retryError(e) + 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()) } @@ -181,13 +184,13 @@ func resourceTencentCloudCfwVpcPolicyCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudCfwVpcPolicyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_vpc_policy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_vpc_policy.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} uuid = d.Id() ) @@ -258,11 +261,11 @@ func resourceTencentCloudCfwVpcPolicyRead(d *schema.ResourceData, meta interface } func resourceTencentCloudCfwVpcPolicyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_vpc_policy.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_vpc_policy.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cfw.NewModifyVpcAcRuleRequest() vpcRuleItem = cfw.VpcRuleItem{} uuid = d.Id() @@ -315,10 +318,10 @@ func resourceTencentCloudCfwVpcPolicyUpdate(d *schema.ResourceData, meta interfa request.Rules = append(request.Rules, &vpcRuleItem) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCfwClient().ModifyVpcAcRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCfwClient().ModifyVpcAcRule(request) if e != nil { - return retryError(e) + 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()) } @@ -335,13 +338,13 @@ func resourceTencentCloudCfwVpcPolicyUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudCfwVpcPolicyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cfw_vpc_policy.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cfw_vpc_policy.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CfwService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CfwService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} uuid = d.Id() ) diff --git a/tencentcloud/resource_tc_cfw_vpc_policy_test.go b/tencentcloud/services/cfw/resource_tc_cfw_vpc_policy_test.go similarity index 89% rename from tencentcloud/resource_tc_cfw_vpc_policy_test.go rename to tencentcloud/services/cfw/resource_tc_cfw_vpc_policy_test.go index deee02b39d..2d62a401fc 100644 --- a/tencentcloud/resource_tc_cfw_vpc_policy_test.go +++ b/tencentcloud/services/cfw/resource_tc_cfw_vpc_policy_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cfw_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCfwVpcPolicyResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCfwVpcPolicy, diff --git a/tencentcloud/services/cfw/service_tencentcloud_cfw.go b/tencentcloud/services/cfw/service_tencentcloud_cfw.go new file mode 100644 index 0000000000..fd81a52735 --- /dev/null +++ b/tencentcloud/services/cfw/service_tencentcloud_cfw.go @@ -0,0 +1,849 @@ +package cfw + +import ( + "context" + "fmt" + "log" + "strconv" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +type CfwService struct { + client *connectivity.TencentCloudClient +} + +func (me *CfwService) DescribeCfwAddressTemplateById(ctx context.Context, uuid string) (addressTemplate *cfw.TemplateListInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDescribeAddressTemplateListRequest() + request.Uuid = &uuid + + 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.UseCfwClient().DescribeAddressTemplateList(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()) + + if len(response.Response.Data) < 1 { + return + } + + addressTemplate = response.Response.Data[0] + return +} + +func (me *CfwService) DeleteCfwAddressTemplateById(ctx context.Context, uuid string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDeleteAddressTemplateRequest() + request.Uuid = &uuid + + 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.UseCfwClient().DeleteAddressTemplate(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 +} + +func (me *CfwService) DescribeCfwBlockIgnoreListById(ctx context.Context, iP, domain, direction, ruleType string) (blockIgnoreRule *cfw.BlockIgnoreRule, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDescribeBlockIgnoreListRequest() + var searchStr string + if iP != "" { + searchStr = fmt.Sprintf(`{"domain":"%s"}`, iP) + } else { + searchStr = fmt.Sprintf(`{"domain":"%s"}`, domain) + } + + request.Limit = common.Int64Ptr(20) + request.Offset = common.Int64Ptr(0) + request.SearchValue = &searchStr + request.Direction = &direction + ruleTypeInt, _ := strconv.ParseUint(ruleType, 10, 64) + request.RuleType = &ruleTypeInt + request.By = common.StringPtr("EndTime") + request.Order = common.StringPtr("desc") + + 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.UseCfwClient().DescribeBlockIgnoreList(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()) + + if len(response.Response.Data) < 1 { + return + } + + blockIgnoreRule = response.Response.Data[0] + return +} + +func (me *CfwService) DeleteCfwBlockIgnoreListById(ctx context.Context, iP, domain, direction, ruleType string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDeleteBlockIgnoreRuleListRequest() + directionInt, _ := strconv.ParseInt(direction, 10, 64) + if iP != "" { + request.Rules = []*cfw.IocListData{ + { + IP: common.StringPtr(iP), + Direction: common.Int64Ptr(directionInt), + }, + } + } else { + request.Rules = []*cfw.IocListData{ + { + Domain: common.StringPtr(domain), + Direction: common.Int64Ptr(directionInt), + }, + } + } + + ruleTypeInt, _ := strconv.ParseInt(ruleType, 10, 64) + request.RuleType = common.Int64Ptr(ruleTypeInt) + + 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.UseCfwClient().DeleteBlockIgnoreRuleList(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 +} + +func (me *CfwService) DescribeCfwEdgePolicyById(ctx context.Context, uuid string) (edgePolicy *cfw.DescAcItem, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDescribeAclRuleRequest() + request.Limit = common.Uint64Ptr(20) + request.Offset = common.Uint64Ptr(0) + request.Filters = []*cfw.CommonFilter{ + { + Name: common.StringPtr("Id"), + Values: common.StringPtrs([]string{uuid}), + OperatorType: common.Int64Ptr(1), + }, + } + + 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.UseCfwClient().DescribeAclRule(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()) + + if len(response.Response.Data) < 1 { + return + } + + edgePolicy = response.Response.Data[0] + return +} + +func (me *CfwService) DeleteCfwEdgePolicyById(ctx context.Context, uuid string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewRemoveAclRuleRequest() + uuidInt, _ := strconv.ParseInt(uuid, 10, 64) + request.RuleUuid = common.Int64Ptrs([]int64{uuidInt}) + + 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.UseCfwClient().RemoveAclRule(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 +} + +func (me *CfwService) DescribeCfwNatInstanceById(ctx context.Context, natinsId string) (natInstance *cfw.NatInstanceInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDescribeNatFwInstancesInfoRequest() + request.Offset = common.Int64Ptr(0) + request.Limit = common.Int64Ptr(10) + request.Filter = []*cfw.NatFwFilter{ + { + FilterType: common.StringPtr("NatinsId"), + FilterContent: common.StringPtr(natinsId), + }, + } + + 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.UseCfwClient().DescribeNatFwInstancesInfo(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()) + + if len(response.Response.NatinsLst) < 1 { + return + } + + natInstance = response.Response.NatinsLst[0] + return +} + +func (me *CfwService) DescribeCfwEipsById(ctx context.Context, instanceId string) (gwList []string, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDescribeCfwEipsRequest() + request.Mode = common.Uint64Ptr(1) + request.NatGatewayId = common.StringPtr("ALL") + request.CfwInstance = common.StringPtr(instanceId) + + 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.UseCfwClient().DescribeCfwEips(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()) + + if len(response.Response.NatFwEipList) < 1 { + return + } + + for _, item := range response.Response.NatFwEipList { + gwList = append(gwList, *item.NatGatewayId) + } + + return +} + +func (me *CfwService) DeleteCfwNatInstanceById(ctx context.Context, instanceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDeleteNatFwInstanceRequest() + request.CfwInstance = &instanceId + + 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.UseCfwClient().DeleteNatFwInstance(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 +} + +func (me *CfwService) DescribeNatFwVpcDnsLstById(ctx context.Context, instanceId string) (vpcList []string, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDescribeNatFwVpcDnsLstRequest() + request.NatFwInsId = &instanceId + request.Offset = common.Int64Ptr(0) + request.Limit = common.Int64Ptr(10) + + 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.UseCfwClient().DescribeNatFwVpcDnsLst(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()) + + if len(response.Response.VpcDnsSwitchLst) < 1 { + return + } + + for _, item := range response.Response.VpcDnsSwitchLst { + vpcList = append(vpcList, *item.VpcId) + } + + return +} + +func (me *CfwService) DescribeCfwNatPolicyById(ctx context.Context, uuid string) (natPolicy *cfw.DescAcItem, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDescribeNatAcRuleRequest() + request.Limit = common.Uint64Ptr(20) + request.Offset = common.Uint64Ptr(0) + request.Filters = []*cfw.CommonFilter{ + { + Name: common.StringPtr("Id"), + Values: common.StringPtrs([]string{uuid}), + OperatorType: common.Int64Ptr(1), + }, + } + + 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.UseCfwClient().DescribeNatAcRule(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()) + + if len(response.Response.Data) < 1 { + return + } + + natPolicy = response.Response.Data[0] + return +} + +func (me *CfwService) DeleteCfwNatPolicyById(ctx context.Context, uuid string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewRemoveNatAcRuleRequest() + uuidInt, _ := strconv.ParseInt(uuid, 10, 64) + request.RuleUuid = common.Int64Ptrs([]int64{uuidInt}) + + 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.UseCfwClient().RemoveNatAcRule(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 +} + +func (me *CfwService) DescribeCfwVpcInstanceById(ctx context.Context, fwGroupId string) (vpcInstance *cfw.VpcFwGroupInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDescribeFwGroupInstanceInfoRequest() + request.Filters = []*cfw.CommonFilter{ + { + Name: common.StringPtr("FwGroupId"), + Values: common.StringPtrs([]string{fwGroupId}), + OperatorType: common.Int64Ptr(1), + }, + } + request.Limit = common.Int64Ptr(10) + request.Offset = common.Int64Ptr(0) + + 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.UseCfwClient().DescribeFwGroupInstanceInfo(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()) + + if len(response.Response.VpcFwGroupLst) < 1 { + return + } + + vpcInstance = response.Response.VpcFwGroupLst[0] + return +} + +func (me *CfwService) DeleteCfwVpcInstanceById(ctx context.Context, fwGroupId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDeleteVpcFwGroupRequest() + request.FwGroupId = &fwGroupId + request.DeleteFwGroup = common.Int64Ptr(1) + + 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.UseCfwClient().DeleteVpcFwGroup(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 +} + +func (me *CfwService) DescribeFwGroupInstanceInfoById(ctx context.Context, fwGroupId string) (vpcFwGroupInfo *cfw.VpcFwGroupInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDescribeFwGroupInstanceInfoRequest() + request.Offset = common.Int64Ptr(0) + request.Limit = common.Int64Ptr(10) + request.Filters = []*cfw.CommonFilter{ + { + Name: common.StringPtr("FwGroupId"), + Values: common.StringPtrs([]string{fwGroupId}), + OperatorType: common.Int64Ptr(1), + }, + } + + 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.UseCfwClient().DescribeFwGroupInstanceInfo(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()) + + if len(response.Response.VpcFwGroupLst) < 1 { + return + } + + vpcFwGroupInfo = response.Response.VpcFwGroupLst[0] + return +} + +func (me *CfwService) DescribeCfwVpcPolicyById(ctx context.Context, uuid string) (vpcPolicy *cfw.VpcRuleItem, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDescribeVpcAcRuleRequest() + request.Filters = []*cfw.CommonFilter{ + { + Name: common.StringPtr("Id"), + Values: common.StringPtrs([]string{uuid}), + OperatorType: common.Int64Ptr(1), + }, + } + request.Limit = common.Uint64Ptr(20) + request.Offset = common.Uint64Ptr(0) + + 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.UseCfwClient().DescribeVpcAcRule(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()) + + if len(response.Response.Data) < 1 { + return + } + + vpcPolicy = response.Response.Data[0] + return +} + +func (me *CfwService) DeleteCfwVpcPolicyById(ctx context.Context, uuid string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewRemoveVpcAcRuleRequest() + uuidInt, _ := strconv.ParseInt(uuid, 10, 64) + request.RuleUuids = common.Int64Ptrs([]int64{uuidInt}) + + 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.UseCfwClient().RemoveVpcAcRule(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 +} + +func (me *CfwService) DescribeCfwNatFirewallSwitchById(ctx context.Context, natInsId, subnetId string) (natFirewallSwitch *cfw.NatSwitchListData, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDescribeNatSwitchListRequest() + request.Offset = common.Int64Ptr(0) + request.Limit = common.Int64Ptr(20) + request.NatInsId = &natInsId + searchParam := fmt.Sprintf(`{"SubnetId":"%s"}`, subnetId) + request.SearchValue = &searchParam + + 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.UseCfwClient().DescribeNatSwitchList(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()) + + if len(response.Response.Data) < 1 { + return + } + + natFirewallSwitch = response.Response.Data[0] + return +} + +func (me *CfwService) DescribeCfwNatFwSwitchesByFilter(ctx context.Context, param map[string]interface{}) (natFwSwitches []*cfw.NatSwitchListData, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cfw.NewDescribeNatSwitchListRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Status" { + request.Status = v.(*int64) + } + + if k == "NatInsId" { + request.NatInsId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCfwClient().DescribeNatSwitchList(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()) + + if response == nil || len(response.Response.Data) < 1 { + break + } + + natFwSwitches = append(natFwSwitches, response.Response.Data...) + if len(response.Response.Data) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *CfwService) DescribeCfwVpcFirewallSwitchById(ctx context.Context, vpcInsId, switchId string) (vpcFirewallSwitch *cfw.FwGroupSwitchShow, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDescribeVpcFwGroupSwitchRequest() + request.Filters = []*cfw.CommonFilter{ + { + Name: common.StringPtr("SwitchId"), + Values: common.StringPtrs([]string{switchId}), + OperatorType: common.Int64Ptr(1), + }, + { + Name: common.StringPtr("FwGroupId"), + Values: common.StringPtrs([]string{vpcInsId}), + OperatorType: common.Int64Ptr(1), + }, + } + request.Limit = common.Uint64Ptr(20) + request.Offset = common.Uint64Ptr(0) + + 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.UseCfwClient().DescribeVpcFwGroupSwitch(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()) + + if len(response.Response.SwitchList) < 1 { + return + } + + vpcFirewallSwitch = response.Response.SwitchList[0] + return +} + +func (me *CfwService) DescribeCfwVpcFwSwitchesByFilter(ctx context.Context, vpcInsId string) (vpcFirewallSwitch []*cfw.FwGroupSwitchShow, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDescribeVpcFwGroupSwitchRequest() + request.Filters = []*cfw.CommonFilter{ + { + Name: common.StringPtr("FwGroupId"), + Values: common.StringPtrs([]string{vpcInsId}), + OperatorType: common.Int64Ptr(1), + }, + } + + 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()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCfwClient().DescribeVpcFwGroupSwitch(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()) + + if response == nil || len(response.Response.SwitchList) < 1 { + break + } + + vpcFirewallSwitch = append(vpcFirewallSwitch, response.Response.SwitchList...) + if len(response.Response.SwitchList) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *CfwService) DescribeCfwEdgeFwSwitchesByFilter(ctx context.Context) (edgeFwSwitches []*cfw.EdgeIpInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cfw.NewDescribeFwEdgeIpsRequest() + ) + + 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()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCfwClient().DescribeFwEdgeIps(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()) + + if response == nil || len(response.Response.Data) < 1 { + break + } + + edgeFwSwitches = append(edgeFwSwitches, response.Response.Data...) + if len(response.Response.Data) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *CfwService) DescribeCfwEdgeFirewallSwitchById(ctx context.Context, publicIp string) (edgeFirewallSwitch *cfw.EdgeIpInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cfw.NewDescribeFwEdgeIpsRequest() + request.Filters = []*cfw.CommonFilter{ + { + Name: common.StringPtr("PublicIp"), + Values: common.StringPtrs([]string{publicIp}), + OperatorType: common.Int64Ptr(1), + }, + } + + 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.UseCfwClient().DescribeFwEdgeIps(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()) + + if len(response.Response.Data) < 1 { + return + } + + edgeFirewallSwitch = response.Response.Data[0] + return +} From 033c08e702afa336cab854554da744da7a7a02ae Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 12:44:56 +0800 Subject: [PATCH 13/31] refactor: migrate package tencentcloud/services/chdfs --- tencentcloud/provider.go | 19 +- .../data_source_tc_chdfs_access_groups.go | 23 +- ...data_source_tc_chdfs_access_groups_test.go | 10 +- .../data_source_tc_chdfs_file_systems.go | 23 +- .../data_source_tc_chdfs_file_systems_test.go | 10 +- .../data_source_tc_chdfs_mount_points.go | 23 +- .../data_source_tc_chdfs_mount_points_test.go | 10 +- .../chdfs}/resource_tc_chdfs_access_group.go | 51 +- .../resource_tc_chdfs_access_group_test.go | 8 +- .../chdfs}/resource_tc_chdfs_access_rule.go | 59 +-- .../resource_tc_chdfs_access_rule_test.go | 8 +- .../chdfs}/resource_tc_chdfs_file_system.go | 55 +- .../resource_tc_chdfs_file_system_test.go | 8 +- .../resource_tc_chdfs_life_cycle_rule.go | 63 +-- .../resource_tc_chdfs_life_cycle_rule_test.go | 8 +- .../chdfs}/resource_tc_chdfs_mount_point.go | 51 +- ...esource_tc_chdfs_mount_point_attachment.go | 39 +- ...ce_tc_chdfs_mount_point_attachment_test.go | 8 +- .../resource_tc_chdfs_mount_point_test.go | 8 +- .../chdfs/service_tencentcloud_chdfs.go | 468 ++++++++++++++++++ 20 files changed, 733 insertions(+), 219 deletions(-) rename tencentcloud/{ => services/chdfs}/data_source_tc_chdfs_access_groups.go (84%) rename tencentcloud/{ => services/chdfs}/data_source_tc_chdfs_access_groups_test.go (59%) rename tencentcloud/{ => services/chdfs}/data_source_tc_chdfs_file_systems.go (88%) rename tencentcloud/{ => services/chdfs}/data_source_tc_chdfs_file_systems_test.go (58%) rename tencentcloud/{ => services/chdfs}/data_source_tc_chdfs_mount_points.go (86%) rename tencentcloud/{ => services/chdfs}/data_source_tc_chdfs_mount_points_test.go (60%) rename tencentcloud/{ => services/chdfs}/resource_tc_chdfs_access_group.go (73%) rename tencentcloud/{ => services/chdfs}/resource_tc_chdfs_access_group_test.go (89%) rename tencentcloud/{ => services/chdfs}/resource_tc_chdfs_access_rule.go (76%) rename tencentcloud/{ => services/chdfs}/resource_tc_chdfs_access_rule_test.go (88%) rename tencentcloud/{ => services/chdfs}/resource_tc_chdfs_file_system.go (79%) rename tencentcloud/{ => services/chdfs}/resource_tc_chdfs_file_system_test.go (91%) rename tencentcloud/{ => services/chdfs}/resource_tc_chdfs_life_cycle_rule.go (79%) rename tencentcloud/{ => services/chdfs}/resource_tc_chdfs_life_cycle_rule_test.go (91%) rename tencentcloud/{ => services/chdfs}/resource_tc_chdfs_mount_point.go (71%) rename tencentcloud/{ => services/chdfs}/resource_tc_chdfs_mount_point_attachment.go (71%) rename tencentcloud/{ => services/chdfs}/resource_tc_chdfs_mount_point_attachment_test.go (85%) rename tencentcloud/{ => services/chdfs}/resource_tc_chdfs_mount_point_test.go (88%) create mode 100644 tencentcloud/services/chdfs/service_tencentcloud_chdfs.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 414e9b05b2..7a73a74057 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/chdfs" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cfw" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cfs" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdwpg" @@ -763,9 +764,9 @@ func Provider() *schema.Provider { "tencentcloud_css_time_shift_stream_list": dataSourceTencentCloudCssTimeShiftStreamList(), "tencentcloud_css_watermarks": dataSourceTencentCloudCssWatermarks(), "tencentcloud_css_xp2p_detail_info_list": dataSourceTencentCloudCssXp2pDetailInfoList(), - "tencentcloud_chdfs_access_groups": dataSourceTencentCloudChdfsAccessGroups(), - "tencentcloud_chdfs_mount_points": dataSourceTencentCloudChdfsMountPoints(), - "tencentcloud_chdfs_file_systems": dataSourceTencentCloudChdfsFileSystems(), + "tencentcloud_chdfs_access_groups": chdfs.DataSourceTencentCloudChdfsAccessGroups(), + "tencentcloud_chdfs_mount_points": chdfs.DataSourceTencentCloudChdfsMountPoints(), + "tencentcloud_chdfs_file_systems": chdfs.DataSourceTencentCloudChdfsFileSystems(), "tencentcloud_tcm_mesh": dataSourceTencentCloudTcmMesh(), "tencentcloud_lighthouse_firewall_rules_template": dataSourceTencentCloudLighthouseFirewallRulesTemplate(), "tencentcloud_cvm_instance_vnc_url": dataSourceTencentCloudCvmInstanceVncUrl(), @@ -1700,12 +1701,12 @@ func Provider() *schema.Provider { "tencentcloud_cbs_disk_backup": cbs.ResourceTencentCloudCbsDiskBackup(), "tencentcloud_cbs_snapshot_share_permission": cbs.ResourceTencentCloudCbsSnapshotSharePermission(), "tencentcloud_cbs_disk_backup_rollback_operation": cbs.ResourceTencentCloudCbsDiskBackupRollbackOperation(), - "tencentcloud_chdfs_access_group": resourceTencentCloudChdfsAccessGroup(), - "tencentcloud_chdfs_access_rule": resourceTencentCloudChdfsAccessRule(), - "tencentcloud_chdfs_file_system": resourceTencentCloudChdfsFileSystem(), - "tencentcloud_chdfs_life_cycle_rule": resourceTencentCloudChdfsLifeCycleRule(), - "tencentcloud_chdfs_mount_point": resourceTencentCloudChdfsMountPoint(), - "tencentcloud_chdfs_mount_point_attachment": resourceTencentCloudChdfsMountPointAttachment(), + "tencentcloud_chdfs_access_group": chdfs.ResourceTencentCloudChdfsAccessGroup(), + "tencentcloud_chdfs_access_rule": chdfs.ResourceTencentCloudChdfsAccessRule(), + "tencentcloud_chdfs_file_system": chdfs.ResourceTencentCloudChdfsFileSystem(), + "tencentcloud_chdfs_life_cycle_rule": chdfs.ResourceTencentCloudChdfsLifeCycleRule(), + "tencentcloud_chdfs_mount_point": chdfs.ResourceTencentCloudChdfsMountPoint(), + "tencentcloud_chdfs_mount_point_attachment": chdfs.ResourceTencentCloudChdfsMountPointAttachment(), "tencentcloud_mdl_stream_live_input": resourceTencentCloudMdlStreamLiveInput(), "tencentcloud_lighthouse_blueprint": resourceTencentCloudLighthouseBlueprint(), "tencentcloud_cvm_launch_template_version": resourceTencentCloudCvmLaunchTemplateVersion(), diff --git a/tencentcloud/data_source_tc_chdfs_access_groups.go b/tencentcloud/services/chdfs/data_source_tc_chdfs_access_groups.go similarity index 84% rename from tencentcloud/data_source_tc_chdfs_access_groups.go rename to tencentcloud/services/chdfs/data_source_tc_chdfs_access_groups.go index 3533c4c33b..65dd754042 100644 --- a/tencentcloud/data_source_tc_chdfs_access_groups.go +++ b/tencentcloud/services/chdfs/data_source_tc_chdfs_access_groups.go @@ -1,15 +1,18 @@ -package tencentcloud +package chdfs import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" chdfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs/v20201112" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudChdfsAccessGroups() *schema.Resource { +func DataSourceTencentCloudChdfsAccessGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudChdfsAccessGroupsRead, Schema: map[string]*schema.Schema{ @@ -75,12 +78,12 @@ func dataSourceTencentCloudChdfsAccessGroups() *schema.Resource { } func dataSourceTencentCloudChdfsAccessGroupsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_chdfs_access_groups.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_chdfs_access_groups.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("vpc_id"); ok { @@ -91,14 +94,14 @@ func dataSourceTencentCloudChdfsAccessGroupsRead(d *schema.ResourceData, meta in paramMap["owner_uin"] = helper.IntUint64(v.(int)) } - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var accessGroups []*chdfs.AccessGroup - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeChdfsAccessGroupsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } accessGroups = result return nil @@ -148,7 +151,7 @@ func dataSourceTencentCloudChdfsAccessGroupsRead(d *schema.ResourceData, meta in d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_chdfs_access_groups_test.go b/tencentcloud/services/chdfs/data_source_tc_chdfs_access_groups_test.go similarity index 59% rename from tencentcloud/data_source_tc_chdfs_access_groups_test.go rename to tencentcloud/services/chdfs/data_source_tc_chdfs_access_groups_test.go index f169822d16..73b8fe6c00 100644 --- a/tencentcloud/data_source_tc_chdfs_access_groups_test.go +++ b/tencentcloud/services/chdfs/data_source_tc_chdfs_access_groups_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package chdfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudChdfsAccessGroupsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccChdfsAccessGroupsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_chdfs_access_groups.access_groups")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_chdfs_access_groups.access_groups")), }, }, }) diff --git a/tencentcloud/data_source_tc_chdfs_file_systems.go b/tencentcloud/services/chdfs/data_source_tc_chdfs_file_systems.go similarity index 88% rename from tencentcloud/data_source_tc_chdfs_file_systems.go rename to tencentcloud/services/chdfs/data_source_tc_chdfs_file_systems.go index 8e5224c919..d70359b306 100644 --- a/tencentcloud/data_source_tc_chdfs_file_systems.go +++ b/tencentcloud/services/chdfs/data_source_tc_chdfs_file_systems.go @@ -1,15 +1,18 @@ -package tencentcloud +package chdfs import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" chdfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs/v20201112" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudChdfsFileSystems() *schema.Resource { +func DataSourceTencentCloudChdfsFileSystems() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudChdfsFileSystemsRead, Schema: map[string]*schema.Schema{ @@ -104,21 +107,21 @@ func dataSourceTencentCloudChdfsFileSystems() *schema.Resource { } func dataSourceTencentCloudChdfsFileSystemsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_chdfs_file_systems.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_chdfs_file_systems.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var fileSystems []*chdfs.FileSystem - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeChdfsFileSystems(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } fileSystems = result return nil @@ -196,7 +199,7 @@ func dataSourceTencentCloudChdfsFileSystemsRead(d *schema.ResourceData, meta int d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_chdfs_file_systems_test.go b/tencentcloud/services/chdfs/data_source_tc_chdfs_file_systems_test.go similarity index 58% rename from tencentcloud/data_source_tc_chdfs_file_systems_test.go rename to tencentcloud/services/chdfs/data_source_tc_chdfs_file_systems_test.go index ef928ef9e2..7010a18cf1 100644 --- a/tencentcloud/data_source_tc_chdfs_file_systems_test.go +++ b/tencentcloud/services/chdfs/data_source_tc_chdfs_file_systems_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package chdfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudChdfsFileSystemsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccChdfsFileSystemsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_chdfs_file_systems.file_systems")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_chdfs_file_systems.file_systems")), }, }, }) diff --git a/tencentcloud/data_source_tc_chdfs_mount_points.go b/tencentcloud/services/chdfs/data_source_tc_chdfs_mount_points.go similarity index 86% rename from tencentcloud/data_source_tc_chdfs_mount_points.go rename to tencentcloud/services/chdfs/data_source_tc_chdfs_mount_points.go index 3fa2861e4c..47561becbe 100644 --- a/tencentcloud/data_source_tc_chdfs_mount_points.go +++ b/tencentcloud/services/chdfs/data_source_tc_chdfs_mount_points.go @@ -1,15 +1,18 @@ -package tencentcloud +package chdfs import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" chdfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs/v20201112" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudChdfsMountPoints() *schema.Resource { +func DataSourceTencentCloudChdfsMountPoints() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudChdfsMountPointsRead, Schema: map[string]*schema.Schema{ @@ -84,12 +87,12 @@ func dataSourceTencentCloudChdfsMountPoints() *schema.Resource { } func dataSourceTencentCloudChdfsMountPointsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_chdfs_mount_points.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_chdfs_mount_points.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("file_system_id"); ok { @@ -104,14 +107,14 @@ func dataSourceTencentCloudChdfsMountPointsRead(d *schema.ResourceData, meta int paramMap["owner_uin"] = helper.IntUint64(v.(int)) } - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var mountPoints []*chdfs.MountPoint - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeChdfsMountPointsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } mountPoints = result return nil @@ -161,7 +164,7 @@ func dataSourceTencentCloudChdfsMountPointsRead(d *schema.ResourceData, meta int d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_chdfs_mount_points_test.go b/tencentcloud/services/chdfs/data_source_tc_chdfs_mount_points_test.go similarity index 60% rename from tencentcloud/data_source_tc_chdfs_mount_points_test.go rename to tencentcloud/services/chdfs/data_source_tc_chdfs_mount_points_test.go index d33de8e963..c055a7d777 100644 --- a/tencentcloud/data_source_tc_chdfs_mount_points_test.go +++ b/tencentcloud/services/chdfs/data_source_tc_chdfs_mount_points_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package chdfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudChdfsMountPointsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccChdfsMountPointsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_chdfs_mount_points.mount_points")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_chdfs_mount_points.mount_points")), }, }, }) diff --git a/tencentcloud/resource_tc_chdfs_access_group.go b/tencentcloud/services/chdfs/resource_tc_chdfs_access_group.go similarity index 73% rename from tencentcloud/resource_tc_chdfs_access_group.go rename to tencentcloud/services/chdfs/resource_tc_chdfs_access_group.go index 6a81218992..d60ed3e4b7 100644 --- a/tencentcloud/resource_tc_chdfs_access_group.go +++ b/tencentcloud/services/chdfs/resource_tc_chdfs_access_group.go @@ -1,17 +1,20 @@ -package tencentcloud +package chdfs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" chdfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs/v20201112" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudChdfsAccessGroup() *schema.Resource { +func ResourceTencentCloudChdfsAccessGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudChdfsAccessGroupCreate, Read: resourceTencentCloudChdfsAccessGroupRead, @@ -49,10 +52,10 @@ func resourceTencentCloudChdfsAccessGroup() *schema.Resource { } func resourceTencentCloudChdfsAccessGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_access_group.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_access_group.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = chdfs.NewCreateAccessGroupRequest() @@ -75,10 +78,10 @@ func resourceTencentCloudChdfsAccessGroupCreate(d *schema.ResourceData, meta int request.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseChdfsClient().CreateAccessGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseChdfsClient().CreateAccessGroup(request) if e != nil { - return retryError(e) + 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()) } @@ -97,14 +100,14 @@ func resourceTencentCloudChdfsAccessGroupCreate(d *schema.ResourceData, meta int } func resourceTencentCloudChdfsAccessGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_access_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_access_group.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} accessGroupId := d.Id() @@ -139,10 +142,10 @@ func resourceTencentCloudChdfsAccessGroupRead(d *schema.ResourceData, meta inter } func resourceTencentCloudChdfsAccessGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_access_group.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_access_group.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := chdfs.NewModifyAccessGroupRequest() @@ -170,10 +173,10 @@ func resourceTencentCloudChdfsAccessGroupUpdate(d *schema.ResourceData, meta int } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseChdfsClient().ModifyAccessGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseChdfsClient().ModifyAccessGroup(request) if e != nil { - return retryError(e) + 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()) } @@ -188,13 +191,13 @@ func resourceTencentCloudChdfsAccessGroupUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudChdfsAccessGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_access_group.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_access_group.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} accessGroupId := d.Id() if err := service.DeleteChdfsAccessGroupById(ctx, accessGroupId); err != nil { diff --git a/tencentcloud/resource_tc_chdfs_access_group_test.go b/tencentcloud/services/chdfs/resource_tc_chdfs_access_group_test.go similarity index 89% rename from tencentcloud/resource_tc_chdfs_access_group_test.go rename to tencentcloud/services/chdfs/resource_tc_chdfs_access_group_test.go index 5efda15334..5289e7d7bb 100644 --- a/tencentcloud/resource_tc_chdfs_access_group_test.go +++ b/tencentcloud/services/chdfs/resource_tc_chdfs_access_group_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package chdfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudChdfsAccessGroupResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccChdfsAccessGroup, diff --git a/tencentcloud/resource_tc_chdfs_access_rule.go b/tencentcloud/services/chdfs/resource_tc_chdfs_access_rule.go similarity index 76% rename from tencentcloud/resource_tc_chdfs_access_rule.go rename to tencentcloud/services/chdfs/resource_tc_chdfs_access_rule.go index 958c3e2c79..f3de9b1467 100644 --- a/tencentcloud/resource_tc_chdfs_access_rule.go +++ b/tencentcloud/services/chdfs/resource_tc_chdfs_access_rule.go @@ -1,4 +1,4 @@ -package tencentcloud +package chdfs import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" chdfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs/v20201112" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudChdfsAccessRule() *schema.Resource { +func ResourceTencentCloudChdfsAccessRule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudChdfsAccessRuleCreate, Read: resourceTencentCloudChdfsAccessRuleRead, @@ -69,10 +72,10 @@ func resourceTencentCloudChdfsAccessRule() *schema.Resource { } func resourceTencentCloudChdfsAccessRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_access_rule.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_access_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = chdfs.NewCreateAccessRulesRequest() @@ -99,10 +102,10 @@ func resourceTencentCloudChdfsAccessRuleCreate(d *schema.ResourceData, meta inte request.AccessGroupId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseChdfsClient().CreateAccessRules(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseChdfsClient().CreateAccessRules(request) if e != nil { - return retryError(e) + 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()) } @@ -119,22 +122,22 @@ func resourceTencentCloudChdfsAccessRuleCreate(d *schema.ResourceData, meta inte } accessRuleId = *response.Response.AccessRules[0].AccessRuleId - d.SetId(accessGroupId + FILED_SP + helper.UInt64ToStr(accessRuleId)) + d.SetId(accessGroupId + tccommon.FILED_SP + helper.UInt64ToStr(accessRuleId)) return resourceTencentCloudChdfsAccessRuleRead(d, meta) } func resourceTencentCloudChdfsAccessRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_access_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_access_rule.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -184,14 +187,14 @@ func resourceTencentCloudChdfsAccessRuleRead(d *schema.ResourceData, meta interf } func resourceTencentCloudChdfsAccessRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_access_rule.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_access_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := chdfs.NewModifyAccessRulesRequest() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -217,10 +220,10 @@ func resourceTencentCloudChdfsAccessRuleUpdate(d *schema.ResourceData, meta inte } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseChdfsClient().ModifyAccessRules(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseChdfsClient().ModifyAccessRules(request) if e != nil { - return retryError(e) + 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()) } @@ -235,14 +238,14 @@ func resourceTencentCloudChdfsAccessRuleUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudChdfsAccessRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_access_rule.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_access_rule.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_chdfs_access_rule_test.go b/tencentcloud/services/chdfs/resource_tc_chdfs_access_rule_test.go similarity index 88% rename from tencentcloud/resource_tc_chdfs_access_rule_test.go rename to tencentcloud/services/chdfs/resource_tc_chdfs_access_rule_test.go index 4c4ea9e512..89045fcd6f 100644 --- a/tencentcloud/resource_tc_chdfs_access_rule_test.go +++ b/tencentcloud/services/chdfs/resource_tc_chdfs_access_rule_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package chdfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudChdfsAccessRuleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccChdfsAccessRule, diff --git a/tencentcloud/resource_tc_chdfs_file_system.go b/tencentcloud/services/chdfs/resource_tc_chdfs_file_system.go similarity index 79% rename from tencentcloud/resource_tc_chdfs_file_system.go rename to tencentcloud/services/chdfs/resource_tc_chdfs_file_system.go index d4c648a1d8..440b5738f5 100644 --- a/tencentcloud/resource_tc_chdfs_file_system.go +++ b/tencentcloud/services/chdfs/resource_tc_chdfs_file_system.go @@ -1,17 +1,20 @@ -package tencentcloud +package chdfs import ( "context" "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" chdfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs/v20201112" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudChdfsFileSystem() *schema.Resource { +func ResourceTencentCloudChdfsFileSystem() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudChdfsFileSystemCreate, Read: resourceTencentCloudChdfsFileSystemRead, @@ -73,10 +76,10 @@ func resourceTencentCloudChdfsFileSystem() *schema.Resource { } func resourceTencentCloudChdfsFileSystemCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_file_system.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_file_system.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = chdfs.NewCreateFileSystemRequest() @@ -119,10 +122,10 @@ func resourceTencentCloudChdfsFileSystemCreate(d *schema.ResourceData, meta inte } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseChdfsClient().CreateFileSystem(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseChdfsClient().CreateFileSystem(request) if e != nil { - return retryError(e) + 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()) } @@ -137,9 +140,9 @@ func resourceTencentCloudChdfsFileSystemCreate(d *schema.ResourceData, meta inte fileSystemId = *response.Response.FileSystem.FileSystemId d.SetId(fileSystemId) - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - conf := BuildStateChangeConf([]string{}, []string{"2"}, 2*readRetryTimeout, time.Second, service.ChdfsFileSystemStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"2"}, 2*tccommon.ReadRetryTimeout, time.Second, service.ChdfsFileSystemStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -149,14 +152,14 @@ func resourceTencentCloudChdfsFileSystemCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudChdfsFileSystemRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_file_system.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_file_system.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} fileSystemId := d.Id() @@ -203,10 +206,10 @@ func resourceTencentCloudChdfsFileSystemRead(d *schema.ResourceData, meta interf } func resourceTencentCloudChdfsFileSystemUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_file_system.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_file_system.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := chdfs.NewModifyFileSystemRequest() @@ -264,10 +267,10 @@ func resourceTencentCloudChdfsFileSystemUpdate(d *schema.ResourceData, meta inte } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseChdfsClient().ModifyFileSystem(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseChdfsClient().ModifyFileSystem(request) if e != nil { - return retryError(e) + 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()) } @@ -282,13 +285,13 @@ func resourceTencentCloudChdfsFileSystemUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudChdfsFileSystemDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_file_system.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_file_system.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} fileSystemId := d.Id() if err := service.DeleteChdfsFileSystemById(ctx, fileSystemId); err != nil { diff --git a/tencentcloud/resource_tc_chdfs_file_system_test.go b/tencentcloud/services/chdfs/resource_tc_chdfs_file_system_test.go similarity index 91% rename from tencentcloud/resource_tc_chdfs_file_system_test.go rename to tencentcloud/services/chdfs/resource_tc_chdfs_file_system_test.go index 7e264ad7e7..e7adf26a98 100644 --- a/tencentcloud/resource_tc_chdfs_file_system_test.go +++ b/tencentcloud/services/chdfs/resource_tc_chdfs_file_system_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package chdfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudChdfsFileSystemResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccChdfsFileSystem, diff --git a/tencentcloud/resource_tc_chdfs_life_cycle_rule.go b/tencentcloud/services/chdfs/resource_tc_chdfs_life_cycle_rule.go similarity index 79% rename from tencentcloud/resource_tc_chdfs_life_cycle_rule.go rename to tencentcloud/services/chdfs/resource_tc_chdfs_life_cycle_rule.go index fd77498710..48f748fcb1 100644 --- a/tencentcloud/resource_tc_chdfs_life_cycle_rule.go +++ b/tencentcloud/services/chdfs/resource_tc_chdfs_life_cycle_rule.go @@ -1,4 +1,4 @@ -package tencentcloud +package chdfs import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" chdfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs/v20201112" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudChdfsLifeCycleRule() *schema.Resource { +func ResourceTencentCloudChdfsLifeCycleRule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudChdfsLifeCycleRuleCreate, Read: resourceTencentCloudChdfsLifeCycleRuleRead, @@ -88,10 +91,10 @@ func resourceTencentCloudChdfsLifeCycleRule() *schema.Resource { } func resourceTencentCloudChdfsLifeCycleRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_life_cycle_rule.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_life_cycle_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = chdfs.NewCreateLifeCycleRulesRequest() @@ -131,10 +134,10 @@ func resourceTencentCloudChdfsLifeCycleRuleCreate(d *schema.ResourceData, meta i request.LifeCycleRules = append(request.LifeCycleRules, &lifeCycleRule) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseChdfsClient().CreateLifeCycleRules(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseChdfsClient().CreateLifeCycleRules(request) if e != nil { - return retryError(e) + 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()) } @@ -146,29 +149,29 @@ func resourceTencentCloudChdfsLifeCycleRuleCreate(d *schema.ResourceData, meta i return err } - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} lifeCycleRule, err := service.DescribeChdfsLifeCycleRuleByPath(ctx, fileSystemId, path) if err != nil { return err } - d.SetId(fileSystemId + FILED_SP + helper.UInt64ToStr(*lifeCycleRule.LifeCycleRuleId)) + d.SetId(fileSystemId + tccommon.FILED_SP + helper.UInt64ToStr(*lifeCycleRule.LifeCycleRuleId)) return resourceTencentCloudChdfsLifeCycleRuleRead(d, meta) } func resourceTencentCloudChdfsLifeCycleRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_life_cycle_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_life_cycle_rule.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -237,14 +240,14 @@ func resourceTencentCloudChdfsLifeCycleRuleRead(d *schema.ResourceData, meta int } func resourceTencentCloudChdfsLifeCycleRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_life_cycle_rule.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_life_cycle_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := chdfs.NewModifyLifeCycleRulesRequest() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -282,10 +285,10 @@ func resourceTencentCloudChdfsLifeCycleRuleUpdate(d *schema.ResourceData, meta i } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseChdfsClient().ModifyLifeCycleRules(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseChdfsClient().ModifyLifeCycleRules(request) if e != nil { - return retryError(e) + 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()) } @@ -300,14 +303,14 @@ func resourceTencentCloudChdfsLifeCycleRuleUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudChdfsLifeCycleRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_life_cycle_rule.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_life_cycle_rule.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_chdfs_life_cycle_rule_test.go b/tencentcloud/services/chdfs/resource_tc_chdfs_life_cycle_rule_test.go similarity index 91% rename from tencentcloud/resource_tc_chdfs_life_cycle_rule_test.go rename to tencentcloud/services/chdfs/resource_tc_chdfs_life_cycle_rule_test.go index ee7d0897c5..a98895046f 100644 --- a/tencentcloud/resource_tc_chdfs_life_cycle_rule_test.go +++ b/tencentcloud/services/chdfs/resource_tc_chdfs_life_cycle_rule_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package chdfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixChdfsLifeCycleRuleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccChdfsLifeCycleRule, diff --git a/tencentcloud/resource_tc_chdfs_mount_point.go b/tencentcloud/services/chdfs/resource_tc_chdfs_mount_point.go similarity index 71% rename from tencentcloud/resource_tc_chdfs_mount_point.go rename to tencentcloud/services/chdfs/resource_tc_chdfs_mount_point.go index 92938b8fb2..e885053577 100644 --- a/tencentcloud/resource_tc_chdfs_mount_point.go +++ b/tencentcloud/services/chdfs/resource_tc_chdfs_mount_point.go @@ -1,16 +1,19 @@ -package tencentcloud +package chdfs import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" chdfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs/v20201112" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudChdfsMountPoint() *schema.Resource { +func ResourceTencentCloudChdfsMountPoint() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudChdfsMountPointCreate, Read: resourceTencentCloudChdfsMountPointRead, @@ -43,10 +46,10 @@ func resourceTencentCloudChdfsMountPoint() *schema.Resource { } func resourceTencentCloudChdfsMountPointCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_mount_point.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_mount_point.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = chdfs.NewCreateMountPointRequest() @@ -65,10 +68,10 @@ func resourceTencentCloudChdfsMountPointCreate(d *schema.ResourceData, meta inte request.MountPointStatus = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseChdfsClient().CreateMountPoint(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseChdfsClient().CreateMountPoint(request) if e != nil { - return retryError(e) + 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()) } @@ -87,14 +90,14 @@ func resourceTencentCloudChdfsMountPointCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudChdfsMountPointRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_mount_point.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_mount_point.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} mountPointId := d.Id() @@ -125,10 +128,10 @@ func resourceTencentCloudChdfsMountPointRead(d *schema.ResourceData, meta interf } func resourceTencentCloudChdfsMountPointUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_mount_point.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_mount_point.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := chdfs.NewModifyMountPointRequest() @@ -148,10 +151,10 @@ func resourceTencentCloudChdfsMountPointUpdate(d *schema.ResourceData, meta inte } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseChdfsClient().ModifyMountPoint(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseChdfsClient().ModifyMountPoint(request) if e != nil { - return retryError(e) + 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()) } @@ -166,13 +169,13 @@ func resourceTencentCloudChdfsMountPointUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudChdfsMountPointDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_mount_point.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_mount_point.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} mountPointId := d.Id() if err := service.DeleteChdfsMountPointById(ctx, mountPointId); err != nil { diff --git a/tencentcloud/resource_tc_chdfs_mount_point_attachment.go b/tencentcloud/services/chdfs/resource_tc_chdfs_mount_point_attachment.go similarity index 71% rename from tencentcloud/resource_tc_chdfs_mount_point_attachment.go rename to tencentcloud/services/chdfs/resource_tc_chdfs_mount_point_attachment.go index ecde19a642..a34741211f 100644 --- a/tencentcloud/resource_tc_chdfs_mount_point_attachment.go +++ b/tencentcloud/services/chdfs/resource_tc_chdfs_mount_point_attachment.go @@ -1,16 +1,19 @@ -package tencentcloud +package chdfs import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" chdfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs/v20201112" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudChdfsMountPointAttachment() *schema.Resource { +func ResourceTencentCloudChdfsMountPointAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudChdfsMountPointAttachmentCreate, Read: resourceTencentCloudChdfsMountPointAttachmentRead, @@ -40,10 +43,10 @@ func resourceTencentCloudChdfsMountPointAttachment() *schema.Resource { } func resourceTencentCloudChdfsMountPointAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_mount_point_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_mount_point_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = chdfs.NewAssociateAccessGroupsRequest() @@ -62,10 +65,10 @@ func resourceTencentCloudChdfsMountPointAttachmentCreate(d *schema.ResourceData, } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseChdfsClient().AssociateAccessGroups(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseChdfsClient().AssociateAccessGroups(request) if e != nil { - return retryError(e) + 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()) } @@ -82,14 +85,14 @@ func resourceTencentCloudChdfsMountPointAttachmentCreate(d *schema.ResourceData, } func resourceTencentCloudChdfsMountPointAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_mount_point_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_mount_point_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} mountPointId := d.Id() @@ -116,13 +119,13 @@ func resourceTencentCloudChdfsMountPointAttachmentRead(d *schema.ResourceData, m } func resourceTencentCloudChdfsMountPointAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_chdfs_mount_point_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_chdfs_mount_point_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ChdfsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ChdfsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} mountPointId := d.Id() diff --git a/tencentcloud/resource_tc_chdfs_mount_point_attachment_test.go b/tencentcloud/services/chdfs/resource_tc_chdfs_mount_point_attachment_test.go similarity index 85% rename from tencentcloud/resource_tc_chdfs_mount_point_attachment_test.go rename to tencentcloud/services/chdfs/resource_tc_chdfs_mount_point_attachment_test.go index 7df2cfa612..2c2c2e1e49 100644 --- a/tencentcloud/resource_tc_chdfs_mount_point_attachment_test.go +++ b/tencentcloud/services/chdfs/resource_tc_chdfs_mount_point_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package chdfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudChdfsMountPointAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccChdfsMountPointAttachment, diff --git a/tencentcloud/resource_tc_chdfs_mount_point_test.go b/tencentcloud/services/chdfs/resource_tc_chdfs_mount_point_test.go similarity index 88% rename from tencentcloud/resource_tc_chdfs_mount_point_test.go rename to tencentcloud/services/chdfs/resource_tc_chdfs_mount_point_test.go index a752193b0b..6c1afd77e6 100644 --- a/tencentcloud/resource_tc_chdfs_mount_point_test.go +++ b/tencentcloud/services/chdfs/resource_tc_chdfs_mount_point_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package chdfs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudChdfsMountPointResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccChdfsMountPoint, diff --git a/tencentcloud/services/chdfs/service_tencentcloud_chdfs.go b/tencentcloud/services/chdfs/service_tencentcloud_chdfs.go new file mode 100644 index 0000000000..852d2cb19b --- /dev/null +++ b/tencentcloud/services/chdfs/service_tencentcloud_chdfs.go @@ -0,0 +1,468 @@ +package chdfs + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + + chdfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs/v20201112" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +type ChdfsService struct { + client *connectivity.TencentCloudClient +} + +func (me *ChdfsService) DescribeChdfsAccessGroupById(ctx context.Context, accessGroupId string) (accessGroup *chdfs.AccessGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := chdfs.NewDescribeAccessGroupRequest() + request.AccessGroupId = &accessGroupId + + 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.UseChdfsClient().DescribeAccessGroup(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()) + + if response.Response.AccessGroup == nil { + return + } + + accessGroup = response.Response.AccessGroup + return +} + +func (me *ChdfsService) DeleteChdfsAccessGroupById(ctx context.Context, accessGroupId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := chdfs.NewDeleteAccessGroupRequest() + request.AccessGroupId = &accessGroupId + + 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.UseChdfsClient().DeleteAccessGroup(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 +} + +func (me *ChdfsService) DescribeChdfsFileSystemById(ctx context.Context, fileSystemId string) (fileSystem *chdfs.FileSystem, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := chdfs.NewDescribeFileSystemRequest() + request.FileSystemId = &fileSystemId + + 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.UseChdfsClient().DescribeFileSystem(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()) + + if response.Response.FileSystem == nil { + return + } + + fileSystem = response.Response.FileSystem + return +} + +func (me *ChdfsService) DeleteChdfsFileSystemById(ctx context.Context, fileSystemId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := chdfs.NewDeleteFileSystemRequest() + request.FileSystemId = &fileSystemId + + 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.UseChdfsClient().DeleteFileSystem(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 +} + +func (me *ChdfsService) ChdfsFileSystemStateRefreshFunc(fileSystemId string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + ctx := tccommon.ContextNil + + object, err := me.DescribeChdfsFileSystemById(ctx, fileSystemId) + + if err != nil { + return nil, "", err + } + + return object, helper.UInt64ToStr(*object.Status), nil + } +} + +func (me *ChdfsService) DescribeChdfsAccessRulesById(ctx context.Context, accessGroupId string, accessRuleId string) (accessRule *chdfs.AccessRule, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := chdfs.NewDescribeAccessRulesRequest() + request.AccessGroupId = &accessGroupId + + 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.UseChdfsClient().DescribeAccessRules(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()) + + if len(response.Response.AccessRules) < 1 { + return + } + + for _, rule := range response.Response.AccessRules { + if *rule.AccessRuleId == helper.StrToUInt64(accessRuleId) { + accessRule = rule + break + } + } + return +} + +func (me *ChdfsService) DeleteChdfsAccessRulesById(ctx context.Context, accessRuleId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := chdfs.NewDeleteAccessRulesRequest() + request.AccessRuleIds = []*uint64{helper.StrToUint64Point(accessRuleId)} + + 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.UseChdfsClient().DeleteAccessRules(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 +} + +func (me *ChdfsService) DescribeChdfsLifeCycleRuleById(ctx context.Context, fileSystemId string, lifeCycleRuleId string) (lifeCycleRule *chdfs.LifeCycleRule, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := chdfs.NewDescribeLifeCycleRulesRequest() + request.FileSystemId = &fileSystemId + + 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.UseChdfsClient().DescribeLifeCycleRules(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()) + + if len(response.Response.LifeCycleRules) < 1 { + return + } + + for _, rule := range response.Response.LifeCycleRules { + if *rule.LifeCycleRuleId == helper.StrToUInt64(lifeCycleRuleId) { + lifeCycleRule = rule + break + } + } + return +} + +func (me *ChdfsService) DescribeChdfsLifeCycleRuleByPath(ctx context.Context, fileSystemId string, path string) (lifeCycleRule *chdfs.LifeCycleRule, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := chdfs.NewDescribeLifeCycleRulesRequest() + request.FileSystemId = &fileSystemId + + 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.UseChdfsClient().DescribeLifeCycleRules(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()) + + if len(response.Response.LifeCycleRules) < 1 { + return + } + + for _, rule := range response.Response.LifeCycleRules { + if *rule.Path == path { + lifeCycleRule = rule + break + } + } + return +} + +func (me *ChdfsService) DeleteChdfsLifeCycleRuleById(ctx context.Context, lifeCycleRuleId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := chdfs.NewDeleteLifeCycleRulesRequest() + request.LifeCycleRuleIds = []*uint64{helper.StrToUint64Point(lifeCycleRuleId)} + + 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.UseChdfsClient().DeleteLifeCycleRules(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 +} + +func (me *ChdfsService) DescribeChdfsMountPointById(ctx context.Context, mountPointId string) (mountPoint *chdfs.MountPoint, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := chdfs.NewDescribeMountPointRequest() + request.MountPointId = &mountPointId + + 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.UseChdfsClient().DescribeMountPoint(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()) + + if response.Response.MountPoint == nil { + return + } + + mountPoint = response.Response.MountPoint + return +} + +func (me *ChdfsService) DeleteChdfsMountPointById(ctx context.Context, mountPointId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := chdfs.NewDeleteMountPointRequest() + request.MountPointId = &mountPointId + + 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.UseChdfsClient().DeleteMountPoint(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 +} + +func (me *ChdfsService) DeleteChdfsMountPointAttachmentById(ctx context.Context, mountPointId string, accessGroupIds []*string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := chdfs.NewDisassociateAccessGroupsRequest() + request.MountPointId = &mountPointId + request.AccessGroupIds = accessGroupIds + + 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.UseChdfsClient().DisassociateAccessGroups(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 +} + +func (me *ChdfsService) DescribeChdfsAccessGroupsByFilter(ctx context.Context, param map[string]interface{}) (AccessGroups []*chdfs.AccessGroup, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = chdfs.NewDescribeAccessGroupsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "vpc_id" { + request.VpcId = v.(*string) + } + if k == "owner_uin" { + request.OwnerUin = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseChdfsClient().DescribeAccessGroups(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()) + + AccessGroups = response.Response.AccessGroups + + return +} + +func (me *ChdfsService) DescribeChdfsMountPointsByFilter(ctx context.Context, param map[string]interface{}) (MountPoints []*chdfs.MountPoint, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = chdfs.NewDescribeMountPointsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "file_system_id" { + request.FileSystemId = v.(*string) + } + if k == "access_group_id" { + request.AccessGroupId = v.(*string) + } + if k == "owner_uin" { + request.OwnerUin = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseChdfsClient().DescribeMountPoints(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()) + + MountPoints = response.Response.MountPoints + + return +} + +func (me *ChdfsService) DescribeChdfsFileSystems(ctx context.Context) (fileSystems []*chdfs.FileSystem, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = chdfs.NewDescribeFileSystemsRequest() + ) + + 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.UseChdfsClient().DescribeFileSystems(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()) + + fileSystems = response.Response.FileSystems + + return +} From 1c3084c1afa2075c436019ae52a96b8ebff6848f Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 12:55:34 +0800 Subject: [PATCH 14/31] refactor: migrate package tencentcloud/services/ci --- tencentcloud/provider.go | 39 +-- .../ci}/resource_tc_ci_bucket_attachment.go | 46 +-- .../resource_tc_ci_bucket_attachment_test.go | 22 +- .../ci}/resource_tc_ci_bucket_pic_style.go | 48 +-- .../resource_tc_ci_bucket_pic_style_test.go | 45 +-- .../ci}/resource_tc_ci_guetzli.go | 36 +- .../ci}/resource_tc_ci_guetzli_test.go | 14 +- .../ci}/resource_tc_ci_hot_link.go | 44 +-- .../ci}/resource_tc_ci_hot_link_test.go | 24 +- ...resource_tc_ci_media_animation_template.go | 65 ++-- ...rce_tc_ci_media_animation_template_test.go | 30 +- .../resource_tc_ci_media_concat_template.go | 65 ++-- ...source_tc_ci_media_concat_template_test.go | 56 +-- ...source_tc_ci_media_pic_process_template.go | 65 ++-- ...e_tc_ci_media_pic_process_template_test.go | 44 +-- ...source_tc_ci_media_smart_cover_template.go | 65 ++-- ...e_tc_ci_media_smart_cover_template_test.go | 44 +-- .../resource_tc_ci_media_snapshot_template.go | 65 ++-- ...urce_tc_ci_media_snapshot_template_test.go | 30 +- ...tc_ci_media_speech_recognition_template.go | 65 ++-- ..._media_speech_recognition_template_test.go | 44 +-- ...e_tc_ci_media_super_resolution_template.go | 62 ++-- ...ci_media_super_resolution_template_test.go | 44 +-- ...urce_tc_ci_media_transcode_pro_template.go | 65 ++-- ...tc_ci_media_transcode_pro_template_test.go | 30 +- ...resource_tc_ci_media_transcode_template.go | 65 ++-- ...rce_tc_ci_media_transcode_template_test.go | 34 +- .../ci}/resource_tc_ci_media_tts_template.go | 62 ++-- .../resource_tc_ci_media_tts_template_test.go | 30 +- ...urce_tc_ci_media_video_montage_template.go | 65 ++-- ...tc_ci_media_video_montage_template_test.go | 48 +-- ...urce_tc_ci_media_video_process_template.go | 65 ++-- ...tc_ci_media_video_process_template_test.go | 44 +-- ...rce_tc_ci_media_voice_separate_template.go | 65 ++-- ...c_ci_media_voice_separate_template_test.go | 44 +-- ...resource_tc_ci_media_watermark_template.go | 65 ++-- ...rce_tc_ci_media_watermark_template_test.go | 44 +-- ...esource_tc_ci_original_image_protection.go | 36 +- ...ce_tc_ci_original_image_protection_test.go | 14 +- .../services/ci/service_tencentcloud_ci.go | 319 ++++++++++++++++++ 40 files changed, 1302 insertions(+), 855 deletions(-) rename tencentcloud/{ => services/ci}/resource_tc_ci_bucket_attachment.go (64%) rename tencentcloud/{ => services/ci}/resource_tc_ci_bucket_attachment_test.go (73%) rename tencentcloud/{ => services/ci}/resource_tc_ci_bucket_pic_style.go (67%) rename tencentcloud/{ => services/ci}/resource_tc_ci_bucket_pic_style_test.go (71%) rename tencentcloud/{ => services/ci}/resource_tc_ci_guetzli.go (65%) rename tencentcloud/{ => services/ci}/resource_tc_ci_guetzli_test.go (77%) rename tencentcloud/{ => services/ci}/resource_tc_ci_hot_link.go (68%) rename tencentcloud/{ => services/ci}/resource_tc_ci_hot_link_test.go (70%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_animation_template.go (85%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_animation_template_test.go (80%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_concat_template.go (91%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_concat_template_test.go (77%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_pic_process_template.go (73%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_pic_process_template_test.go (71%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_smart_cover_template.go (76%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_smart_cover_template_test.go (73%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_snapshot_template.go (89%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_snapshot_template_test.go (78%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_speech_recognition_template.go (85%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_speech_recognition_template_test.go (78%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_super_resolution_template.go (71%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_super_resolution_template_test.go (72%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_transcode_pro_template.go (90%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_transcode_pro_template_test.go (86%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_transcode_template.go (94%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_transcode_template_test.go (88%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_tts_template.go (73%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_tts_template_test.go (75%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_video_montage_template.go (90%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_video_montage_template_test.go (77%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_video_process_template.go (79%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_video_process_template_test.go (71%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_voice_separate_template.go (77%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_voice_separate_template_test.go (73%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_watermark_template.go (88%) rename tencentcloud/{ => services/ci}/resource_tc_ci_media_watermark_template_test.go (77%) rename tencentcloud/{ => services/ci}/resource_tc_ci_original_image_protection.go (66%) rename tencentcloud/{ => services/ci}/resource_tc_ci_original_image_protection_test.go (78%) create mode 100644 tencentcloud/services/ci/service_tencentcloud_ci.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 7a73a74057..25e75753c7 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/chdfs" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cfw" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cfs" @@ -1606,28 +1607,28 @@ func Provider() *schema.Provider { "tencentcloud_vpc_end_point": resourceTencentCloudVpcEndPoint(), "tencentcloud_vpc_end_point_service_white_list": resourceTencentCloudVpcEndPointServiceWhiteList(), "tencentcloud_vpc_enable_end_point_connect": resourceTencentCloudVpcEnableEndPointConnect(), - "tencentcloud_ci_bucket_attachment": resourceTencentCloudCiBucketAttachment(), + "tencentcloud_ci_bucket_attachment": ci.ResourceTencentCloudCiBucketAttachment(), "tencentcloud_tcmq_queue": resourceTencentCloudTcmqQueue(), "tencentcloud_tcmq_topic": resourceTencentCloudTcmqTopic(), "tencentcloud_tcmq_subscribe": resourceTencentCloudTcmqSubscribe(), - "tencentcloud_ci_bucket_pic_style": resourceTencentCloudCiBucketPicStyle(), - "tencentcloud_ci_hot_link": resourceTencentCloudCiHotLink(), - "tencentcloud_ci_media_snapshot_template": resourceTencentCloudCiMediaSnapshotTemplate(), - "tencentcloud_ci_media_transcode_template": resourceTencentCloudCiMediaTranscodeTemplate(), - "tencentcloud_ci_media_animation_template": resourceTencentCloudCiMediaAnimationTemplate(), - "tencentcloud_ci_media_concat_template": resourceTencentCloudCiMediaConcatTemplate(), - "tencentcloud_ci_media_video_process_template": resourceTencentCloudCiMediaVideoProcessTemplate(), - "tencentcloud_ci_media_video_montage_template": resourceTencentCloudCiMediaVideoMontageTemplate(), - "tencentcloud_ci_media_voice_separate_template": resourceTencentCloudCiMediaVoiceSeparateTemplate(), - "tencentcloud_ci_media_super_resolution_template": resourceTencentCloudCiMediaSuperResolutionTemplate(), - "tencentcloud_ci_media_pic_process_template": resourceTencentCloudCiMediaPicProcessTemplate(), - "tencentcloud_ci_media_watermark_template": resourceTencentCloudCiMediaWatermarkTemplate(), - "tencentcloud_ci_media_tts_template": resourceTencentCloudCiMediaTtsTemplate(), - "tencentcloud_ci_media_transcode_pro_template": resourceTencentCloudCiMediaTranscodeProTemplate(), - "tencentcloud_ci_media_smart_cover_template": resourceTencentCloudCiMediaSmartCoverTemplate(), - "tencentcloud_ci_media_speech_recognition_template": resourceTencentCloudCiMediaSpeechRecognitionTemplate(), - "tencentcloud_ci_guetzli": resourceTencentCloudCIGuetzli(), - "tencentcloud_ci_original_image_protection": resourceTencentCloudCIOriginalImageProtection(), + "tencentcloud_ci_bucket_pic_style": ci.ResourceTencentCloudCiBucketPicStyle(), + "tencentcloud_ci_hot_link": ci.ResourceTencentCloudCiHotLink(), + "tencentcloud_ci_media_snapshot_template": ci.ResourceTencentCloudCiMediaSnapshotTemplate(), + "tencentcloud_ci_media_transcode_template": ci.ResourceTencentCloudCiMediaTranscodeTemplate(), + "tencentcloud_ci_media_animation_template": ci.ResourceTencentCloudCiMediaAnimationTemplate(), + "tencentcloud_ci_media_concat_template": ci.ResourceTencentCloudCiMediaConcatTemplate(), + "tencentcloud_ci_media_video_process_template": ci.ResourceTencentCloudCiMediaVideoProcessTemplate(), + "tencentcloud_ci_media_video_montage_template": ci.ResourceTencentCloudCiMediaVideoMontageTemplate(), + "tencentcloud_ci_media_voice_separate_template": ci.ResourceTencentCloudCiMediaVoiceSeparateTemplate(), + "tencentcloud_ci_media_super_resolution_template": ci.ResourceTencentCloudCiMediaSuperResolutionTemplate(), + "tencentcloud_ci_media_pic_process_template": ci.ResourceTencentCloudCiMediaPicProcessTemplate(), + "tencentcloud_ci_media_watermark_template": ci.ResourceTencentCloudCiMediaWatermarkTemplate(), + "tencentcloud_ci_media_tts_template": ci.ResourceTencentCloudCiMediaTtsTemplate(), + "tencentcloud_ci_media_transcode_pro_template": ci.ResourceTencentCloudCiMediaTranscodeProTemplate(), + "tencentcloud_ci_media_smart_cover_template": ci.ResourceTencentCloudCiMediaSmartCoverTemplate(), + "tencentcloud_ci_media_speech_recognition_template": ci.ResourceTencentCloudCiMediaSpeechRecognitionTemplate(), + "tencentcloud_ci_guetzli": ci.ResourceTencentCloudCIGuetzli(), + "tencentcloud_ci_original_image_protection": ci.ResourceTencentCloudCIOriginalImageProtection(), "tencentcloud_cynosdb_audit_log_file": resourceTencentCloudCynosdbAuditLogFile(), "tencentcloud_cynosdb_security_group": resourceTencentCloudCynosdbSecurityGroup(), "tencentcloud_dayu_ddos_ip_attachment_v2": resourceTencentCloudDayuDDosIpAttachmentV2(), diff --git a/tencentcloud/resource_tc_ci_bucket_attachment.go b/tencentcloud/services/ci/resource_tc_ci_bucket_attachment.go similarity index 64% rename from tencentcloud/resource_tc_ci_bucket_attachment.go rename to tencentcloud/services/ci/resource_tc_ci_bucket_attachment.go index 7ec2931d56..52d8492579 100644 --- a/tencentcloud/resource_tc_ci_bucket_attachment.go +++ b/tencentcloud/services/ci/resource_tc_ci_bucket_attachment.go @@ -1,16 +1,18 @@ -package tencentcloud +package ci import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" ) -func resourceTencentCloudCiBucketAttachment() *schema.Resource { +func ResourceTencentCloudCiBucketAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiBucketAttachmentCreate, Read: resourceTencentCloudCiBucketAttachmentRead, @@ -23,7 +25,7 @@ func resourceTencentCloudCiBucketAttachment() *schema.Resource { Required: true, ForceNew: true, Type: schema.TypeString, - ValidateFunc: validateCosBucketName, + ValidateFunc: tccommon.ValidateCosBucketName, Description: "bucket name.", }, "ci_status": { @@ -36,11 +38,11 @@ func resourceTencentCloudCiBucketAttachment() *schema.Resource { } func resourceTencentCloudCiBucketAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_bucket_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_bucket_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var bucket string if v, ok := d.GetOk("bucket"); ok { @@ -49,11 +51,11 @@ func resourceTencentCloudCiBucketAttachmentCreate(d *schema.ResourceData, meta i return errors.New("get bucket failed!") } - ciClient := meta.(*TencentCloudClient).apiV3Conn.UsePicClient(bucket) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + ciClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UsePicClient(bucket) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := ciClient.CI.OpenCIService(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response status [%s]\n", logId, "OpenCIService", bucket, result.Status) } @@ -70,14 +72,14 @@ func resourceTencentCloudCiBucketAttachmentCreate(d *schema.ResourceData, meta i } func resourceTencentCloudCiBucketAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_bucket_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_bucket_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} bucket := d.Id() @@ -98,23 +100,23 @@ func resourceTencentCloudCiBucketAttachmentRead(d *schema.ResourceData, meta int } func resourceTencentCloudCiBucketAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_bucket_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_bucket_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} bucket := d.Id() if err := service.DeleteCiBucketById(ctx, bucket); err != nil { return err } - retryErr := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + retryErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCiBucketById(ctx, bucket) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result.CIStatus == "unbinding" { return resource.RetryableError(fmt.Errorf("Binding bucket status is %s , retry...", result.CIStatus)) diff --git a/tencentcloud/resource_tc_ci_bucket_attachment_test.go b/tencentcloud/services/ci/resource_tc_ci_bucket_attachment_test.go similarity index 73% rename from tencentcloud/resource_tc_ci_bucket_attachment_test.go rename to tencentcloud/services/ci/resource_tc_ci_bucket_attachment_test.go index a8399fa514..fa45d1820f 100644 --- a/tencentcloud/resource_tc_ci_bucket_attachment_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_bucket_attachment_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "testing" @@ -14,8 +18,8 @@ func TestAccTencentCloudCiBucketAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiBucketAttachmentDestroy, Steps: []resource.TestStep{ { @@ -36,9 +40,9 @@ func TestAccTencentCloudCiBucketAttachmentResource_basic(t *testing.T) { } func testAccCheckCiBucketAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_bucket_attachment" { continue @@ -61,9 +65,9 @@ func testAccCheckCiBucketAttachmentDestroy(s *terraform.State) error { func testAccCheckCiBucketAttachmentExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { diff --git a/tencentcloud/resource_tc_ci_bucket_pic_style.go b/tencentcloud/services/ci/resource_tc_ci_bucket_pic_style.go similarity index 67% rename from tencentcloud/resource_tc_ci_bucket_pic_style.go rename to tencentcloud/services/ci/resource_tc_ci_bucket_pic_style.go index 7e81feedfd..ee1d114857 100644 --- a/tencentcloud/resource_tc_ci_bucket_pic_style.go +++ b/tencentcloud/services/ci/resource_tc_ci_bucket_pic_style.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -7,13 +7,15 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" ci "github.com/tencentyun/cos-go-sdk-v5" ) -func resourceTencentCloudCiBucketPicStyle() *schema.Resource { +func ResourceTencentCloudCiBucketPicStyle() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiBucketPicStyleCreate, Read: resourceTencentCloudCiBucketPicStyleRead, @@ -26,7 +28,7 @@ func resourceTencentCloudCiBucketPicStyle() *schema.Resource { Required: true, ForceNew: true, Type: schema.TypeString, - ValidateFunc: validateCosBucketName, + ValidateFunc: tccommon.ValidateCosBucketName, Description: "bucket name.", }, "style_name": { @@ -47,11 +49,11 @@ func resourceTencentCloudCiBucketPicStyle() *schema.Resource { } func resourceTencentCloudCiBucketPicStyleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_bucket_pic_style.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_bucket_pic_style.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( styleName string @@ -72,15 +74,15 @@ func resourceTencentCloudCiBucketPicStyleCreate(d *schema.ResourceData, meta int styleBody = v.(string) } - ciClient := meta.(*TencentCloudClient).apiV3Conn.UsePicClient(bucket) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + ciClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UsePicClient(bucket) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := ciClient.CI.AddStyle(ctx, &ci.AddStyleOptions{ StyleName: styleName, StyleBody: styleBody, }) if e != nil { time.Sleep(5 * time.Second) - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, response status [%s]\n", logId, "AddStyle", result.Status) @@ -92,22 +94,22 @@ func resourceTencentCloudCiBucketPicStyleCreate(d *schema.ResourceData, meta int return err } - d.SetId(bucket + FILED_SP + styleName) + d.SetId(bucket + tccommon.FILED_SP + styleName) return resourceTencentCloudCiBucketPicStyleRead(d, meta) } func resourceTencentCloudCiBucketPicStyleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_bucket_pic_style.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_bucket_pic_style.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -132,20 +134,20 @@ func resourceTencentCloudCiBucketPicStyleRead(d *schema.ResourceData, meta inter } func resourceTencentCloudCiBucketPicStyleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_bucket_pic_style.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_bucket_pic_style.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } bucket := idSplit[0] styleName := idSplit[1] - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if err := service.DeleteCiBucketPicStyleById(ctx, bucket, styleName); err != nil { return err } diff --git a/tencentcloud/resource_tc_ci_bucket_pic_style_test.go b/tencentcloud/services/ci/resource_tc_ci_bucket_pic_style_test.go similarity index 71% rename from tencentcloud/resource_tc_ci_bucket_pic_style_test.go rename to tencentcloud/services/ci/resource_tc_ci_bucket_pic_style_test.go index e66f1210dc..6ad1898a35 100644 --- a/tencentcloud/resource_tc_ci_bucket_pic_style_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_bucket_pic_style_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci_test import ( "context" @@ -7,8 +7,13 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" ) func init() { @@ -20,14 +25,14 @@ func init() { } func testSweepCiBucketPicStyle(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(region) - client := cli.(*TencentCloudClient).apiV3Conn - service := CiService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(region) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := localci.NewCiService(client) - bucket := defaultCiBucket - styleName := defaultStyleName + bucket := tcacctest.DefaultCiBucket + styleName := tcacctest.DefaultStyleName for { bucketPicStyle, err := service.DescribeCiBucketPicStyleById(ctx, bucket, styleName) @@ -51,8 +56,8 @@ func TestAccTencentCloudCiBucketPicStyleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiBucketPicStyleDestroy, Steps: []resource.TestStep{ { @@ -74,15 +79,15 @@ func TestAccTencentCloudCiBucketPicStyleResource_basic(t *testing.T) { } func testAccCheckCiBucketPicStyleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_bucket_pic_style" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -104,9 +109,9 @@ func testAccCheckCiBucketPicStyleDestroy(s *terraform.State) error { func testAccCheckCiBucketPicStyleExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -115,7 +120,7 @@ func testAccCheckCiBucketPicStyleExists(re string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf(" id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -137,10 +142,10 @@ func testAccCheckCiBucketPicStyleExists(re string) resource.TestCheckFunc { const testAccCiBucketPicStyleVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } variable "style_name" { - default = "` + defaultStyleName + `" + default = "` + tcacctest.DefaultStyleName + `" } ` diff --git a/tencentcloud/resource_tc_ci_guetzli.go b/tencentcloud/services/ci/resource_tc_ci_guetzli.go similarity index 65% rename from tencentcloud/resource_tc_ci_guetzli.go rename to tencentcloud/services/ci/resource_tc_ci_guetzli.go index 6c31b07ba0..4014a458ec 100644 --- a/tencentcloud/resource_tc_ci_guetzli.go +++ b/tencentcloud/services/ci/resource_tc_ci_guetzli.go @@ -1,14 +1,16 @@ -package tencentcloud +package ci import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" ) -func resourceTencentCloudCIGuetzli() *schema.Resource { +func ResourceTencentCloudCIGuetzli() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCIGuetzliCreate, Read: resourceTencentCloudCIGuetzliRead, @@ -23,7 +25,7 @@ func resourceTencentCloudCIGuetzli() *schema.Resource { Required: true, ForceNew: true, Description: "The name of a bucket, the format should be [custom name]-[appid], for example `mycos-1258798060`.", - ValidateFunc: validateCosBucketName, + ValidateFunc: tccommon.ValidateCosBucketName, }, "status": { Type: schema.TypeString, @@ -36,21 +38,21 @@ func resourceTencentCloudCIGuetzli() *schema.Resource { } func resourceTencentCloudCIGuetzliCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_guetzli.create")() + defer tccommon.LogElapsed("resource.tencentcloud_ci_guetzli.create")() d.SetId(d.Get("bucket").(string)) return resourceTencentCloudCIGuetzliUpdate(d, meta) } func resourceTencentCloudCIGuetzliRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_guetzli.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_guetzli.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Id() - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} res, err := service.GetCiGuetzliById(ctx, bucket) if err != nil { return err @@ -63,15 +65,15 @@ func resourceTencentCloudCIGuetzliRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudCIGuetzliUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_guetzli.update")() + defer tccommon.LogElapsed("resource.tencentcloud_ci_guetzli.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Id() if d.HasChange("status") { var err error - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} newStatus := d.Get("status") if newStatus == "on" { @@ -89,13 +91,13 @@ func resourceTencentCloudCIGuetzliUpdate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCIGuetzliDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_guetzli.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_ci_guetzli.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Get("bucket").(string) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} err := service.CloseCiGuetzliById(ctx, bucket) if err != nil { diff --git a/tencentcloud/resource_tc_ci_guetzli_test.go b/tencentcloud/services/ci/resource_tc_ci_guetzli_test.go similarity index 77% rename from tencentcloud/resource_tc_ci_guetzli_test.go rename to tencentcloud/services/ci/resource_tc_ci_guetzli_test.go index 9ebba21049..bcad960f07 100644 --- a/tencentcloud/resource_tc_ci_guetzli_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_guetzli_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "testing" @@ -12,8 +16,8 @@ import ( func TestAccTencentCloudCIGuetzli_basic(t *testing.T) { resourceName := "tencentcloud_ci_guetzli.basic" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTencentCloudCIGuetzliConfig_basic("on"), @@ -49,7 +53,7 @@ func testAccCheckCIGuetzliOn(resourceName string) resource.TestCheckFunc { } bucket := rs.Primary.ID - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.GetCiGuetzliById(context.Background(), bucket) if err != nil { @@ -72,5 +76,5 @@ resource "tencentcloud_ci_guetzli" "basic" { bucket = var.bucket status = %[2]q } -`, defaultCiBucket, status) +`, tcacctest.DefaultCiBucket, status) } diff --git a/tencentcloud/resource_tc_ci_hot_link.go b/tencentcloud/services/ci/resource_tc_ci_hot_link.go similarity index 68% rename from tencentcloud/resource_tc_ci_hot_link.go rename to tencentcloud/services/ci/resource_tc_ci_hot_link.go index 9bd97e7c00..9d1a205d7f 100644 --- a/tencentcloud/resource_tc_ci_hot_link.go +++ b/tencentcloud/services/ci/resource_tc_ci_hot_link.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -6,12 +6,14 @@ import ( "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ci "github.com/tencentyun/cos-go-sdk-v5" ) -func resourceTencentCloudCiHotLink() *schema.Resource { +func ResourceTencentCloudCiHotLink() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiHotLinkCreate, Read: resourceTencentCloudCiHotLinkRead, @@ -46,8 +48,8 @@ func resourceTencentCloudCiHotLink() *schema.Resource { } func resourceTencentCloudCiHotLinkCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_hot_link.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_hot_link.create")() + defer tccommon.InconsistentCheck(d, meta)() var bucket string if v, ok := d.GetOk("bucket"); ok { @@ -62,13 +64,13 @@ func resourceTencentCloudCiHotLinkCreate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCiHotLinkRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_hot_link.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_hot_link.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} bucket := d.Id() @@ -96,11 +98,11 @@ func resourceTencentCloudCiHotLinkRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudCiHotLinkUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_hot_link.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_hot_link.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Id() @@ -117,14 +119,14 @@ func resourceTencentCloudCiHotLinkUpdate(d *schema.ResourceData, meta interface{ } } - ciClient := meta.(*TencentCloudClient).apiV3Conn.UsePicClient(bucket) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + ciClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UsePicClient(bucket) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := ciClient.CI.SetHotLink(ctx, &ci.HotLinkOptions{ Type: hotLinkType, Url: url, }) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response status [%s]\n", logId, "SetHotLink", bucket, result.Status) } @@ -139,15 +141,15 @@ func resourceTencentCloudCiHotLinkUpdate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCiHotLinkDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_hot_link.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_hot_link.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Id() - ciClient := meta.(*TencentCloudClient).apiV3Conn.UsePicClient(bucket) + ciClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UsePicClient(bucket) _, err := ciClient.CI.SetHotLink(ctx, &ci.HotLinkOptions{ Type: "off", Url: []string{}, diff --git a/tencentcloud/resource_tc_ci_hot_link_test.go b/tencentcloud/services/ci/resource_tc_ci_hot_link_test.go similarity index 70% rename from tencentcloud/resource_tc_ci_hot_link_test.go rename to tencentcloud/services/ci/resource_tc_ci_hot_link_test.go index 822067ec8c..88be7c3210 100644 --- a/tencentcloud/resource_tc_ci_hot_link_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_hot_link_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "testing" @@ -14,8 +18,8 @@ func TestAccTencentCloudCiHotLinkResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiHotLinkDestroy, Steps: []resource.TestStep{ { @@ -37,9 +41,9 @@ func TestAccTencentCloudCiHotLinkResource_basic(t *testing.T) { } func testAccCheckCiHotLinkDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_hot_link" { continue @@ -59,9 +63,9 @@ func testAccCheckCiHotLinkDestroy(s *terraform.State) error { func testAccCheckCiHotLinkExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -86,7 +90,7 @@ func testAccCheckCiHotLinkExists(re string) resource.TestCheckFunc { const testAccCiHotLinkVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` diff --git a/tencentcloud/resource_tc_ci_media_animation_template.go b/tencentcloud/services/ci/resource_tc_ci_media_animation_template.go similarity index 85% rename from tencentcloud/resource_tc_ci_media_animation_template.go rename to tencentcloud/services/ci/resource_tc_ci_media_animation_template.go index 6e6df038e9..10772ba0a7 100644 --- a/tencentcloud/resource_tc_ci_media_animation_template.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_animation_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentyun/cos-go-sdk-v5" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCiMediaAnimationTemplate() *schema.Resource { +func ResourceTencentCloudCiMediaAnimationTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiMediaAnimationTemplateCreate, Read: resourceTencentCloudCiMediaAnimationTemplateRead, @@ -127,11 +130,11 @@ func resourceTencentCloudCiMediaAnimationTemplate() *schema.Resource { } func resourceTencentCloudCiMediaAnimationTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_animation_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_animation_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cos.CreateMediaAnimationTemplateOptions{ @@ -200,10 +203,10 @@ func resourceTencentCloudCiMediaAnimationTemplateCreate(d *schema.ResourceData, } var response *cos.CreateMediaTemplateResult - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.CreateMediaAnimationTemplate(ctx, &request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.CreateMediaAnimationTemplate(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%+v], response body [%+v]\n", logId, "CreateMediaAnimationTemplate", request, result) } @@ -216,22 +219,22 @@ func resourceTencentCloudCiMediaAnimationTemplateCreate(d *schema.ResourceData, } templateId = response.Template.TemplateId - d.SetId(bucket + FILED_SP + templateId) + d.SetId(bucket + tccommon.FILED_SP + templateId) return resourceTencentCloudCiMediaAnimationTemplateRead(d, meta) } func resourceTencentCloudCiMediaAnimationTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_animation_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_animation_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -329,11 +332,11 @@ func resourceTencentCloudCiMediaAnimationTemplateRead(d *schema.ResourceData, me } func resourceTencentCloudCiMediaAnimationTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_animation_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_animation_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cos.CreateMediaAnimationTemplateOptions{ Tag: "Animation", @@ -395,17 +398,17 @@ func resourceTencentCloudCiMediaAnimationTemplateUpdate(d *schema.ResourceData, } } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } bucket := idSplit[0] templateId := idSplit[1] - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.UpdateMediaAnimationTemplate(ctx, &request, templateId) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.UpdateMediaAnimationTemplate(ctx, &request, templateId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "UpdateMediaAnimationTemplate", request, result) } @@ -420,14 +423,14 @@ func resourceTencentCloudCiMediaAnimationTemplateUpdate(d *schema.ResourceData, } func resourceTencentCloudCiMediaAnimationTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_animation_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_animation_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ci_media_animation_template_test.go b/tencentcloud/services/ci/resource_tc_ci_media_animation_template_test.go similarity index 80% rename from tencentcloud/resource_tc_ci_media_animation_template_test.go rename to tencentcloud/services/ci/resource_tc_ci_media_animation_template_test.go index 841cd8ac98..ceea49b823 100644 --- a/tencentcloud/resource_tc_ci_media_animation_template_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_animation_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "strings" @@ -15,8 +19,8 @@ func TestAccTencentCloudCiMediaAnimationTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiMediaAnimationTemplateDestroy, Steps: []resource.TestStep{ { @@ -24,7 +28,7 @@ func TestAccTencentCloudCiMediaAnimationTemplateResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckCiMediaAnimationTemplateExists("tencentcloud_ci_media_animation_template.media_animation_template"), resource.TestCheckResourceAttrSet("tencentcloud_ci_media_animation_template.media_animation_template", "id"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_animation_template.media_animation_template", "bucket", defaultCiBucket), + resource.TestCheckResourceAttr("tencentcloud_ci_media_animation_template.media_animation_template", "bucket", tcacctest.DefaultCiBucket), resource.TestCheckResourceAttr("tencentcloud_ci_media_animation_template.media_animation_template", "name", "animation_template_test"), resource.TestCheckResourceAttr("tencentcloud_ci_media_animation_template.media_animation_template", "container.#", "1"), resource.TestCheckResourceAttr("tencentcloud_ci_media_animation_template.media_animation_template", "container.0.format", "gif"), @@ -49,15 +53,15 @@ func TestAccTencentCloudCiMediaAnimationTemplateResource_basic(t *testing.T) { } func testAccCheckCiMediaAnimationTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_media_animation_template" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -78,9 +82,9 @@ func testAccCheckCiMediaAnimationTemplateDestroy(s *terraform.State) error { func testAccCheckCiMediaAnimationTemplateExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -90,7 +94,7 @@ func testAccCheckCiMediaAnimationTemplateExists(re string) resource.TestCheckFun return fmt.Errorf(" id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -112,7 +116,7 @@ func testAccCheckCiMediaAnimationTemplateExists(re string) resource.TestCheckFun const testAccCiMediaAnimationTemplateVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` diff --git a/tencentcloud/resource_tc_ci_media_concat_template.go b/tencentcloud/services/ci/resource_tc_ci_media_concat_template.go similarity index 91% rename from tencentcloud/resource_tc_ci_media_concat_template.go rename to tencentcloud/services/ci/resource_tc_ci_media_concat_template.go index ccb6ce1f1f..1ca216b36b 100644 --- a/tencentcloud/resource_tc_ci_media_concat_template.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_concat_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentyun/cos-go-sdk-v5" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCiMediaConcatTemplate() *schema.Resource { +func ResourceTencentCloudCiMediaConcatTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiMediaConcatTemplateCreate, Read: resourceTencentCloudCiMediaConcatTemplateRead, @@ -230,11 +233,11 @@ func resourceTencentCloudCiMediaConcatTemplate() *schema.Resource { } func resourceTencentCloudCiMediaConcatTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_concat_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_concat_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cos.CreateMediaConcatTemplateOptions{ @@ -362,10 +365,10 @@ func resourceTencentCloudCiMediaConcatTemplateCreate(d *schema.ResourceData, met } var response *cos.CreateMediaTemplateResult - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.CreateMediaConcatTemplate(ctx, &request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.CreateMediaConcatTemplate(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "CreateMediaConcatTemplate", request, result) } @@ -378,21 +381,21 @@ func resourceTencentCloudCiMediaConcatTemplateCreate(d *schema.ResourceData, met } templateId = response.Template.TemplateId - d.SetId(bucket + FILED_SP + templateId) + d.SetId(bucket + tccommon.FILED_SP + templateId) return resourceTencentCloudCiMediaConcatTemplateRead(d, meta) } func resourceTencentCloudCiMediaConcatTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_concat_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_concat_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -563,11 +566,11 @@ func resourceTencentCloudCiMediaConcatTemplateRead(d *schema.ResourceData, meta } func resourceTencentCloudCiMediaConcatTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_concat_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_concat_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cos.CreateMediaConcatTemplateOptions{ Tag: "Concat", @@ -686,17 +689,17 @@ func resourceTencentCloudCiMediaConcatTemplateUpdate(d *schema.ResourceData, met } } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } bucket := idSplit[0] templateId := idSplit[1] - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.UpdateMediaConcatTemplate(ctx, &request, templateId) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.UpdateMediaConcatTemplate(ctx, &request, templateId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "UpdateMediaConcatTemplate", request, result) } @@ -711,14 +714,14 @@ func resourceTencentCloudCiMediaConcatTemplateUpdate(d *schema.ResourceData, met } func resourceTencentCloudCiMediaConcatTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_concat_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_concat_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ci_media_concat_template_test.go b/tencentcloud/services/ci/resource_tc_ci_media_concat_template_test.go similarity index 77% rename from tencentcloud/resource_tc_ci_media_concat_template_test.go rename to tencentcloud/services/ci/resource_tc_ci_media_concat_template_test.go index 9f2a5683c6..eeca72b792 100644 --- a/tencentcloud/resource_tc_ci_media_concat_template_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_concat_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "strings" @@ -16,13 +20,13 @@ func init() { resource.AddTestSweepers("tencentcloud_ci_media_concat_template", &resource.Sweeper{ Name: "tencentcloud_ci_media_concat_template", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := CiService{client: client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := localci.NewCiService(client) - response, _, err := service.client.UseCiClient(defaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ + response, _, err := client.UseCiClient(tcacctest.DefaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ Name: "concat_templates", }) if err != nil { @@ -30,7 +34,7 @@ func init() { } for _, v := range response.TemplateList { - err := service.DeleteCiMediaTemplateById(ctx, defaultCiBucket, v.TemplateId) + err := service.DeleteCiMediaTemplateById(ctx, tcacctest.DefaultCiBucket, v.TemplateId) if err != nil { continue } @@ -46,8 +50,8 @@ func TestAccTencentCloudCiMediaConcatTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiMediaConcatTemplateDestroy, Steps: []resource.TestStep{ { @@ -55,13 +59,13 @@ func TestAccTencentCloudCiMediaConcatTemplateResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckCiMediaConcatTemplateTemplateExists("tencentcloud_ci_media_concat_template.media_concat_template"), resource.TestCheckResourceAttrSet("tencentcloud_ci_media_concat_template.media_concat_template", "id"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "bucket", defaultCiBucket), + resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "bucket", tcacctest.DefaultCiBucket), resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "name", "concat_templates"), resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.#", "1"), resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.concat_fragment.#", "2"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.concat_fragment.0.url", "https://"+defaultCiBucket+".cos.ap-guangzhou.myqcloud.com/mp4%2Fmp4-test.mp4"), + resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.concat_fragment.0.url", "https://"+tcacctest.DefaultCiBucket+".cos.ap-guangzhou.myqcloud.com/mp4%2Fmp4-test.mp4"), resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.concat_fragment.0.mode", "Start"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.concat_fragment.1.url", "https://"+defaultCiBucket+".cos.ap-guangzhou.myqcloud.com/mp4%2Fmp4-test.mp4"), + resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.concat_fragment.1.url", "https://"+tcacctest.DefaultCiBucket+".cos.ap-guangzhou.myqcloud.com/mp4%2Fmp4-test.mp4"), resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.concat_fragment.1.mode", "End"), resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.audio.#", "1"), resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.audio.0.codec", "mp3"), @@ -73,7 +77,7 @@ func TestAccTencentCloudCiMediaConcatTemplateResource_basic(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.container.#", "1"), resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.container.0.format", "mp4"), resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.audio_mix.#", "1"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.audio_mix.0.audio_source", "https://"+defaultCiBucket+".cos.ap-guangzhou.myqcloud.com/mp3%2Fnizhan-test.mp3"), + resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.audio_mix.0.audio_source", "https://"+tcacctest.DefaultCiBucket+".cos.ap-guangzhou.myqcloud.com/mp3%2Fnizhan-test.mp3"), resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.audio_mix.0.mix_mode", "Once"), resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.audio_mix.0.replace", "true"), resource.TestCheckResourceAttr("tencentcloud_ci_media_concat_template.media_concat_template", "concat_template.0.audio_mix.0.effect_config.#", "1"), @@ -94,15 +98,15 @@ func TestAccTencentCloudCiMediaConcatTemplateResource_basic(t *testing.T) { } func testAccCheckCiMediaConcatTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_media_concat_template" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -123,9 +127,9 @@ func testAccCheckCiMediaConcatTemplateDestroy(s *terraform.State) error { func testAccCheckCiMediaConcatTemplateTemplateExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -135,7 +139,7 @@ func testAccCheckCiMediaConcatTemplateTemplateExists(re string) resource.TestChe return fmt.Errorf(" id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -157,7 +161,7 @@ func testAccCheckCiMediaConcatTemplateTemplateExists(re string) resource.TestChe const testAccCiMediaConcatTemplateVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` @@ -169,11 +173,11 @@ resource "tencentcloud_ci_media_concat_template" "media_concat_template" { name = "concat_templates" concat_template { concat_fragment { - url = "https://` + defaultCiBucket + `.cos.ap-guangzhou.myqcloud.com/mp4%2Fmp4-test.mp4" + url = "https://` + tcacctest.DefaultCiBucket + `.cos.ap-guangzhou.myqcloud.com/mp4%2Fmp4-test.mp4" mode = "Start" } concat_fragment { - url = "https://` + defaultCiBucket + `.cos.ap-guangzhou.myqcloud.com/mp4%2Fmp4-test.mp4" + url = "https://` + tcacctest.DefaultCiBucket + `.cos.ap-guangzhou.myqcloud.com/mp4%2Fmp4-test.mp4" mode = "End" } audio { @@ -196,7 +200,7 @@ resource "tencentcloud_ci_media_concat_template" "media_concat_template" { format = "mp4" } audio_mix { - audio_source = "https://` + defaultCiBucket + `.cos.ap-guangzhou.myqcloud.com/mp3%2Fnizhan-test.mp3" + audio_source = "https://` + tcacctest.DefaultCiBucket + `.cos.ap-guangzhou.myqcloud.com/mp3%2Fnizhan-test.mp3" mix_mode = "Once" replace = "true" effect_config { diff --git a/tencentcloud/resource_tc_ci_media_pic_process_template.go b/tencentcloud/services/ci/resource_tc_ci_media_pic_process_template.go similarity index 73% rename from tencentcloud/resource_tc_ci_media_pic_process_template.go rename to tencentcloud/services/ci/resource_tc_ci_media_pic_process_template.go index d07ebc1e8c..405a7f9c88 100644 --- a/tencentcloud/resource_tc_ci_media_pic_process_template.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_pic_process_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentyun/cos-go-sdk-v5" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCiMediaPicProcessTemplate() *schema.Resource { +func ResourceTencentCloudCiMediaPicProcessTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiMediaPicProcessTemplateCreate, Read: resourceTencentCloudCiMediaPicProcessTemplateRead, @@ -60,11 +63,11 @@ func resourceTencentCloudCiMediaPicProcessTemplate() *schema.Resource { } func resourceTencentCloudCiMediaPicProcessTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_pic_process_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_pic_process_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cos.CreateMediaPicProcessTemplateOptions{ @@ -96,10 +99,10 @@ func resourceTencentCloudCiMediaPicProcessTemplateCreate(d *schema.ResourceData, } var response *cos.CreateMediaTemplateResult - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.CreateMediaPicProcessTemplate(ctx, &request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.CreateMediaPicProcessTemplate(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%+v]\n", logId, "CreateMediaPicProcessTemplate", request, result) } @@ -112,21 +115,21 @@ func resourceTencentCloudCiMediaPicProcessTemplateCreate(d *schema.ResourceData, } templateId = response.Template.TemplateId - d.SetId(bucket + FILED_SP + templateId) + d.SetId(bucket + tccommon.FILED_SP + templateId) return resourceTencentCloudCiMediaPicProcessTemplateRead(d, meta) } func resourceTencentCloudCiMediaPicProcessTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_pic_process_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_pic_process_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -170,11 +173,11 @@ func resourceTencentCloudCiMediaPicProcessTemplateRead(d *schema.ResourceData, m } func resourceTencentCloudCiMediaPicProcessTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_pic_process_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_pic_process_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cos.CreateMediaPicProcessTemplateOptions{ Tag: "PicProcess", @@ -197,17 +200,17 @@ func resourceTencentCloudCiMediaPicProcessTemplateUpdate(d *schema.ResourceData, } } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } bucket := idSplit[0] templateId := idSplit[1] - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.UpdateMediaPicProcessTemplate(ctx, &request, templateId) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.UpdateMediaPicProcessTemplate(ctx, &request, templateId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "UpdateMediaPicProcessTemplate", request, result) } @@ -222,14 +225,14 @@ func resourceTencentCloudCiMediaPicProcessTemplateUpdate(d *schema.ResourceData, } func resourceTencentCloudCiMediaPicProcessTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_pic_process_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_pic_process_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ci_media_pic_process_template_test.go b/tencentcloud/services/ci/resource_tc_ci_media_pic_process_template_test.go similarity index 71% rename from tencentcloud/resource_tc_ci_media_pic_process_template_test.go rename to tencentcloud/services/ci/resource_tc_ci_media_pic_process_template_test.go index 11a17fff67..9f6daf4d4c 100644 --- a/tencentcloud/resource_tc_ci_media_pic_process_template_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_pic_process_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "strings" @@ -16,13 +20,13 @@ func init() { resource.AddTestSweepers("tencentcloud_ci_media_pic_process_template", &resource.Sweeper{ Name: "tencentcloud_ci_media_pic_process_template", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := CiService{client: client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := localci.NewCiService(client) - response, _, err := service.client.UseCiClient(defaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ + response, _, err := client.UseCiClient(tcacctest.DefaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ Name: "pic_process_template", }) if err != nil { @@ -30,7 +34,7 @@ func init() { } for _, v := range response.TemplateList { - err := service.DeleteCiMediaTemplateById(ctx, defaultCiBucket, v.TemplateId) + err := service.DeleteCiMediaTemplateById(ctx, tcacctest.DefaultCiBucket, v.TemplateId) if err != nil { continue } @@ -46,8 +50,8 @@ func TestAccTencentCloudCiMediaPicProcessTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiMediaPicProcessTemplateDestroy, Steps: []resource.TestStep{ { @@ -55,7 +59,7 @@ func TestAccTencentCloudCiMediaPicProcessTemplateResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckCiMediaPicProcessTemplateTemplateExists("tencentcloud_ci_media_pic_process_template.media_pic_process_template"), resource.TestCheckResourceAttrSet("tencentcloud_ci_media_pic_process_template.media_pic_process_template", "id"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_pic_process_template.media_pic_process_template", "bucket", defaultCiBucket), + resource.TestCheckResourceAttr("tencentcloud_ci_media_pic_process_template.media_pic_process_template", "bucket", tcacctest.DefaultCiBucket), resource.TestCheckResourceAttr("tencentcloud_ci_media_pic_process_template.media_pic_process_template", "name", "pic_process_template"), resource.TestCheckResourceAttr("tencentcloud_ci_media_pic_process_template.media_pic_process_template", "pic_process.#", "1"), resource.TestCheckResourceAttr("tencentcloud_ci_media_pic_process_template.media_pic_process_template", "pic_process.0.is_pic_info", "true"), @@ -72,15 +76,15 @@ func TestAccTencentCloudCiMediaPicProcessTemplateResource_basic(t *testing.T) { } func testAccCheckCiMediaPicProcessTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_media_pic_process_template" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -101,9 +105,9 @@ func testAccCheckCiMediaPicProcessTemplateDestroy(s *terraform.State) error { func testAccCheckCiMediaPicProcessTemplateTemplateExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -113,7 +117,7 @@ func testAccCheckCiMediaPicProcessTemplateTemplateExists(re string) resource.Tes return fmt.Errorf(" id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -135,7 +139,7 @@ func testAccCheckCiMediaPicProcessTemplateTemplateExists(re string) resource.Tes const testAccCiMediaPicProcessTemplateVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` diff --git a/tencentcloud/resource_tc_ci_media_smart_cover_template.go b/tencentcloud/services/ci/resource_tc_ci_media_smart_cover_template.go similarity index 76% rename from tencentcloud/resource_tc_ci_media_smart_cover_template.go rename to tencentcloud/services/ci/resource_tc_ci_media_smart_cover_template.go index 4a8862a8e3..f8540a36cb 100644 --- a/tencentcloud/resource_tc_ci_media_smart_cover_template.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_smart_cover_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentyun/cos-go-sdk-v5" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCiMediaSmartCoverTemplate() *schema.Resource { +func ResourceTencentCloudCiMediaSmartCoverTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiMediaSmartCoverTemplateCreate, Read: resourceTencentCloudCiMediaSmartCoverTemplateRead, @@ -75,11 +78,11 @@ func resourceTencentCloudCiMediaSmartCoverTemplate() *schema.Resource { } func resourceTencentCloudCiMediaSmartCoverTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_smart_cover_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_smart_cover_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cos.CreateMediaSmartCoverTemplateOptions{ @@ -120,10 +123,10 @@ func resourceTencentCloudCiMediaSmartCoverTemplateCreate(d *schema.ResourceData, } var response *cos.CreateMediaTemplateResult - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.CreateMediaSmartCoverTemplate(ctx, &request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.CreateMediaSmartCoverTemplate(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "CreateMediaSmartCoverTemplate", request, result) } @@ -136,21 +139,21 @@ func resourceTencentCloudCiMediaSmartCoverTemplateCreate(d *schema.ResourceData, } templateId = response.Template.TemplateId - d.SetId(bucket + FILED_SP + templateId) + d.SetId(bucket + tccommon.FILED_SP + templateId) return resourceTencentCloudCiMediaSmartCoverTemplateRead(d, meta) } func resourceTencentCloudCiMediaSmartCoverTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_smart_cover_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_smart_cover_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -203,11 +206,11 @@ func resourceTencentCloudCiMediaSmartCoverTemplateRead(d *schema.ResourceData, m } func resourceTencentCloudCiMediaSmartCoverTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_smart_cover_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_smart_cover_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cos.CreateMediaSmartCoverTemplateOptions{ Tag: "SmartCover", @@ -239,17 +242,17 @@ func resourceTencentCloudCiMediaSmartCoverTemplateUpdate(d *schema.ResourceData, } } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } bucket := idSplit[0] templateId := idSplit[1] - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.UpdateMediaSmartCoverTemplate(ctx, &request, templateId) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.UpdateMediaSmartCoverTemplate(ctx, &request, templateId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "UpdateMediaSmartCoverTemplate", request, result) } @@ -264,14 +267,14 @@ func resourceTencentCloudCiMediaSmartCoverTemplateUpdate(d *schema.ResourceData, } func resourceTencentCloudCiMediaSmartCoverTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_smart_cover_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_smart_cover_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ci_media_smart_cover_template_test.go b/tencentcloud/services/ci/resource_tc_ci_media_smart_cover_template_test.go similarity index 73% rename from tencentcloud/resource_tc_ci_media_smart_cover_template_test.go rename to tencentcloud/services/ci/resource_tc_ci_media_smart_cover_template_test.go index 26e8ac91d6..aa74569a33 100644 --- a/tencentcloud/resource_tc_ci_media_smart_cover_template_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_smart_cover_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "strings" @@ -16,13 +20,13 @@ func init() { resource.AddTestSweepers("tencentcloud_ci_media_smart_cover_template", &resource.Sweeper{ Name: "tencentcloud_ci_media_smart_cover_template", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := CiService{client: client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := localci.NewCiService(client) - response, _, err := service.client.UseCiClient(defaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ + response, _, err := client.UseCiClient(tcacctest.DefaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ Name: "smart_cover_template", }) if err != nil { @@ -30,7 +34,7 @@ func init() { } for _, v := range response.TemplateList { - err := service.DeleteCiMediaTemplateById(ctx, defaultCiBucket, v.TemplateId) + err := service.DeleteCiMediaTemplateById(ctx, tcacctest.DefaultCiBucket, v.TemplateId) if err != nil { continue } @@ -46,8 +50,8 @@ func TestAccTencentCloudCiMediaSmartCoverTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiMediaSmartCoverTemplateDestroy, Steps: []resource.TestStep{ { @@ -55,7 +59,7 @@ func TestAccTencentCloudCiMediaSmartCoverTemplateResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckCiMediaSmartCoverTemplateTemplateExists("tencentcloud_ci_media_smart_cover_template.media_smart_cover_template"), resource.TestCheckResourceAttrSet("tencentcloud_ci_media_smart_cover_template.media_smart_cover_template", "id"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_smart_cover_template.media_smart_cover_template", "bucket", defaultCiBucket), + resource.TestCheckResourceAttr("tencentcloud_ci_media_smart_cover_template.media_smart_cover_template", "bucket", tcacctest.DefaultCiBucket), resource.TestCheckResourceAttr("tencentcloud_ci_media_smart_cover_template.media_smart_cover_template", "name", "smart_cover_template"), resource.TestCheckResourceAttr("tencentcloud_ci_media_smart_cover_template.media_smart_cover_template", "smart_cover.#", "1"), resource.TestCheckResourceAttr("tencentcloud_ci_media_smart_cover_template.media_smart_cover_template", "smart_cover.0.format", "jpg"), @@ -75,15 +79,15 @@ func TestAccTencentCloudCiMediaSmartCoverTemplateResource_basic(t *testing.T) { } func testAccCheckCiMediaSmartCoverTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_media_smart_cover_template" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -104,9 +108,9 @@ func testAccCheckCiMediaSmartCoverTemplateDestroy(s *terraform.State) error { func testAccCheckCiMediaSmartCoverTemplateTemplateExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -116,7 +120,7 @@ func testAccCheckCiMediaSmartCoverTemplateTemplateExists(re string) resource.Tes return fmt.Errorf(" id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -138,7 +142,7 @@ func testAccCheckCiMediaSmartCoverTemplateTemplateExists(re string) resource.Tes const testAccCiMediaSmartCoverTemplateVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` diff --git a/tencentcloud/resource_tc_ci_media_snapshot_template.go b/tencentcloud/services/ci/resource_tc_ci_media_snapshot_template.go similarity index 89% rename from tencentcloud/resource_tc_ci_media_snapshot_template.go rename to tencentcloud/services/ci/resource_tc_ci_media_snapshot_template.go index d0abfe0204..821dd978a1 100644 --- a/tencentcloud/resource_tc_ci_media_snapshot_template.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_snapshot_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentyun/cos-go-sdk-v5" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCiMediaSnapshotTemplate() *schema.Resource { +func ResourceTencentCloudCiMediaSnapshotTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiMediaSnapshotTemplateCreate, Read: resourceTencentCloudCiMediaSnapshotTemplateRead, @@ -188,11 +191,11 @@ func resourceTencentCloudCiMediaSnapshotTemplate() *schema.Resource { } func resourceTencentCloudCiMediaSnapshotTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_snapshot_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_snapshot_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var templateId string var bucket string @@ -284,11 +287,11 @@ func resourceTencentCloudCiMediaSnapshotTemplateCreate(d *schema.ResourceData, m } var response *cos.CreateMediaTemplateResult - ciClient := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + ciClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, _, e := ciClient.CI.CreateMediaSnapshotTemplate(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%+v]\n", logId, "CreateMediaSnapshotTemplate", request, result) } @@ -301,21 +304,21 @@ func resourceTencentCloudCiMediaSnapshotTemplateCreate(d *schema.ResourceData, m } templateId = response.Template.TemplateId - d.SetId(bucket + FILED_SP + templateId) + d.SetId(bucket + tccommon.FILED_SP + templateId) return resourceTencentCloudCiMediaSnapshotTemplateRead(d, meta) } func resourceTencentCloudCiMediaSnapshotTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_snapshot_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_snapshot_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -440,13 +443,13 @@ func resourceTencentCloudCiMediaSnapshotTemplateRead(d *schema.ResourceData, met } func resourceTencentCloudCiMediaSnapshotTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_snapshot_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_snapshot_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -528,10 +531,10 @@ func resourceTencentCloudCiMediaSnapshotTemplateUpdate(d *schema.ResourceData, m } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.UpdateMediaSnapshotTemplate(ctx, &request, templateId) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.UpdateMediaSnapshotTemplate(ctx, &request, templateId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "UpdateMediaSnapshotTemplate", request, result) } @@ -546,14 +549,14 @@ func resourceTencentCloudCiMediaSnapshotTemplateUpdate(d *schema.ResourceData, m } func resourceTencentCloudCiMediaSnapshotTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_snapshot_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_snapshot_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ci_media_snapshot_template_test.go b/tencentcloud/services/ci/resource_tc_ci_media_snapshot_template_test.go similarity index 78% rename from tencentcloud/resource_tc_ci_media_snapshot_template_test.go rename to tencentcloud/services/ci/resource_tc_ci_media_snapshot_template_test.go index 0bb82830e6..d9fb8f2ebc 100644 --- a/tencentcloud/resource_tc_ci_media_snapshot_template_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_snapshot_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "strings" @@ -15,8 +19,8 @@ func TestAccTencentCloudCiMediaSnapshotTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiMediaSnapshotTemplateDestroy, Steps: []resource.TestStep{ { @@ -24,7 +28,7 @@ func TestAccTencentCloudCiMediaSnapshotTemplateResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckCiMediaSnapshotTemplateTemplateExists("tencentcloud_ci_media_snapshot_template.media_snapshot_template"), resource.TestCheckResourceAttrSet("tencentcloud_ci_media_snapshot_template.media_snapshot_template", "id"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_snapshot_template.media_snapshot_template", "bucket", defaultCiBucket), + resource.TestCheckResourceAttr("tencentcloud_ci_media_snapshot_template.media_snapshot_template", "bucket", tcacctest.DefaultCiBucket), resource.TestCheckResourceAttr("tencentcloud_ci_media_snapshot_template.media_snapshot_template", "name", "snapshot_template_test"), resource.TestCheckResourceAttr("tencentcloud_ci_media_snapshot_template.media_snapshot_template", "snapshot.#", "1"), resource.TestCheckResourceAttr("tencentcloud_ci_media_snapshot_template.media_snapshot_template", "snapshot.0.count", "10"), @@ -45,15 +49,15 @@ func TestAccTencentCloudCiMediaSnapshotTemplateResource_basic(t *testing.T) { } func testAccCheckCiMediaSnapshotTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_media_snapshot_template" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -74,9 +78,9 @@ func testAccCheckCiMediaSnapshotTemplateDestroy(s *terraform.State) error { func testAccCheckCiMediaSnapshotTemplateTemplateExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -86,7 +90,7 @@ func testAccCheckCiMediaSnapshotTemplateTemplateExists(re string) resource.TestC return fmt.Errorf(" id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -108,7 +112,7 @@ func testAccCheckCiMediaSnapshotTemplateTemplateExists(re string) resource.TestC const testAccCiMediaSnapshotTemplateVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` diff --git a/tencentcloud/resource_tc_ci_media_speech_recognition_template.go b/tencentcloud/services/ci/resource_tc_ci_media_speech_recognition_template.go similarity index 85% rename from tencentcloud/resource_tc_ci_media_speech_recognition_template.go rename to tencentcloud/services/ci/resource_tc_ci_media_speech_recognition_template.go index bdca735eb9..6649cca6ab 100644 --- a/tencentcloud/resource_tc_ci_media_speech_recognition_template.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_speech_recognition_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentyun/cos-go-sdk-v5" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCiMediaSpeechRecognitionTemplate() *schema.Resource { +func ResourceTencentCloudCiMediaSpeechRecognitionTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiMediaSpeechRecognitionTemplateCreate, Read: resourceTencentCloudCiMediaSpeechRecognitionTemplateRead, @@ -100,11 +103,11 @@ func resourceTencentCloudCiMediaSpeechRecognitionTemplate() *schema.Resource { } func resourceTencentCloudCiMediaSpeechRecognitionTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_speech_recognition_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_speech_recognition_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cos.CreateMediaSpeechRecognitionTemplateOptions{ @@ -160,10 +163,10 @@ func resourceTencentCloudCiMediaSpeechRecognitionTemplateCreate(d *schema.Resour } var response *cos.CreateMediaTemplateResult - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.CreateMediaSpeechRecognitionTemplate(ctx, &request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.CreateMediaSpeechRecognitionTemplate(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "CreateMediaSpeechRecognitionTemplate", request, result) } @@ -176,21 +179,21 @@ func resourceTencentCloudCiMediaSpeechRecognitionTemplateCreate(d *schema.Resour } templateId = response.Template.TemplateId - d.SetId(bucket + FILED_SP + templateId) + d.SetId(bucket + tccommon.FILED_SP + templateId) return resourceTencentCloudCiMediaSpeechRecognitionTemplateRead(d, meta) } func resourceTencentCloudCiMediaSpeechRecognitionTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_speech_recognition_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_speech_recognition_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -263,11 +266,11 @@ func resourceTencentCloudCiMediaSpeechRecognitionTemplateRead(d *schema.Resource } func resourceTencentCloudCiMediaSpeechRecognitionTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_speech_recognition_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_speech_recognition_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cos.CreateMediaSpeechRecognitionTemplateOptions{ Tag: "SpeechRecognition", @@ -314,17 +317,17 @@ func resourceTencentCloudCiMediaSpeechRecognitionTemplateUpdate(d *schema.Resour } } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } bucket := idSplit[0] templateId := idSplit[1] - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.UpdateMediaSpeechRecognitionTemplate(ctx, &request, templateId) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.UpdateMediaSpeechRecognitionTemplate(ctx, &request, templateId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "UpdateMediaSpeechRecognitionTemplate", request, result) } @@ -339,14 +342,14 @@ func resourceTencentCloudCiMediaSpeechRecognitionTemplateUpdate(d *schema.Resour } func resourceTencentCloudCiMediaSpeechRecognitionTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_speech_recognition_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_speech_recognition_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ci_media_speech_recognition_template_test.go b/tencentcloud/services/ci/resource_tc_ci_media_speech_recognition_template_test.go similarity index 78% rename from tencentcloud/resource_tc_ci_media_speech_recognition_template_test.go rename to tencentcloud/services/ci/resource_tc_ci_media_speech_recognition_template_test.go index 962eebd462..4e6587eb49 100644 --- a/tencentcloud/resource_tc_ci_media_speech_recognition_template_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_speech_recognition_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "strings" @@ -16,13 +20,13 @@ func init() { resource.AddTestSweepers("tencentcloud_ci_media_speech_recognition_template", &resource.Sweeper{ Name: "tencentcloud_ci_media_speech_recognition_template", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := CiService{client: client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := localci.NewCiService(client) - response, _, err := service.client.UseCiClient(defaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ + response, _, err := client.UseCiClient(tcacctest.DefaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ Name: "speech_recognition_template", }) if err != nil { @@ -30,7 +34,7 @@ func init() { } for _, v := range response.TemplateList { - err := service.DeleteCiMediaTemplateById(ctx, defaultCiBucket, v.TemplateId) + err := service.DeleteCiMediaTemplateById(ctx, tcacctest.DefaultCiBucket, v.TemplateId) if err != nil { continue } @@ -46,8 +50,8 @@ func TestAccTencentCloudCiMediaSpeechRecognitionTemplateResource_basic(t *testin t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiMediaSpeechRecognitionTemplateDestroy, Steps: []resource.TestStep{ { @@ -55,7 +59,7 @@ func TestAccTencentCloudCiMediaSpeechRecognitionTemplateResource_basic(t *testin Check: resource.ComposeTestCheckFunc( testAccCheckCiMediaSpeechRecognitionTemplateExists("tencentcloud_ci_media_speech_recognition_template.media_speech_recognition_template"), resource.TestCheckResourceAttrSet("tencentcloud_ci_media_speech_recognition_template.media_speech_recognition_template", "id"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_speech_recognition_template.media_speech_recognition_template", "bucket", defaultCiBucket), + resource.TestCheckResourceAttr("tencentcloud_ci_media_speech_recognition_template.media_speech_recognition_template", "bucket", tcacctest.DefaultCiBucket), resource.TestCheckResourceAttr("tencentcloud_ci_media_speech_recognition_template.media_speech_recognition_template", "name", "speech_recognition_template"), resource.TestCheckResourceAttr("tencentcloud_ci_media_speech_recognition_template.media_speech_recognition_template", "speech_recognition.#", "1"), resource.TestCheckResourceAttr("tencentcloud_ci_media_speech_recognition_template.media_speech_recognition_template", "speech_recognition.0.engine_model_type", "16k_zh"), @@ -80,15 +84,15 @@ func TestAccTencentCloudCiMediaSpeechRecognitionTemplateResource_basic(t *testin } func testAccCheckCiMediaSpeechRecognitionTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_media_speech_recognition_template" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -109,9 +113,9 @@ func testAccCheckCiMediaSpeechRecognitionTemplateDestroy(s *terraform.State) err func testAccCheckCiMediaSpeechRecognitionTemplateExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -121,7 +125,7 @@ func testAccCheckCiMediaSpeechRecognitionTemplateExists(re string) resource.Test return fmt.Errorf(" id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -143,7 +147,7 @@ func testAccCheckCiMediaSpeechRecognitionTemplateExists(re string) resource.Test const testAccCiMediaSpeechRecognitionTemplateVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` diff --git a/tencentcloud/resource_tc_ci_media_super_resolution_template.go b/tencentcloud/services/ci/resource_tc_ci_media_super_resolution_template.go similarity index 71% rename from tencentcloud/resource_tc_ci_media_super_resolution_template.go rename to tencentcloud/services/ci/resource_tc_ci_media_super_resolution_template.go index 9d639c35d1..6b0312bc70 100644 --- a/tencentcloud/resource_tc_ci_media_super_resolution_template.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_super_resolution_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -6,13 +6,15 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" "github.com/tencentyun/cos-go-sdk-v5" ) -func resourceTencentCloudCiMediaSuperResolutionTemplate() *schema.Resource { +func ResourceTencentCloudCiMediaSuperResolutionTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiMediaSuperResolutionTemplateCreate, Read: resourceTencentCloudCiMediaSuperResolutionTemplateRead, @@ -56,11 +58,11 @@ func resourceTencentCloudCiMediaSuperResolutionTemplate() *schema.Resource { } func resourceTencentCloudCiMediaSuperResolutionTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_super_resolution_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_super_resolution_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cos.CreateMediaSuperResolutionTemplateOptions{ @@ -93,10 +95,10 @@ func resourceTencentCloudCiMediaSuperResolutionTemplateCreate(d *schema.Resource } var response *cos.CreateMediaTemplateResult - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.CreateMediaSuperResolutionTemplate(ctx, &request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.CreateMediaSuperResolutionTemplate(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "CreateMediaSnapshotTemplate", request, result) } @@ -109,21 +111,21 @@ func resourceTencentCloudCiMediaSuperResolutionTemplateCreate(d *schema.Resource } templateId = response.Template.TemplateId - d.SetId(bucket + FILED_SP + templateId) + d.SetId(bucket + tccommon.FILED_SP + templateId) return resourceTencentCloudCiMediaSuperResolutionTemplateRead(d, meta) } func resourceTencentCloudCiMediaSuperResolutionTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_super_resolution_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_super_resolution_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -165,17 +167,17 @@ func resourceTencentCloudCiMediaSuperResolutionTemplateRead(d *schema.ResourceDa } func resourceTencentCloudCiMediaSuperResolutionTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_super_resolution_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_super_resolution_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cos.CreateMediaSuperResolutionTemplateOptions{ Tag: "SuperResolution", } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -202,10 +204,10 @@ func resourceTencentCloudCiMediaSuperResolutionTemplateUpdate(d *schema.Resource } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.UpdateMediaSuperResolutionTemplate(ctx, &request, templateId) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.UpdateMediaSuperResolutionTemplate(ctx, &request, templateId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "UpdateMediaSuperResolutionTemplate", request, result) } @@ -220,14 +222,14 @@ func resourceTencentCloudCiMediaSuperResolutionTemplateUpdate(d *schema.Resource } func resourceTencentCloudCiMediaSuperResolutionTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_super_resolution_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_super_resolution_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ci_media_super_resolution_template_test.go b/tencentcloud/services/ci/resource_tc_ci_media_super_resolution_template_test.go similarity index 72% rename from tencentcloud/resource_tc_ci_media_super_resolution_template_test.go rename to tencentcloud/services/ci/resource_tc_ci_media_super_resolution_template_test.go index 2d319cd8ed..e1def611ca 100644 --- a/tencentcloud/resource_tc_ci_media_super_resolution_template_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_super_resolution_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "strings" @@ -16,13 +20,13 @@ func init() { resource.AddTestSweepers("tencentcloud_ci_media_super_resolution_template", &resource.Sweeper{ Name: "tencentcloud_ci_media_super_resolution_template", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := CiService{client: client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := localci.NewCiService(client) - response, _, err := service.client.UseCiClient(defaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ + response, _, err := client.UseCiClient(tcacctest.DefaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ Name: "super_resolution_template", }) if err != nil { @@ -30,7 +34,7 @@ func init() { } for _, v := range response.TemplateList { - err := service.DeleteCiMediaTemplateById(ctx, defaultCiBucket, v.TemplateId) + err := service.DeleteCiMediaTemplateById(ctx, tcacctest.DefaultCiBucket, v.TemplateId) if err != nil { continue } @@ -46,8 +50,8 @@ func TestAccTencentCloudCiMediaSuperResolutionTemplateResource_basic(t *testing. t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiMediaSuperResolutionTemplateDestroy, Steps: []resource.TestStep{ { @@ -55,7 +59,7 @@ func TestAccTencentCloudCiMediaSuperResolutionTemplateResource_basic(t *testing. Check: resource.ComposeTestCheckFunc( testAccCheckCiMediaSuperResolutionTemplateExists("tencentcloud_ci_media_super_resolution_template.media_super_resolution_template"), resource.TestCheckResourceAttrSet("tencentcloud_ci_media_super_resolution_template.media_super_resolution_template", "id"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_super_resolution_template.media_super_resolution_template", "bucket", defaultCiBucket), + resource.TestCheckResourceAttr("tencentcloud_ci_media_super_resolution_template.media_super_resolution_template", "bucket", tcacctest.DefaultCiBucket), resource.TestCheckResourceAttr("tencentcloud_ci_media_super_resolution_template.media_super_resolution_template", "name", "super_resolution_template"), resource.TestCheckResourceAttr("tencentcloud_ci_media_super_resolution_template.media_super_resolution_template", "resolution", "sdtohd"), resource.TestCheckResourceAttr("tencentcloud_ci_media_super_resolution_template.media_super_resolution_template", "enable_scale_up", "true"), @@ -72,15 +76,15 @@ func TestAccTencentCloudCiMediaSuperResolutionTemplateResource_basic(t *testing. } func testAccCheckCiMediaSuperResolutionTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_media_super_resolution_template" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -101,9 +105,9 @@ func testAccCheckCiMediaSuperResolutionTemplateDestroy(s *terraform.State) error func testAccCheckCiMediaSuperResolutionTemplateExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -113,7 +117,7 @@ func testAccCheckCiMediaSuperResolutionTemplateExists(re string) resource.TestCh return fmt.Errorf(" id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -135,7 +139,7 @@ func testAccCheckCiMediaSuperResolutionTemplateExists(re string) resource.TestCh const testAccCiMediaSuperResolutionTemplateVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` diff --git a/tencentcloud/resource_tc_ci_media_transcode_pro_template.go b/tencentcloud/services/ci/resource_tc_ci_media_transcode_pro_template.go similarity index 90% rename from tencentcloud/resource_tc_ci_media_transcode_pro_template.go rename to tencentcloud/services/ci/resource_tc_ci_media_transcode_pro_template.go index ccb35e7346..b626ef236d 100644 --- a/tencentcloud/resource_tc_ci_media_transcode_pro_template.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_transcode_pro_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentyun/cos-go-sdk-v5" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCiMediaTranscodeProTemplate() *schema.Resource { +func ResourceTencentCloudCiMediaTranscodeProTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiMediaTranscodeProTemplateCreate, Read: resourceTencentCloudCiMediaTranscodeProTemplateRead, @@ -219,11 +222,11 @@ func resourceTencentCloudCiMediaTranscodeProTemplate() *schema.Resource { } func resourceTencentCloudCiMediaTranscodeProTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_transcode_pro_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_transcode_pro_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cos.CreateMediaTranscodeProTemplateOptions{ @@ -342,10 +345,10 @@ func resourceTencentCloudCiMediaTranscodeProTemplateCreate(d *schema.ResourceDat } var response *cos.CreateMediaTemplateResult - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.CreateMediaTranscodeProTemplate(ctx, &request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.CreateMediaTranscodeProTemplate(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "CreateMediaTranscodeProTemplate", request, result) } @@ -358,21 +361,21 @@ func resourceTencentCloudCiMediaTranscodeProTemplateCreate(d *schema.ResourceDat } templateId = response.Template.TemplateId - d.SetId(bucket + FILED_SP + templateId) + d.SetId(bucket + tccommon.FILED_SP + templateId) return resourceTencentCloudCiMediaTranscodeProTemplateRead(d, meta) } func resourceTencentCloudCiMediaTranscodeProTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_transcode_pro_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_transcode_pro_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -527,17 +530,17 @@ func resourceTencentCloudCiMediaTranscodeProTemplateRead(d *schema.ResourceData, } func resourceTencentCloudCiMediaTranscodeProTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_transcode_pro_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_transcode_pro_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cos.CreateMediaTranscodeProTemplateOptions{ Tag: "TranscodePro", } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -654,10 +657,10 @@ func resourceTencentCloudCiMediaTranscodeProTemplateUpdate(d *schema.ResourceDat } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.UpdateMediaTranscodeProTemplate(ctx, &request, templateId) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.UpdateMediaTranscodeProTemplate(ctx, &request, templateId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "UpdateMediaTranscodeProTemplate", request, result) } @@ -672,14 +675,14 @@ func resourceTencentCloudCiMediaTranscodeProTemplateUpdate(d *schema.ResourceDat } func resourceTencentCloudCiMediaTranscodeProTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_transcode_pro_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_transcode_pro_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ci_media_transcode_pro_template_test.go b/tencentcloud/services/ci/resource_tc_ci_media_transcode_pro_template_test.go similarity index 86% rename from tencentcloud/resource_tc_ci_media_transcode_pro_template_test.go rename to tencentcloud/services/ci/resource_tc_ci_media_transcode_pro_template_test.go index f48c6f95d2..1e80cbfc1a 100644 --- a/tencentcloud/resource_tc_ci_media_transcode_pro_template_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_transcode_pro_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "strings" @@ -15,8 +19,8 @@ func TestAccTencentCloudNeedFixCiMediaTranscodeProTemplateResource_basic(t *test t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiMediaTranscodeProTemplateDestroy, Steps: []resource.TestStep{ { @@ -24,7 +28,7 @@ func TestAccTencentCloudNeedFixCiMediaTranscodeProTemplateResource_basic(t *test Check: resource.ComposeTestCheckFunc( testAccCheckCiMediaTranscodeProTemplateExists("tencentcloud_ci_media_transcode_pro_template.media_transcode_pro_template"), resource.TestCheckResourceAttrSet("tencentcloud_ci_media_transcode_pro_template.media_transcode_pro_template", "id"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_pro_template.media_transcode_pro_template", "bucket", defaultCiBucket), + resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_pro_template.media_transcode_pro_template", "bucket", tcacctest.DefaultCiBucket), resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_pro_template.media_transcode_pro_template", "name", "transcode_pro_template"), resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_pro_template.media_transcode_pro_template", "container.#", "1"), resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_pro_template.media_transcode_pro_template", "container.0.format", "mxf"), @@ -61,15 +65,15 @@ func TestAccTencentCloudNeedFixCiMediaTranscodeProTemplateResource_basic(t *test } func testAccCheckCiMediaTranscodeProTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_media_transcode_pro_template" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -90,9 +94,9 @@ func testAccCheckCiMediaTranscodeProTemplateDestroy(s *terraform.State) error { func testAccCheckCiMediaTranscodeProTemplateExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -102,7 +106,7 @@ func testAccCheckCiMediaTranscodeProTemplateExists(re string) resource.TestCheck return fmt.Errorf(" id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -124,7 +128,7 @@ func testAccCheckCiMediaTranscodeProTemplateExists(re string) resource.TestCheck const testAccCiMediaTranscodeProTemplateVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` diff --git a/tencentcloud/resource_tc_ci_media_transcode_template.go b/tencentcloud/services/ci/resource_tc_ci_media_transcode_template.go similarity index 94% rename from tencentcloud/resource_tc_ci_media_transcode_template.go rename to tencentcloud/services/ci/resource_tc_ci_media_transcode_template.go index c44489fa1c..8fe3f7c6fc 100644 --- a/tencentcloud/resource_tc_ci_media_transcode_template.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_transcode_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentyun/cos-go-sdk-v5" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCiMediaTranscodeTemplate() *schema.Resource { +func ResourceTencentCloudCiMediaTranscodeTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiMediaTranscodeTemplateCreate, Read: resourceTencentCloudCiMediaTranscodeTemplateRead, @@ -372,11 +375,11 @@ func resourceTencentCloudCiMediaTranscodeTemplate() *schema.Resource { } func resourceTencentCloudCiMediaTranscodeTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_transcode_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_transcode_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cos.CreateMediaTranscodeTemplateOptions{ @@ -586,10 +589,10 @@ func resourceTencentCloudCiMediaTranscodeTemplateCreate(d *schema.ResourceData, } var response *cos.CreateMediaTemplateResult - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.CreateMediaTranscodeTemplate(ctx, &request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.CreateMediaTranscodeTemplate(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "CreateMediaTranscodeTemplate", request, result) } @@ -602,22 +605,22 @@ func resourceTencentCloudCiMediaTranscodeTemplateCreate(d *schema.ResourceData, } templateId = response.Template.TemplateId - d.SetId(bucket + FILED_SP + templateId) + d.SetId(bucket + tccommon.FILED_SP + templateId) return resourceTencentCloudCiMediaTranscodeTemplateRead(d, meta) } func resourceTencentCloudCiMediaTranscodeTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_transcode_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_transcode_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -888,11 +891,11 @@ func resourceTencentCloudCiMediaTranscodeTemplateRead(d *schema.ResourceData, me } func resourceTencentCloudCiMediaTranscodeTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_transcode_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_transcode_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cos.CreateMediaTranscodeTemplateOptions{ Tag: "Transcode", @@ -1101,17 +1104,17 @@ func resourceTencentCloudCiMediaTranscodeTemplateUpdate(d *schema.ResourceData, } } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } bucket := idSplit[0] templateId := idSplit[1] - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.UpdateMediaTranscodeTemplate(ctx, &request, templateId) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.UpdateMediaTranscodeTemplate(ctx, &request, templateId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "UpdateMediaTranscodeTemplate", request, result) } @@ -1126,14 +1129,14 @@ func resourceTencentCloudCiMediaTranscodeTemplateUpdate(d *schema.ResourceData, } func resourceTencentCloudCiMediaTranscodeTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_transcode_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_transcode_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ci_media_transcode_template_test.go b/tencentcloud/services/ci/resource_tc_ci_media_transcode_template_test.go similarity index 88% rename from tencentcloud/resource_tc_ci_media_transcode_template_test.go rename to tencentcloud/services/ci/resource_tc_ci_media_transcode_template_test.go index 2d86a66be9..002012d30c 100644 --- a/tencentcloud/resource_tc_ci_media_transcode_template_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_transcode_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "strings" @@ -15,8 +19,8 @@ func TestAccTencentCloudNeedFixCiMediaTranscodeTemplateResource_basic(t *testing t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiMediaTranscodeTemplateDestroy, Steps: []resource.TestStep{ { @@ -24,7 +28,7 @@ func TestAccTencentCloudNeedFixCiMediaTranscodeTemplateResource_basic(t *testing Check: resource.ComposeTestCheckFunc( testAccCheckCiMediaTranscodeTemplateExists("tencentcloud_ci_media_transcode_template.media_transcode_template"), resource.TestCheckResourceAttrSet("tencentcloud_ci_media_transcode_template.media_transcode_template", "id"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_template.media_transcode_template", "bucket", defaultCiBucket), + resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_template.media_transcode_template", "bucket", tcacctest.DefaultCiBucket), resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_template.media_transcode_template", "name", "transcode_template"), resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_template.media_transcode_template", "container.#", "1"), resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_template.media_transcode_template", "container.0.format", "mp4"), @@ -61,7 +65,7 @@ func TestAccTencentCloudNeedFixCiMediaTranscodeTemplateResource_basic(t *testing resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_template.media_transcode_template", "trans_config.0.hls_encrypt.#", "1"), resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_template.media_transcode_template", "trans_config.0.hls_encrypt.0.is_hls_encrypt", "false"), resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_template.media_transcode_template", "audio_mix.#", "1"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_template.media_transcode_template", "audio_mix.0.audio_source", "https://"+defaultCiBucket+".cos.ap-guangzhou.myqcloud.com/mp3%2Fnizhan-test.mp3"), + resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_template.media_transcode_template", "audio_mix.0.audio_source", "https://"+tcacctest.DefaultCiBucket+".cos.ap-guangzhou.myqcloud.com/mp3%2Fnizhan-test.mp3"), resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_template.media_transcode_template", "audio_mix.0.mix_mode", "Once"), resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_template.media_transcode_template", "audio_mix.0.replace", "true"), resource.TestCheckResourceAttr("tencentcloud_ci_media_transcode_template.media_transcode_template", "audio_mix.0.effect_config.#", "1"), @@ -83,15 +87,15 @@ func TestAccTencentCloudNeedFixCiMediaTranscodeTemplateResource_basic(t *testing } func testAccCheckCiMediaTranscodeTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_media_transcode_template" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -112,9 +116,9 @@ func testAccCheckCiMediaTranscodeTemplateDestroy(s *terraform.State) error { func testAccCheckCiMediaTranscodeTemplateExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -124,7 +128,7 @@ func testAccCheckCiMediaTranscodeTemplateExists(re string) resource.TestCheckFun return fmt.Errorf(" id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -146,7 +150,7 @@ func testAccCheckCiMediaTranscodeTemplateExists(re string) resource.TestCheckFun const testAccCiMediaTranscodeTemplateVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` @@ -194,7 +198,7 @@ resource "tencentcloud_ci_media_transcode_template" "media_transcode_template" { is_hdr2_sdr = "false" } audio_mix { - audio_source = "https://` + defaultCiBucket + `.cos.ap-guangzhou.myqcloud.com/mp3%2Fnizhan-test.mp3" + audio_source = "https://` + tcacctest.DefaultCiBucket + `.cos.ap-guangzhou.myqcloud.com/mp3%2Fnizhan-test.mp3" mix_mode = "Once" replace = "true" effect_config { diff --git a/tencentcloud/resource_tc_ci_media_tts_template.go b/tencentcloud/services/ci/resource_tc_ci_media_tts_template.go similarity index 73% rename from tencentcloud/resource_tc_ci_media_tts_template.go rename to tencentcloud/services/ci/resource_tc_ci_media_tts_template.go index 2993da6e02..6ff156597c 100644 --- a/tencentcloud/resource_tc_ci_media_tts_template.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_tts_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -6,13 +6,15 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" "github.com/tencentyun/cos-go-sdk-v5" ) -func resourceTencentCloudCiMediaTtsTemplate() *schema.Resource { +func ResourceTencentCloudCiMediaTtsTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiMediaTtsTemplateCreate, Read: resourceTencentCloudCiMediaTtsTemplateRead, @@ -68,11 +70,11 @@ func resourceTencentCloudCiMediaTtsTemplate() *schema.Resource { } func resourceTencentCloudCiMediaTtsTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_tts_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_tts_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cos.CreateMediaTtsTemplateOptions{ @@ -113,10 +115,10 @@ func resourceTencentCloudCiMediaTtsTemplateCreate(d *schema.ResourceData, meta i } var response *cos.CreateMediaTemplateResult - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.CreateMediaTtsTemplate(ctx, &request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.CreateMediaTtsTemplate(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "CreateMediaTtsTemplate", request, result) } @@ -129,21 +131,21 @@ func resourceTencentCloudCiMediaTtsTemplateCreate(d *schema.ResourceData, meta i } templateId = response.Template.TemplateId - d.SetId(bucket + FILED_SP + templateId) + d.SetId(bucket + tccommon.FILED_SP + templateId) return resourceTencentCloudCiMediaTtsTemplateRead(d, meta) } func resourceTencentCloudCiMediaTtsTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_tts_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_tts_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -192,17 +194,17 @@ func resourceTencentCloudCiMediaTtsTemplateRead(d *schema.ResourceData, meta int } func resourceTencentCloudCiMediaTtsTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_tts_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_tts_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cos.CreateMediaTtsTemplateOptions{ Tag: "Tts", } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -243,10 +245,10 @@ func resourceTencentCloudCiMediaTtsTemplateUpdate(d *schema.ResourceData, meta i } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.UpdateMediaTtsTemplate(ctx, &request, templateId) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.UpdateMediaTtsTemplate(ctx, &request, templateId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "UpdateMediaTtsTemplate", request, result) } @@ -261,14 +263,14 @@ func resourceTencentCloudCiMediaTtsTemplateUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudCiMediaTtsTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_tts_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_tts_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ci_media_tts_template_test.go b/tencentcloud/services/ci/resource_tc_ci_media_tts_template_test.go similarity index 75% rename from tencentcloud/resource_tc_ci_media_tts_template_test.go rename to tencentcloud/services/ci/resource_tc_ci_media_tts_template_test.go index ce17eb2e6e..84c24720a9 100644 --- a/tencentcloud/resource_tc_ci_media_tts_template_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_tts_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "strings" @@ -15,8 +19,8 @@ func TestAccTencentCloudCiMediaTtsTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiMediaTtsTemplateDestroy, Steps: []resource.TestStep{ { @@ -24,7 +28,7 @@ func TestAccTencentCloudCiMediaTtsTemplateResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckCiMediaTtsTemplateExists("tencentcloud_ci_media_tts_template.media_tts_template"), resource.TestCheckResourceAttrSet("tencentcloud_ci_media_tts_template.media_tts_template", "id"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_tts_template.media_tts_template", "bucket", defaultCiBucket), + resource.TestCheckResourceAttr("tencentcloud_ci_media_tts_template.media_tts_template", "bucket", tcacctest.DefaultCiBucket), resource.TestCheckResourceAttr("tencentcloud_ci_media_tts_template.media_tts_template", "name", "tts_template"), resource.TestCheckResourceAttr("tencentcloud_ci_media_tts_template.media_tts_template", "mode", "Asyc"), resource.TestCheckResourceAttr("tencentcloud_ci_media_tts_template.media_tts_template", "codec", "pcm"), @@ -43,15 +47,15 @@ func TestAccTencentCloudCiMediaTtsTemplateResource_basic(t *testing.T) { } func testAccCheckCiMediaTtsTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_media_tts_template" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -72,9 +76,9 @@ func testAccCheckCiMediaTtsTemplateDestroy(s *terraform.State) error { func testAccCheckCiMediaTtsTemplateExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -84,7 +88,7 @@ func testAccCheckCiMediaTtsTemplateExists(re string) resource.TestCheckFunc { return fmt.Errorf(" id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -106,7 +110,7 @@ func testAccCheckCiMediaTtsTemplateExists(re string) resource.TestCheckFunc { const testAccCiMediaTtsTemplateVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` diff --git a/tencentcloud/resource_tc_ci_media_video_montage_template.go b/tencentcloud/services/ci/resource_tc_ci_media_video_montage_template.go similarity index 90% rename from tencentcloud/resource_tc_ci_media_video_montage_template.go rename to tencentcloud/services/ci/resource_tc_ci_media_video_montage_template.go index 861b3154d8..3bd77a6271 100644 --- a/tencentcloud/resource_tc_ci_media_video_montage_template.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_video_montage_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentyun/cos-go-sdk-v5" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCiMediaVideoMontageTemplate() *schema.Resource { +func ResourceTencentCloudCiMediaVideoMontageTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiMediaVideoMontageTemplateCreate, Read: resourceTencentCloudCiMediaVideoMontageTemplateRead, @@ -208,11 +211,11 @@ func resourceTencentCloudCiMediaVideoMontageTemplate() *schema.Resource { } func resourceTencentCloudCiMediaVideoMontageTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_video_montage_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_video_montage_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cos.CreateMediaVideoMontageTemplateOptions{ @@ -331,10 +334,10 @@ func resourceTencentCloudCiMediaVideoMontageTemplateCreate(d *schema.ResourceDat } var response *cos.CreateMediaTemplateResult - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.CreateMediaVideoMontageTemplate(ctx, &request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.CreateMediaVideoMontageTemplate(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "CreateMediaVideoMontageTemplate", request, result) } @@ -347,21 +350,21 @@ func resourceTencentCloudCiMediaVideoMontageTemplateCreate(d *schema.ResourceDat } templateId = response.Template.TemplateId - d.SetId(bucket + FILED_SP + templateId) + d.SetId(bucket + tccommon.FILED_SP + templateId) return resourceTencentCloudCiMediaVideoMontageTemplateRead(d, meta) } func resourceTencentCloudCiMediaVideoMontageTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_video_montage_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_video_montage_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -518,17 +521,17 @@ func resourceTencentCloudCiMediaVideoMontageTemplateRead(d *schema.ResourceData, } func resourceTencentCloudCiMediaVideoMontageTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_video_montage_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_video_montage_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cos.CreateMediaVideoMontageTemplateOptions{ Tag: "VideoMontage", } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -643,10 +646,10 @@ func resourceTencentCloudCiMediaVideoMontageTemplateUpdate(d *schema.ResourceDat } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.UpdateMediaVideoMontageTemplate(ctx, &request, templateId) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.UpdateMediaVideoMontageTemplate(ctx, &request, templateId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "UpdateMediaVideoMontageTemplate", request, result) } @@ -661,14 +664,14 @@ func resourceTencentCloudCiMediaVideoMontageTemplateUpdate(d *schema.ResourceDat } func resourceTencentCloudCiMediaVideoMontageTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_video_montage_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_video_montage_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ci_media_video_montage_template_test.go b/tencentcloud/services/ci/resource_tc_ci_media_video_montage_template_test.go similarity index 77% rename from tencentcloud/resource_tc_ci_media_video_montage_template_test.go rename to tencentcloud/services/ci/resource_tc_ci_media_video_montage_template_test.go index 960f033148..f1c1761053 100644 --- a/tencentcloud/resource_tc_ci_media_video_montage_template_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_video_montage_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "strings" @@ -16,13 +20,13 @@ func init() { resource.AddTestSweepers("tencentcloud_ci_media_video_montage_template", &resource.Sweeper{ Name: "tencentcloud_ci_media_video_montage_template", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := CiService{client: client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := localci.NewCiService(client) - response, _, err := service.client.UseCiClient(defaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ + response, _, err := client.UseCiClient(tcacctest.DefaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ Name: "video_montage_template", }) if err != nil { @@ -30,7 +34,7 @@ func init() { } for _, v := range response.TemplateList { - err := service.DeleteCiMediaTemplateById(ctx, defaultCiBucket, v.TemplateId) + err := service.DeleteCiMediaTemplateById(ctx, tcacctest.DefaultCiBucket, v.TemplateId) if err != nil { continue } @@ -46,8 +50,8 @@ func TestAccTencentCloudCiMediaVideoMontageTemplateResource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiMediaVideoMontageTemplateDestroy, Steps: []resource.TestStep{ { @@ -55,7 +59,7 @@ func TestAccTencentCloudCiMediaVideoMontageTemplateResource_basic(t *testing.T) Check: resource.ComposeTestCheckFunc( testAccCheckCiMediaVideoMontageTemplateExists("tencentcloud_ci_media_video_montage_template.media_video_montage_template"), resource.TestCheckResourceAttrSet("tencentcloud_ci_media_video_montage_template.media_video_montage_template", "id"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_video_montage_template.media_video_montage_template", "bucket", defaultCiBucket), + resource.TestCheckResourceAttr("tencentcloud_ci_media_video_montage_template.media_video_montage_template", "bucket", tcacctest.DefaultCiBucket), resource.TestCheckResourceAttr("tencentcloud_ci_media_video_montage_template.media_video_montage_template", "name", "video_montage_template"), resource.TestCheckResourceAttr("tencentcloud_ci_media_video_montage_template.media_video_montage_template", "duration", "10.5"), resource.TestCheckResourceAttr("tencentcloud_ci_media_video_montage_template.media_video_montage_template", "audio.#", "1"), @@ -72,7 +76,7 @@ func TestAccTencentCloudCiMediaVideoMontageTemplateResource_basic(t *testing.T) resource.TestCheckResourceAttr("tencentcloud_ci_media_video_montage_template.media_video_montage_template", "container.#", "1"), resource.TestCheckResourceAttr("tencentcloud_ci_media_video_montage_template.media_video_montage_template", "container.0.format", "mp4"), resource.TestCheckResourceAttr("tencentcloud_ci_media_video_montage_template.media_video_montage_template", "audio_mix.#", "1"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_video_montage_template.media_video_montage_template", "audio_mix.0.audio_source", "https://"+defaultCiBucket+".cos.ap-guangzhou.myqcloud.com/mp3%2Fnizhan-test.mp3"), + resource.TestCheckResourceAttr("tencentcloud_ci_media_video_montage_template.media_video_montage_template", "audio_mix.0.audio_source", "https://"+tcacctest.DefaultCiBucket+".cos.ap-guangzhou.myqcloud.com/mp3%2Fnizhan-test.mp3"), resource.TestCheckResourceAttr("tencentcloud_ci_media_video_montage_template.media_video_montage_template", "audio_mix.0.mix_mode", "Once"), resource.TestCheckResourceAttr("tencentcloud_ci_media_video_montage_template.media_video_montage_template", "audio_mix.0.replace", "true"), ), @@ -87,15 +91,15 @@ func TestAccTencentCloudCiMediaVideoMontageTemplateResource_basic(t *testing.T) } func testAccCheckCiMediaVideoMontageTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_media_video_montage_template" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -116,9 +120,9 @@ func testAccCheckCiMediaVideoMontageTemplateDestroy(s *terraform.State) error { func testAccCheckCiMediaVideoMontageTemplateExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -128,7 +132,7 @@ func testAccCheckCiMediaVideoMontageTemplateExists(re string) resource.TestCheck return fmt.Errorf(" id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -150,7 +154,7 @@ func testAccCheckCiMediaVideoMontageTemplateExists(re string) resource.TestCheck const testAccCiMediaVideoMontageTemplateVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` @@ -180,7 +184,7 @@ resource "tencentcloud_ci_media_video_montage_template" "media_video_montage_tem format = "mp4" } audio_mix { - audio_source = "https://` + defaultCiBucket + `.cos.ap-guangzhou.myqcloud.com/mp3%2Fnizhan-test.mp3" + audio_source = "https://` + tcacctest.DefaultCiBucket + `.cos.ap-guangzhou.myqcloud.com/mp3%2Fnizhan-test.mp3" mix_mode = "Once" replace = "true" } diff --git a/tencentcloud/resource_tc_ci_media_video_process_template.go b/tencentcloud/services/ci/resource_tc_ci_media_video_process_template.go similarity index 79% rename from tencentcloud/resource_tc_ci_media_video_process_template.go rename to tencentcloud/services/ci/resource_tc_ci_media_video_process_template.go index 8851040582..5dcf80890f 100644 --- a/tencentcloud/resource_tc_ci_media_video_process_template.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_video_process_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentyun/cos-go-sdk-v5" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCiMediaVideoProcessTemplate() *schema.Resource { +func ResourceTencentCloudCiMediaVideoProcessTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiMediaVideoProcessTemplateCreate, Read: resourceTencentCloudCiMediaVideoProcessTemplateRead, @@ -91,11 +94,11 @@ func resourceTencentCloudCiMediaVideoProcessTemplate() *schema.Resource { } func resourceTencentCloudCiMediaVideoProcessTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_video_process_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_video_process_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cos.CreateMediaVideoProcessTemplateOptions{ @@ -144,10 +147,10 @@ func resourceTencentCloudCiMediaVideoProcessTemplateCreate(d *schema.ResourceDat } var response *cos.CreateMediaTemplateResult - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.CreateMediaVideoProcessTemplate(ctx, &request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.CreateMediaVideoProcessTemplate(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "CreateMediaVideoProcessTemplate", request, result) } @@ -160,21 +163,21 @@ func resourceTencentCloudCiMediaVideoProcessTemplateCreate(d *schema.ResourceDat } templateId = response.Template.TemplateId - d.SetId(bucket + FILED_SP + templateId) + d.SetId(bucket + tccommon.FILED_SP + templateId) return resourceTencentCloudCiMediaVideoProcessTemplateRead(d, meta) } func resourceTencentCloudCiMediaVideoProcessTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_video_process_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_video_process_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -240,17 +243,17 @@ func resourceTencentCloudCiMediaVideoProcessTemplateRead(d *schema.ResourceData, } func resourceTencentCloudCiMediaVideoProcessTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_video_process_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_video_process_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cos.CreateMediaVideoProcessTemplateOptions{ Tag: "VideoProcess", } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -288,10 +291,10 @@ func resourceTencentCloudCiMediaVideoProcessTemplateUpdate(d *schema.ResourceDat request.MsSharpen = &msSharpen } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.UpdateMediaVideoProcessTemplate(ctx, &request, templateId) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.UpdateMediaVideoProcessTemplate(ctx, &request, templateId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "UpdateMediaVideoProcessTemplate", request, result) } @@ -306,14 +309,14 @@ func resourceTencentCloudCiMediaVideoProcessTemplateUpdate(d *schema.ResourceDat } func resourceTencentCloudCiMediaVideoProcessTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_video_process_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_video_process_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ci_media_video_process_template_test.go b/tencentcloud/services/ci/resource_tc_ci_media_video_process_template_test.go similarity index 71% rename from tencentcloud/resource_tc_ci_media_video_process_template_test.go rename to tencentcloud/services/ci/resource_tc_ci_media_video_process_template_test.go index 5c9794afa2..4974cda50b 100644 --- a/tencentcloud/resource_tc_ci_media_video_process_template_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_video_process_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "strings" @@ -16,13 +20,13 @@ func init() { resource.AddTestSweepers("tencentcloud_ci_media_video_process_template", &resource.Sweeper{ Name: "tencentcloud_ci_media_video_process_template", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := CiService{client: client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := localci.NewCiService(client) - response, _, err := service.client.UseCiClient(defaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ + response, _, err := client.UseCiClient(tcacctest.DefaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ Name: "video_process_template", }) if err != nil { @@ -30,7 +34,7 @@ func init() { } for _, v := range response.TemplateList { - err := service.DeleteCiMediaTemplateById(ctx, defaultCiBucket, v.TemplateId) + err := service.DeleteCiMediaTemplateById(ctx, tcacctest.DefaultCiBucket, v.TemplateId) if err != nil { continue } @@ -46,8 +50,8 @@ func TestAccTencentCloudCiMediaVideoProcessTemplateResource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiMediaVideoProcessTemplateDestroy, Steps: []resource.TestStep{ { @@ -55,7 +59,7 @@ func TestAccTencentCloudCiMediaVideoProcessTemplateResource_basic(t *testing.T) Check: resource.ComposeTestCheckFunc( testAccCheckCiMediaVideoProcessTemplateExists("tencentcloud_ci_media_video_process_template.media_video_process_template"), resource.TestCheckResourceAttrSet("tencentcloud_ci_media_video_process_template.media_video_process_template", "id"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_video_process_template.media_video_process_template", "bucket", defaultCiBucket), + resource.TestCheckResourceAttr("tencentcloud_ci_media_video_process_template.media_video_process_template", "bucket", tcacctest.DefaultCiBucket), resource.TestCheckResourceAttr("tencentcloud_ci_media_video_process_template.media_video_process_template", "name", "video_process_template"), resource.TestCheckResourceAttr("tencentcloud_ci_media_video_process_template.media_video_process_template", "color_enhance.#", "1"), resource.TestCheckResourceAttr("tencentcloud_ci_media_video_process_template.media_video_process_template", "color_enhance.0.enable", "true"), @@ -73,15 +77,15 @@ func TestAccTencentCloudCiMediaVideoProcessTemplateResource_basic(t *testing.T) } func testAccCheckCiMediaVideoProcessTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_media_video_process_template" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -102,9 +106,9 @@ func testAccCheckCiMediaVideoProcessTemplateDestroy(s *terraform.State) error { func testAccCheckCiMediaVideoProcessTemplateExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -114,7 +118,7 @@ func testAccCheckCiMediaVideoProcessTemplateExists(re string) resource.TestCheck return fmt.Errorf(" id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -136,7 +140,7 @@ func testAccCheckCiMediaVideoProcessTemplateExists(re string) resource.TestCheck const testAccCiMediaVideoProcessTemplateVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` diff --git a/tencentcloud/resource_tc_ci_media_voice_separate_template.go b/tencentcloud/services/ci/resource_tc_ci_media_voice_separate_template.go similarity index 77% rename from tencentcloud/resource_tc_ci_media_voice_separate_template.go rename to tencentcloud/services/ci/resource_tc_ci_media_voice_separate_template.go index 5bb9ba44dc..af5920b02f 100644 --- a/tencentcloud/resource_tc_ci_media_voice_separate_template.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_voice_separate_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentyun/cos-go-sdk-v5" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCiMediaVoiceSeparateTemplate() *schema.Resource { +func ResourceTencentCloudCiMediaVoiceSeparateTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiMediaVoiceSeparateTemplateCreate, Read: resourceTencentCloudCiMediaVoiceSeparateTemplateRead, @@ -76,11 +79,11 @@ func resourceTencentCloudCiMediaVoiceSeparateTemplate() *schema.Resource { } func resourceTencentCloudCiMediaVoiceSeparateTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_voice_separate_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_voice_separate_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cos.CreateMediaVoiceSeparateTemplateOptions{ @@ -122,10 +125,10 @@ func resourceTencentCloudCiMediaVoiceSeparateTemplateCreate(d *schema.ResourceDa } var response *cos.CreateMediaTemplateResult - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.CreateMediaVoiceSeparateTemplate(ctx, &request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.CreateMediaVoiceSeparateTemplate(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "CreateMediaVoiceSeparateTemplate", request, result) } @@ -138,21 +141,21 @@ func resourceTencentCloudCiMediaVoiceSeparateTemplateCreate(d *schema.ResourceDa } templateId = response.Template.TemplateId - d.SetId(bucket + FILED_SP + templateId) + d.SetId(bucket + tccommon.FILED_SP + templateId) return resourceTencentCloudCiMediaVoiceSeparateTemplateRead(d, meta) } func resourceTencentCloudCiMediaVoiceSeparateTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_voice_separate_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_voice_separate_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -208,11 +211,11 @@ func resourceTencentCloudCiMediaVoiceSeparateTemplateRead(d *schema.ResourceData } func resourceTencentCloudCiMediaVoiceSeparateTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_voice_separate_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_voice_separate_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cos.CreateMediaVoiceSeparateTemplateOptions{ Tag: "VoiceSeparate", @@ -245,17 +248,17 @@ func resourceTencentCloudCiMediaVoiceSeparateTemplateUpdate(d *schema.ResourceDa } } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } bucket := idSplit[0] templateId := idSplit[1] - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.UpdateMediaVoiceSeparateTemplate(ctx, &request, templateId) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.UpdateMediaVoiceSeparateTemplate(ctx, &request, templateId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "UpdateMediaVoiceSeparateTemplate", request, result) } @@ -270,14 +273,14 @@ func resourceTencentCloudCiMediaVoiceSeparateTemplateUpdate(d *schema.ResourceDa } func resourceTencentCloudCiMediaVoiceSeparateTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_voice_separate_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_voice_separate_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ci_media_voice_separate_template_test.go b/tencentcloud/services/ci/resource_tc_ci_media_voice_separate_template_test.go similarity index 73% rename from tencentcloud/resource_tc_ci_media_voice_separate_template_test.go rename to tencentcloud/services/ci/resource_tc_ci_media_voice_separate_template_test.go index 9cb615e21d..60b39510cf 100644 --- a/tencentcloud/resource_tc_ci_media_voice_separate_template_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_voice_separate_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "strings" @@ -16,13 +20,13 @@ func init() { resource.AddTestSweepers("tencentcloud_ci_media_voice_separate_template", &resource.Sweeper{ Name: "tencentcloud_ci_media_voice_separate_template", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := CiService{client: client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := localci.NewCiService(client) - response, _, err := service.client.UseCiClient(defaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ + response, _, err := client.UseCiClient(tcacctest.DefaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ Name: "voice_separate_template", }) if err != nil { @@ -30,7 +34,7 @@ func init() { } for _, v := range response.TemplateList { - err := service.DeleteCiMediaTemplateById(ctx, defaultCiBucket, v.TemplateId) + err := service.DeleteCiMediaTemplateById(ctx, tcacctest.DefaultCiBucket, v.TemplateId) if err != nil { continue } @@ -46,8 +50,8 @@ func TestAccTencentCloudCiMediaVoiceSeparateTemplateResource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiMediaVoiceSeparateTemplateDestroy, Steps: []resource.TestStep{ { @@ -55,7 +59,7 @@ func TestAccTencentCloudCiMediaVoiceSeparateTemplateResource_basic(t *testing.T) Check: resource.ComposeTestCheckFunc( testAccCheckCiMediaVoiceSeparateTemplateExists("tencentcloud_ci_media_voice_separate_template.media_voice_separate_template"), resource.TestCheckResourceAttrSet("tencentcloud_ci_media_voice_separate_template.media_voice_separate_template", "id"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_voice_separate_template.media_voice_separate_template", "bucket", defaultCiBucket), + resource.TestCheckResourceAttr("tencentcloud_ci_media_voice_separate_template.media_voice_separate_template", "bucket", tcacctest.DefaultCiBucket), resource.TestCheckResourceAttr("tencentcloud_ci_media_voice_separate_template.media_voice_separate_template", "name", "voice_separate_template"), resource.TestCheckResourceAttr("tencentcloud_ci_media_voice_separate_template.media_voice_separate_template", "audio_mode", "IsAudio"), resource.TestCheckResourceAttr("tencentcloud_ci_media_voice_separate_template.media_voice_separate_template", "audio_config.#", "1"), @@ -75,15 +79,15 @@ func TestAccTencentCloudCiMediaVoiceSeparateTemplateResource_basic(t *testing.T) } func testAccCheckCiMediaVoiceSeparateTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_media_voice_separate_template" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -104,9 +108,9 @@ func testAccCheckCiMediaVoiceSeparateTemplateDestroy(s *terraform.State) error { func testAccCheckCiMediaVoiceSeparateTemplateExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -116,7 +120,7 @@ func testAccCheckCiMediaVoiceSeparateTemplateExists(re string) resource.TestChec return fmt.Errorf(" id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -138,7 +142,7 @@ func testAccCheckCiMediaVoiceSeparateTemplateExists(re string) resource.TestChec const testAccCiMediaVoiceSeparateTemplateVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` diff --git a/tencentcloud/resource_tc_ci_media_watermark_template.go b/tencentcloud/services/ci/resource_tc_ci_media_watermark_template.go similarity index 88% rename from tencentcloud/resource_tc_ci_media_watermark_template.go rename to tencentcloud/services/ci/resource_tc_ci_media_watermark_template.go index cb9fed7010..a1bcff7320 100644 --- a/tencentcloud/resource_tc_ci_media_watermark_template.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_watermark_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package ci import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentyun/cos-go-sdk-v5" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCiMediaWatermarkTemplate() *schema.Resource { +func ResourceTencentCloudCiMediaWatermarkTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiMediaWatermarkTemplateCreate, Read: resourceTencentCloudCiMediaWatermarkTemplateRead, @@ -161,11 +164,11 @@ func resourceTencentCloudCiMediaWatermarkTemplate() *schema.Resource { } func resourceTencentCloudCiMediaWatermarkTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_watermark_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_watermark_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cos.CreateMediaWatermarkTemplateOptions{ @@ -253,10 +256,10 @@ func resourceTencentCloudCiMediaWatermarkTemplateCreate(d *schema.ResourceData, } var response *cos.CreateMediaTemplateResult - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.CreateMediaWatermarkTemplate(ctx, &request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.CreateMediaWatermarkTemplate(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "CreateMediaWatermarkTemplate", request, result) } @@ -269,21 +272,21 @@ func resourceTencentCloudCiMediaWatermarkTemplateCreate(d *schema.ResourceData, } templateId = response.Template.TemplateId - d.SetId(bucket + FILED_SP + templateId) + d.SetId(bucket + tccommon.FILED_SP + templateId) return resourceTencentCloudCiMediaWatermarkTemplateRead(d, meta) } func resourceTencentCloudCiMediaWatermarkTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_watermark_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_watermark_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -400,17 +403,17 @@ func resourceTencentCloudCiMediaWatermarkTemplateRead(d *schema.ResourceData, me } func resourceTencentCloudCiMediaWatermarkTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_watermark_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_watermark_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cos.CreateMediaWatermarkTemplateOptions{ Tag: "Watermark", } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -491,10 +494,10 @@ func resourceTencentCloudCiMediaWatermarkTemplateUpdate(d *schema.ResourceData, } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, _, e := meta.(*TencentCloudClient).apiV3Conn.UseCiClient(bucket).CI.UpdateMediaWatermarkTemplate(ctx, &request, templateId) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiClient(bucket).CI.UpdateMediaWatermarkTemplate(ctx, &request, templateId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%v], response body [%v]\n", logId, "UpdateMediaWatermarkTemplate", request, result) } @@ -509,14 +512,14 @@ func resourceTencentCloudCiMediaWatermarkTemplateUpdate(d *schema.ResourceData, } func resourceTencentCloudCiMediaWatermarkTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_media_watermark_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_media_watermark_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ci_media_watermark_template_test.go b/tencentcloud/services/ci/resource_tc_ci_media_watermark_template_test.go similarity index 77% rename from tencentcloud/resource_tc_ci_media_watermark_template_test.go rename to tencentcloud/services/ci/resource_tc_ci_media_watermark_template_test.go index 0bfbb07999..7bc1b5fd70 100644 --- a/tencentcloud/resource_tc_ci_media_watermark_template_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_media_watermark_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "strings" @@ -16,13 +20,13 @@ func init() { resource.AddTestSweepers("tencentcloud_ci_media_watermark_template", &resource.Sweeper{ Name: "tencentcloud_ci_media_watermark_template", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := CiService{client: client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := localci.NewCiService(client) - response, _, err := service.client.UseCiClient(defaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ + response, _, err := client.UseCiClient(tcacctest.DefaultCiBucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ Name: "watermark_template", }) if err != nil { @@ -30,7 +34,7 @@ func init() { } for _, v := range response.TemplateList { - err := service.DeleteCiMediaTemplateById(ctx, defaultCiBucket, v.TemplateId) + err := service.DeleteCiMediaTemplateById(ctx, tcacctest.DefaultCiBucket, v.TemplateId) if err != nil { continue } @@ -46,8 +50,8 @@ func TestAccTencentCloudCiMediaWatermarkTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCiMediaWatermarkTemplateDestroy, Steps: []resource.TestStep{ { @@ -55,7 +59,7 @@ func TestAccTencentCloudCiMediaWatermarkTemplateResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckCiMediaWatermarkTemplateExists("tencentcloud_ci_media_watermark_template.media_watermark_template"), resource.TestCheckResourceAttrSet("tencentcloud_ci_media_watermark_template.media_watermark_template", "id"), - resource.TestCheckResourceAttr("tencentcloud_ci_media_watermark_template.media_watermark_template", "bucket", defaultCiBucket), + resource.TestCheckResourceAttr("tencentcloud_ci_media_watermark_template.media_watermark_template", "bucket", tcacctest.DefaultCiBucket), resource.TestCheckResourceAttr("tencentcloud_ci_media_watermark_template.media_watermark_template", "name", "watermark_template"), resource.TestCheckResourceAttr("tencentcloud_ci_media_watermark_template.media_watermark_template", "watermark.#", "1"), resource.TestCheckResourceAttr("tencentcloud_ci_media_watermark_template.media_watermark_template", "watermark.0.type", "Text"), @@ -83,15 +87,15 @@ func TestAccTencentCloudCiMediaWatermarkTemplateResource_basic(t *testing.T) { } func testAccCheckCiMediaWatermarkTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ci_media_voice_separate_template" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -112,9 +116,9 @@ func testAccCheckCiMediaWatermarkTemplateDestroy(s *terraform.State) error { func testAccCheckCiMediaWatermarkTemplateExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -124,7 +128,7 @@ func testAccCheckCiMediaWatermarkTemplateExists(re string) resource.TestCheckFun return fmt.Errorf(" id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -146,7 +150,7 @@ func testAccCheckCiMediaWatermarkTemplateExists(re string) resource.TestCheckFun const testAccCiMediaWatermarkTemplateVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` diff --git a/tencentcloud/resource_tc_ci_original_image_protection.go b/tencentcloud/services/ci/resource_tc_ci_original_image_protection.go similarity index 66% rename from tencentcloud/resource_tc_ci_original_image_protection.go rename to tencentcloud/services/ci/resource_tc_ci_original_image_protection.go index c0d580c4b1..1fcd3e9ae7 100644 --- a/tencentcloud/resource_tc_ci_original_image_protection.go +++ b/tencentcloud/services/ci/resource_tc_ci_original_image_protection.go @@ -1,14 +1,16 @@ -package tencentcloud +package ci import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" ) -func resourceTencentCloudCIOriginalImageProtection() *schema.Resource { +func ResourceTencentCloudCIOriginalImageProtection() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCIOriginalImageProtectionCreate, Read: resourceTencentCloudCIOriginalImageProtectionRead, @@ -23,7 +25,7 @@ func resourceTencentCloudCIOriginalImageProtection() *schema.Resource { Required: true, ForceNew: true, Description: "The name of a bucket, the format should be [custom name]-[appid], for example `mycos-1258798060`.", - ValidateFunc: validateCosBucketName, + ValidateFunc: tccommon.ValidateCosBucketName, }, "status": { Type: schema.TypeString, @@ -36,21 +38,21 @@ func resourceTencentCloudCIOriginalImageProtection() *schema.Resource { } func resourceTencentCloudCIOriginalImageProtectionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_original_image_protection.create")() + defer tccommon.LogElapsed("resource.tencentcloud_ci_original_image_protection.create")() d.SetId(d.Get("bucket").(string)) return resourceTencentCloudCIOriginalImageProtectionUpdate(d, meta) } func resourceTencentCloudCIOriginalImageProtectionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_original_image_protection.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ci_original_image_protection.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Id() - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} res, err := service.GetCiOriginalImageProtectionById(ctx, bucket) if err != nil { @@ -63,16 +65,16 @@ func resourceTencentCloudCIOriginalImageProtectionRead(d *schema.ResourceData, m } func resourceTencentCloudCIOriginalImageProtectionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_original_image_protection.update")() + defer tccommon.LogElapsed("resource.tencentcloud_ci_original_image_protection.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Id() if d.HasChange("status") { var err error - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} newStatus := d.Get("status") if newStatus == "on" { err = service.OpenCiOriginalImageProtectionById(ctx, bucket) @@ -89,13 +91,13 @@ func resourceTencentCloudCIOriginalImageProtectionUpdate(d *schema.ResourceData, } func resourceTencentCloudCIOriginalImageProtectionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ci_original_image_protection.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_ci_original_image_protection.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Get("bucket").(string) - service := CiService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} err := service.CloseCiOriginalImageProtectionById(ctx, bucket) if err != nil { diff --git a/tencentcloud/resource_tc_ci_original_image_protection_test.go b/tencentcloud/services/ci/resource_tc_ci_original_image_protection_test.go similarity index 78% rename from tencentcloud/resource_tc_ci_original_image_protection_test.go rename to tencentcloud/services/ci/resource_tc_ci_original_image_protection_test.go index 07acdcb995..0d8f944b2c 100644 --- a/tencentcloud/resource_tc_ci_original_image_protection_test.go +++ b/tencentcloud/services/ci/resource_tc_ci_original_image_protection_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ci_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localci "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "context" "fmt" "testing" @@ -13,8 +17,8 @@ func TestAccTencentCloudCIOriginalImageProtection_basic(t *testing.T) { resourceName := "tencentcloud_ci_original_image_protection.basic" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTencentCloudCIOriginalImageProtectionConfig_basic("on"), @@ -50,7 +54,7 @@ func testAccCheckCIOriginalImageProtectionOn(resourceName string) resource.TestC } bucket := rs.Primary.ID - service := CiService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := localci.NewCiService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) res, err := service.GetCiOriginalImageProtectionById(context.Background(), bucket) if err != nil { return fmt.Errorf("error getting COS bucket Guetzli set (%s): %w", bucket, err) @@ -72,5 +76,5 @@ resource "tencentcloud_ci_original_image_protection" "basic" { bucket = var.bucket status = %[2]q } -`, defaultCiBucket, status) +`, tcacctest.DefaultCiBucket, status) } diff --git a/tencentcloud/services/ci/service_tencentcloud_ci.go b/tencentcloud/services/ci/service_tencentcloud_ci.go new file mode 100644 index 0000000000..c789feda0c --- /dev/null +++ b/tencentcloud/services/ci/service_tencentcloud_ci.go @@ -0,0 +1,319 @@ +package ci + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/tencentyun/cos-go-sdk-v5" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" +) + +func NewCiService(client *connectivity.TencentCloudClient) CiService { + return CiService{client: client} +} + +type CiService struct { + client *connectivity.TencentCloudClient +} + +func (me *CiService) DescribeCiBucketById(ctx context.Context, bucket string) (serviceResult *cos.CIServiceResult, errRet error) { + logId := tccommon.GetLogId(ctx) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "GetCIService", bucket, errRet.Error()) + } + }() + + result, response, err := me.client.UsePicClient(bucket).CI.GetCIService(ctx) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s], http status [%s]\n", logId, "GetCIService", bucket, result, response.Status) + + serviceResult = result + return +} + +func (me *CiService) DeleteCiBucketById(ctx context.Context, bucket string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "CloseCIService", bucket, errRet.Error()) + } + }() + + response, err := me.client.UsePicClient(bucket).CI.CloseCIService(ctx) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response status [%s]\n", logId, "CloseCIService", bucket, response.Status) + + return +} + +func (me *CiService) DescribeCiBucketPicStyleById(ctx context.Context, bucket, styleName string) (styleRule *cos.StyleRule, errRet error) { + logId := tccommon.GetLogId(ctx) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "GetStyle", bucket+"#"+styleName, errRet.Error()) + } + }() + + styleResult, response, err := me.client.UsePicClient(bucket).CI.GetStyle(ctx, &cos.GetStyleOptions{ + StyleName: styleName, + }) + if err != nil { + // if response.StatusCode == 400 { + // log.Printf("[CRITAL]%s api[%s] success, request body [%s], response status [%v]\n", logId, "GetStyle", bucket+"#"+styleName, response.StatusCode) + // return + // } + errRet = err + return + } + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response status [%s]\n", logId, "GetStyle", bucket+"#"+styleName, response.Status) + + if len(styleResult.StyleRule) < 1 { + return + } + + styleRule = &styleResult.StyleRule[0] + + return +} + +func (me *CiService) DeleteCiBucketPicStyleById(ctx context.Context, bucket, styleName string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "DeleteStyle", bucket+"#"+styleName, errRet.Error()) + } + }() + + response, err := me.client.UsePicClient(bucket).CI.DeleteStyle(ctx, &cos.DeleteStyleOptions{ + StyleName: styleName, + }) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response status [%s]\n", logId, "DeleteStyle", bucket+"#"+styleName, response.Status) + + return +} + +func (me *CiService) DescribeCiHotLinkById(ctx context.Context, bucket string) (hotLink *cos.HotLinkResult, errRet error) { + logId := tccommon.GetLogId(ctx) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "GetHotLink", bucket, errRet.Error()) + } + }() + + hotLinkResult, response, err := me.client.UsePicClient(bucket).CI.GetHotLink(ctx) + if err != nil { + errRet = err + return + } + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response status [%s]\n", logId, "GetHotLink", bucket, response.Status) + + if len(hotLinkResult.Url) < 1 { + return + } + + hotLink = hotLinkResult + + return +} + +func (me *CiService) DescribeCiMediaTemplateById(ctx context.Context, bucket, templateId string) (mediaSnapshotTemplate *cos.Template, errRet error) { + logId := tccommon.GetLogId(ctx) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "DescribeMediaTemplate", bucket, errRet.Error()) + } + }() + + response, _, err := me.client.UseCiClient(bucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ + Ids: templateId, + }) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%v, %v], response body [%+v]\n", logId, "DescribeMediaTemplate", bucket, templateId, response) + + if len(response.TemplateList) < 1 { + return + } + + mediaSnapshotTemplate = &response.TemplateList[0] + return +} + +func (me *CiService) DeleteCiMediaTemplateById(ctx context.Context, bucket, templateId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "DeleteMediaTemplate", bucket, errRet.Error()) + } + }() + + response, _, err := me.client.UseCiClient(bucket).CI.DeleteMediaTemplate(ctx, templateId) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%+v]\n", logId, "DeleteMediaTemplate", bucket, response) + + return +} + +func (me *CiService) CloseCiOriginalImageProtectionById(ctx context.Context, bucket string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "CloseCIOriginalImageProtection", bucket, errRet.Error()) + } + }() + + _, err := tccommon.RetryWithContext(ctx, tccommon.WriteRetryTimeout, func(ctx context.Context) (interface{}, error) { + return me.client.UsePicClient(bucket).CI.CloseOriginProtect(ctx) + }) + + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s]\n", logId, "CloseCIOriginalImageProtection", bucket) + + return +} + +func (me *CiService) OpenCiOriginalImageProtectionById(ctx context.Context, bucket string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "OpenCIOriginalImageProtection", bucket, errRet.Error()) + } + }() + + _, err := tccommon.RetryWithContext(ctx, tccommon.WriteRetryTimeout, func(ctx context.Context) (interface{}, error) { + return me.client.UsePicClient(bucket).CI.OpenOriginProtect(ctx) + }) + + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s]\n", logId, "OpenCIOriginalImageProtection", bucket) + + return +} + +func (me *CiService) GetCiOriginalImageProtectionById(ctx context.Context, bucket string) (*cos.OriginProtectResult, error) { + var errRet error + logId := tccommon.GetLogId(ctx) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "GetCIOriginalImageProtection", bucket, errRet.Error()) + } + }() + + resRaw, err := tccommon.RetryWithContext(ctx, tccommon.ReadRetryTimeout, func(ctx context.Context) (interface{}, error) { + res, _, err := me.client.UsePicClient(bucket).CI.GetOriginProtect(ctx) + return res, err + }) + + if err != nil { + errRet = err + return nil, errRet + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s]\n", logId, "GetCIOriginalImageProtection", bucket) + + return resRaw.(*cos.OriginProtectResult), nil +} + +func (me *CiService) CloseCiGuetzliById(ctx context.Context, bucket string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "CloseCIGuetzli", bucket, errRet.Error()) + } + }() + + _, err := tccommon.RetryWithContext(ctx, tccommon.WriteRetryTimeout, func(ctx context.Context) (interface{}, error) { + return me.client.UsePicClient(bucket).CI.DeleteGuetzli(ctx) + }) + + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s]\n", logId, "CloseCIGuetzli", bucket) + + return +} + +func (me *CiService) OpenCiGuetzliById(ctx context.Context, bucket string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "OpenCIGuetzli", bucket, errRet.Error()) + } + }() + + _, err := tccommon.RetryWithContext(ctx, tccommon.WriteRetryTimeout, func(ctx context.Context) (interface{}, error) { + return me.client.UsePicClient(bucket).CI.PutGuetzli(ctx) + }) + + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s]\n", logId, "OpenCIGuetzli", bucket) + + return +} + +func (me *CiService) GetCiGuetzliById(ctx context.Context, bucket string) (*cos.GetGuetzliResult, error) { + var errRet error + logId := tccommon.GetLogId(ctx) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "GetCIGuetzli", bucket, errRet.Error()) + } + }() + + resRaw, err := tccommon.RetryWithContext(ctx, tccommon.ReadRetryTimeout, func(ctx context.Context) (interface{}, error) { + res, _, err := me.client.UsePicClient(bucket).CI.GetGuetzli(ctx) + return res, err + }) + + if err != nil { + errRet = err + return nil, errRet + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s]\n", logId, "GetCIGuetzli", bucket) + + return resRaw.(*cos.GetGuetzliResult), nil +} From 9794285e62628e4920011f18847759d07c5defe7 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 12:58:23 +0800 Subject: [PATCH 15/31] refactor: migrate package tencentcloud/services/ciam --- tencentcloud/provider.go | 5 +- .../ciam}/resource_tc_ciam_user_group.go | 59 ++++--- .../ciam}/resource_tc_ciam_user_group_test.go | 8 +- .../ciam}/resource_tc_ciam_user_store.go | 51 +++--- .../ciam}/resource_tc_ciam_user_store_test.go | 8 +- .../ciam/service_tencentcloud_ciam.go | 159 ++++++++++++++++++ 6 files changed, 230 insertions(+), 60 deletions(-) rename tencentcloud/{ => services/ciam}/resource_tc_ciam_user_group.go (71%) rename tencentcloud/{ => services/ciam}/resource_tc_ciam_user_group_test.go (85%) rename tencentcloud/{ => services/ciam}/resource_tc_ciam_user_store.go (72%) rename tencentcloud/{ => services/ciam}/resource_tc_ciam_user_store_test.go (83%) create mode 100644 tencentcloud/services/ciam/service_tencentcloud_ciam.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 25e75753c7..b2353af53f 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ciam" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/chdfs" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cfw" @@ -1184,8 +1185,8 @@ func Provider() *schema.Provider { "tencentcloud_cam_user_permission_boundary_attachment": cam.ResourceTencentCloudCamUserPermissionBoundaryAttachment(), "tencentcloud_cam_role_permission_boundary_attachment": cam.ResourceTencentCloudCamRolePermissionBoundaryAttachment(), "tencentcloud_organization_quit_organization_operation": resourceTencentCloudOrganizationQuitOrganizationOperation(), - "tencentcloud_ciam_user_group": resourceTencentCloudCiamUserGroup(), - "tencentcloud_ciam_user_store": resourceTencentCloudCiamUserStore(), + "tencentcloud_ciam_user_group": ciam.ResourceTencentCloudCiamUserGroup(), + "tencentcloud_ciam_user_store": ciam.ResourceTencentCloudCiamUserStore(), "tencentcloud_scf_function": resourceTencentCloudScfFunction(), "tencentcloud_scf_function_version": resourceTencentCloudScfFunctionVersion(), "tencentcloud_scf_function_event_invoke_config": resourceTencentCloudScfFunctionEventInvokeConfig(), diff --git a/tencentcloud/resource_tc_ciam_user_group.go b/tencentcloud/services/ciam/resource_tc_ciam_user_group.go similarity index 71% rename from tencentcloud/resource_tc_ciam_user_group.go rename to tencentcloud/services/ciam/resource_tc_ciam_user_group.go index d0e641fb86..3a8ff6369c 100644 --- a/tencentcloud/resource_tc_ciam_user_group.go +++ b/tencentcloud/services/ciam/resource_tc_ciam_user_group.go @@ -1,4 +1,4 @@ -package tencentcloud +package ciam import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ciam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ciam/v20220331" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCiamUserGroup() *schema.Resource { +func ResourceTencentCloudCiamUserGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiamUserGroupCreate, Read: resourceTencentCloudCiamUserGroupRead, @@ -42,10 +45,10 @@ func resourceTencentCloudCiamUserGroup() *schema.Resource { } func resourceTencentCloudCiamUserGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ciam_user_group.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ciam_user_group.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ciam.NewCreateUserGroupRequest() @@ -66,10 +69,10 @@ func resourceTencentCloudCiamUserGroupCreate(d *schema.ResourceData, meta interf request.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCiamClient().CreateUserGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiamClient().CreateUserGroup(request) if e != nil { - return retryError(e) + 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()) } @@ -83,22 +86,22 @@ func resourceTencentCloudCiamUserGroupCreate(d *schema.ResourceData, meta interf userGroupId = *response.Response.UserGroupId - d.SetId(userStoreId + FILED_SP + userGroupId) + d.SetId(userStoreId + tccommon.FILED_SP + userGroupId) return resourceTencentCloudCiamUserGroupRead(d, meta) } func resourceTencentCloudCiamUserGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ciam_user_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ciam_user_group.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -132,14 +135,14 @@ func resourceTencentCloudCiamUserGroupRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudCiamUserGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ciam_user_group.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ciam_user_group.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := ciam.NewUpdateUserGroupRequest() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -175,10 +178,10 @@ func resourceTencentCloudCiamUserGroupUpdate(d *schema.ResourceData, meta interf request.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCiamClient().UpdateUserGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiamClient().UpdateUserGroup(request) if e != nil { - return retryError(e) + 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()) } @@ -194,14 +197,14 @@ func resourceTencentCloudCiamUserGroupUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudCiamUserGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ciam_user_group.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ciam_user_group.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiamService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CiamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ciam_user_group_test.go b/tencentcloud/services/ciam/resource_tc_ciam_user_group_test.go similarity index 85% rename from tencentcloud/resource_tc_ciam_user_group_test.go rename to tencentcloud/services/ciam/resource_tc_ciam_user_group_test.go index 184af70278..01da0a6d11 100644 --- a/tencentcloud/resource_tc_ciam_user_group_test.go +++ b/tencentcloud/services/ciam/resource_tc_ciam_user_group_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ciam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCiamUserGroupResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCiamUserGroup, diff --git a/tencentcloud/resource_tc_ciam_user_store.go b/tencentcloud/services/ciam/resource_tc_ciam_user_store.go similarity index 72% rename from tencentcloud/resource_tc_ciam_user_store.go rename to tencentcloud/services/ciam/resource_tc_ciam_user_store.go index 9716e72c90..c632cbfa39 100644 --- a/tencentcloud/resource_tc_ciam_user_store.go +++ b/tencentcloud/services/ciam/resource_tc_ciam_user_store.go @@ -1,16 +1,19 @@ -package tencentcloud +package ciam import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ciam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ciam/v20220331" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCiamUserStore() *schema.Resource { +func ResourceTencentCloudCiamUserStore() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCiamUserStoreCreate, Read: resourceTencentCloudCiamUserStoreRead, @@ -42,10 +45,10 @@ func resourceTencentCloudCiamUserStore() *schema.Resource { } func resourceTencentCloudCiamUserStoreCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ciam_user_store.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ciam_user_store.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ciam.NewCreateUserStoreRequest() @@ -64,10 +67,10 @@ func resourceTencentCloudCiamUserStoreCreate(d *schema.ResourceData, meta interf request.UserPoolLogo = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCiamClient().CreateUserStore(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiamClient().CreateUserStore(request) if e != nil { - return retryError(e) + 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()) } @@ -86,14 +89,14 @@ func resourceTencentCloudCiamUserStoreCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudCiamUserStoreRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ciam_user_store.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ciam_user_store.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} userStoreId := d.Id() @@ -124,10 +127,10 @@ func resourceTencentCloudCiamUserStoreRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudCiamUserStoreUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ciam_user_store.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ciam_user_store.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) needChange := false mutableArgs := []string{"user_pool_name", "user_pool_desc", "user_pool_logo"} @@ -157,10 +160,10 @@ func resourceTencentCloudCiamUserStoreUpdate(d *schema.ResourceData, meta interf request.UserPoolLogo = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCiamClient().UpdateUserStore(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCiamClient().UpdateUserStore(request) if e != nil { - return retryError(e) + 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()) } @@ -176,13 +179,13 @@ func resourceTencentCloudCiamUserStoreUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudCiamUserStoreDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ciam_user_store.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ciam_user_store.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CiamService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CiamService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} userStoreId := d.Id() if err := service.DeleteCiamUserStoreById(ctx, userStoreId); err != nil { diff --git a/tencentcloud/resource_tc_ciam_user_store_test.go b/tencentcloud/services/ciam/resource_tc_ciam_user_store_test.go similarity index 83% rename from tencentcloud/resource_tc_ciam_user_store_test.go rename to tencentcloud/services/ciam/resource_tc_ciam_user_store_test.go index 1d169cd107..d8339591c4 100644 --- a/tencentcloud/resource_tc_ciam_user_store_test.go +++ b/tencentcloud/services/ciam/resource_tc_ciam_user_store_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ciam_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCiamUserStoreResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCiamUserStore, diff --git a/tencentcloud/services/ciam/service_tencentcloud_ciam.go b/tencentcloud/services/ciam/service_tencentcloud_ciam.go new file mode 100644 index 0000000000..d01e2f8833 --- /dev/null +++ b/tencentcloud/services/ciam/service_tencentcloud_ciam.go @@ -0,0 +1,159 @@ +package ciam + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + + ciam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ciam/v20220331" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +type CiamService struct { + client *connectivity.TencentCloudClient +} + +func (me *CiamService) DescribeCiamUserGroupById(ctx context.Context, userStoreId string, userGroupId string) (userGroup *ciam.UserGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ciam.NewListUserGroupsRequest() + request.UserStoreId = &userStoreId + + filter := &ciam.Filter{ + Key: helper.String("UserGroupId"), + Values: []*string{helper.String(userGroupId)}, + } + + request.Filters = append(request.Filters, filter) + + 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()) + + var ( + offset int64 = 1 + limit int64 = 20 + ) + instances := make([]*ciam.UserGroup, 0) + for { + page := ciam.Pageable{ + PageSize: &limit, + PageNumber: &offset, + } + request.Pageable = &page + + response, err := me.client.UseCiamClient().ListUserGroups(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()) + + if response == nil || len(response.Response.Content) < 1 { + break + } + instances = append(instances, response.Response.Content...) + if len(response.Response.Content) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + userGroup = instances[0] + return +} + +func (me *CiamService) DeleteCiamUserGroupById(ctx context.Context, userStoreId string, userGroupId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ciam.NewDeleteUserGroupsRequest() + request.UserStoreId = &userStoreId + request.UserGroupIds = []*string{&userGroupId} + + 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.UseCiamClient().DeleteUserGroups(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 +} + +func (me *CiamService) DescribeCiamUserStoreById(ctx context.Context, userPoolId string) (userStore *ciam.UserStore, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ciam.NewListUserStoreRequest() + + 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.UseCiamClient().ListUserStore(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()) + + if len(response.Response.UserStoreSet) < 1 { + return + } + + for _, ins := range response.Response.UserStoreSet { + if *ins.UserStoreId == userPoolId { + userStore = ins + break + } + } + return +} + +func (me *CiamService) DeleteCiamUserStoreById(ctx context.Context, userPoolId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ciam.NewDeleteUserStoreRequest() + request.UserPoolId = &userPoolId + + 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.UseCiamClient().DeleteUserStore(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 f2fa817bc2d20fb66afcfeed4438d9c2066c459b Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 13:06:40 +0800 Subject: [PATCH 16/31] refactor: migrate package tencentcloud/services/ckafka --- tencentcloud/provider.go | 61 +- .../ckafka}/data_source_tc_ckafka_acls.go | 25 +- .../data_source_tc_ckafka_acls_test.go | 10 +- .../data_source_tc_ckafka_connect_resource.go | 23 +- ..._source_tc_ckafka_connect_resource_test.go | 10 +- ..._source_tc_ckafka_datahub_group_offsets.go | 23 +- ...ce_tc_ckafka_datahub_group_offsets_test.go | 10 +- .../data_source_tc_ckafka_datahub_task.go | 23 +- ...data_source_tc_ckafka_datahub_task_test.go | 10 +- .../data_source_tc_ckafka_datahub_topic.go | 23 +- ...ata_source_tc_ckafka_datahub_topic_test.go | 10 +- .../ckafka}/data_source_tc_ckafka_group.go | 23 +- .../data_source_tc_ckafka_group_info.go | 23 +- .../data_source_tc_ckafka_group_info_test.go | 10 +- .../data_source_tc_ckafka_group_offsets.go | 23 +- ...ata_source_tc_ckafka_group_offsets_test.go | 10 +- .../data_source_tc_ckafka_group_test.go | 10 +- .../data_source_tc_ckafka_instances.go | 12 +- .../data_source_tc_ckafka_instances_test.go | 12 +- .../ckafka}/data_source_tc_ckafka_region.go | 21 +- .../data_source_tc_ckafka_region_test.go | 10 +- .../data_source_tc_ckafka_task_status.go | 22 +- .../data_source_tc_ckafka_task_status_test.go | 10 +- ...ata_source_tc_ckafka_topic_flow_ranking.go | 23 +- ...ource_tc_ckafka_topic_flow_ranking_test.go | 10 +- ...urce_tc_ckafka_topic_produce_connection.go | 25 +- ...tc_ckafka_topic_produce_connection_test.go | 10 +- ..._source_tc_ckafka_topic_subscribe_group.go | 23 +- ...ce_tc_ckafka_topic_subscribe_group_test.go | 10 +- ...ata_source_tc_ckafka_topic_sync_replica.go | 23 +- ...ource_tc_ckafka_topic_sync_replica_test.go | 10 +- .../ckafka}/data_source_tc_ckafka_topics.go | 21 +- .../data_source_tc_ckafka_topics_test.go | 10 +- .../ckafka}/data_source_tc_ckafka_users.go | 19 +- .../data_source_tc_ckafka_users_test.go | 10 +- .../ckafka}/data_source_tc_ckafka_zone.go | 23 +- .../data_source_tc_ckafka_zone_test.go | 10 +- .../services/ckafka/extension_ckafka.go | 90 + .../services/ckafka/extension_postgresql.go | 57 + .../services/ckafka/extension_tags.go | 3 + .../ckafka}/resource_tc_ckafka_acl.go | 36 +- .../ckafka}/resource_tc_ckafka_acl_rule.go | 59 +- .../resource_tc_ckafka_acl_rule_test.go | 8 +- .../ckafka}/resource_tc_ckafka_acl_test.go | 28 +- .../resource_tc_ckafka_connect_resource.go | 59 +- ...esource_tc_ckafka_connect_resource_test.go | 8 +- .../resource_tc_ckafka_consumer_group.go | 45 +- ..._tc_ckafka_consumer_group_modify_offset.go | 29 +- ...kafka_consumer_group_modify_offset_test.go | 8 +- .../resource_tc_ckafka_consumer_group_test.go | 8 +- .../resource_tc_ckafka_datahub_task.go | 61 +- .../resource_tc_ckafka_datahub_task_test.go | 8 +- .../resource_tc_ckafka_datahub_topic.go | 65 +- .../resource_tc_ckafka_datahub_topic_test.go | 8 +- .../ckafka}/resource_tc_ckafka_instance.go | 87 +- .../resource_tc_ckafka_instance_test.go | 55 +- .../resource_tc_ckafka_renew_instance.go | 27 +- .../resource_tc_ckafka_renew_instance_test.go | 10 +- .../ckafka}/resource_tc_ckafka_route.go | 53 +- .../ckafka}/resource_tc_ckafka_route_test.go | 16 +- .../ckafka}/resource_tc_ckafka_topic.go | 57 +- .../ckafka}/resource_tc_ckafka_topic_test.go | 56 +- .../ckafka}/resource_tc_ckafka_user.go | 44 +- .../ckafka}/resource_tc_ckafka_user_test.go | 50 +- .../ckafka/service_tencentcloud_ckafka.go | 1807 +++++++++++++++++ .../ckafka/service_tencentcloud_tag.go | 415 ++++ 66 files changed, 3204 insertions(+), 694 deletions(-) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_acls.go (81%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_acls_test.go (88%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_connect_resource.go (98%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_connect_resource_test.go (53%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_datahub_group_offsets.go (86%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_datahub_group_offsets_test.go (56%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_datahub_task.go (99%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_datahub_task_test.go (52%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_datahub_topic.go (85%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_datahub_topic_test.go (52%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_group.go (78%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_group_info.go (91%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_group_info_test.go (55%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_group_offsets.go (88%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_group_offsets_test.go (55%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_group_test.go (55%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_instances.go (97%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_instances_test.go (57%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_region.go (84%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_region_test.go (51%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_task_status.go (73%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_task_status_test.go (53%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_topic_flow_ranking.go (91%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_topic_flow_ranking_test.go (59%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_topic_produce_connection.go (80%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_topic_produce_connection_test.go (57%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_topic_subscribe_group.go (91%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_topic_subscribe_group_test.go (56%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_topic_sync_replica.go (86%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_topic_sync_replica_test.go (56%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_topics.go (91%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_topics_test.go (91%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_users.go (80%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_users_test.go (78%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_zone.go (94%) rename tencentcloud/{ => services/ckafka}/data_source_tc_ckafka_zone_test.go (52%) create mode 100644 tencentcloud/services/ckafka/extension_ckafka.go create mode 100644 tencentcloud/services/ckafka/extension_postgresql.go create mode 100644 tencentcloud/services/ckafka/extension_tags.go rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_acl.go (78%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_acl_rule.go (81%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_acl_rule_test.go (87%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_acl_test.go (77%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_connect_resource.go (96%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_connect_resource_test.go (86%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_consumer_group.go (71%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_consumer_group_modify_offset.go (85%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_consumer_group_modify_offset_test.go (75%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_consumer_group_test.go (76%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_datahub_task.go (99%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_datahub_task_test.go (83%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_datahub_topic.go (73%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_datahub_topic_test.go (90%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_instance.go (90%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_instance_test.go (89%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_renew_instance.go (70%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_renew_instance_test.go (79%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_route.go (81%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_route_test.go (69%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_topic.go (88%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_topic_test.go (79%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_user.go (68%) rename tencentcloud/{ => services/ckafka}/resource_tc_ckafka_user_test.go (68%) create mode 100644 tencentcloud/services/ckafka/service_tencentcloud_ckafka.go create mode 100644 tencentcloud/services/ckafka/service_tencentcloud_tag.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index b2353af53f..eb55717076 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ckafka" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ciam" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/chdfs" @@ -501,24 +502,24 @@ func Provider() *schema.Provider { "tencentcloud_sqlserver_backup_upload_size": dataSourceTencentCloudSqlserverBackupUploadSize(), "tencentcloud_sqlserver_cross_region_zone": dataSourceTencentCloudSqlserverCrossRegionZone(), "tencentcloud_sqlserver_db_charsets": dataSourceTencentCloudSqlserverDBCharsets(), - "tencentcloud_ckafka_users": dataSourceTencentCloudCkafkaUsers(), - "tencentcloud_ckafka_acls": dataSourceTencentCloudCkafkaAcls(), - "tencentcloud_ckafka_topics": dataSourceTencentCloudCkafkaTopics(), - "tencentcloud_ckafka_instances": dataSourceTencentCloudCkafkaInstances(), - "tencentcloud_ckafka_connect_resource": dataSourceTencentCloudCkafkaConnectResource(), - "tencentcloud_ckafka_region": dataSourceTencentCloudCkafkaRegion(), - "tencentcloud_ckafka_datahub_topic": dataSourceTencentCloudCkafkaDatahubTopic(), - "tencentcloud_ckafka_datahub_group_offsets": dataSourceTencentCloudCkafkaDatahubGroupOffsets(), - "tencentcloud_ckafka_datahub_task": dataSourceTencentCloudCkafkaDatahubTask(), - "tencentcloud_ckafka_group": dataSourceTencentCloudCkafkaGroup(), - "tencentcloud_ckafka_group_offsets": dataSourceTencentCloudCkafkaGroupOffsets(), - "tencentcloud_ckafka_group_info": dataSourceTencentCloudCkafkaGroupInfo(), - "tencentcloud_ckafka_task_status": dataSourceTencentCloudCkafkaTaskStatus(), - "tencentcloud_ckafka_topic_flow_ranking": dataSourceTencentCloudCkafkaTopicFlowRanking(), - "tencentcloud_ckafka_topic_produce_connection": dataSourceTencentCloudCkafkaTopicProduceConnection(), - "tencentcloud_ckafka_topic_subscribe_group": dataSourceTencentCloudCkafkaTopicSubscribeGroup(), - "tencentcloud_ckafka_topic_sync_replica": dataSourceTencentCloudCkafkaTopicSyncReplica(), - "tencentcloud_ckafka_zone": dataSourceTencentCloudCkafkaZone(), + "tencentcloud_ckafka_users": ckafka.DataSourceTencentCloudCkafkaUsers(), + "tencentcloud_ckafka_acls": ckafka.DataSourceTencentCloudCkafkaAcls(), + "tencentcloud_ckafka_topics": ckafka.DataSourceTencentCloudCkafkaTopics(), + "tencentcloud_ckafka_instances": ckafka.DataSourceTencentCloudCkafkaInstances(), + "tencentcloud_ckafka_connect_resource": ckafka.DataSourceTencentCloudCkafkaConnectResource(), + "tencentcloud_ckafka_region": ckafka.DataSourceTencentCloudCkafkaRegion(), + "tencentcloud_ckafka_datahub_topic": ckafka.DataSourceTencentCloudCkafkaDatahubTopic(), + "tencentcloud_ckafka_datahub_group_offsets": ckafka.DataSourceTencentCloudCkafkaDatahubGroupOffsets(), + "tencentcloud_ckafka_datahub_task": ckafka.DataSourceTencentCloudCkafkaDatahubTask(), + "tencentcloud_ckafka_group": ckafka.DataSourceTencentCloudCkafkaGroup(), + "tencentcloud_ckafka_group_offsets": ckafka.DataSourceTencentCloudCkafkaGroupOffsets(), + "tencentcloud_ckafka_group_info": ckafka.DataSourceTencentCloudCkafkaGroupInfo(), + "tencentcloud_ckafka_task_status": ckafka.DataSourceTencentCloudCkafkaTaskStatus(), + "tencentcloud_ckafka_topic_flow_ranking": ckafka.DataSourceTencentCloudCkafkaTopicFlowRanking(), + "tencentcloud_ckafka_topic_produce_connection": ckafka.DataSourceTencentCloudCkafkaTopicProduceConnection(), + "tencentcloud_ckafka_topic_subscribe_group": ckafka.DataSourceTencentCloudCkafkaTopicSubscribeGroup(), + "tencentcloud_ckafka_topic_sync_replica": ckafka.DataSourceTencentCloudCkafkaTopicSyncReplica(), + "tencentcloud_ckafka_zone": ckafka.DataSourceTencentCloudCkafkaZone(), "tencentcloud_audit_cos_regions": dataSourceTencentCloudAuditCosRegions(), "tencentcloud_audit_key_alias": dataSourceTencentCloudAuditKeyAlias(), "tencentcloud_audits": dataSourceTencentCloudAudits(), @@ -1304,18 +1305,18 @@ func Provider() *schema.Provider { "tencentcloud_sqlserver_start_backup_full_migration": resourceTencentCloudSqlserverStartBackupFullMigration(), "tencentcloud_sqlserver_start_backup_incremental_migration": resourceTencentCloudSqlserverStartBackupIncrementalMigration(), "tencentcloud_sqlserver_start_xevent": resourceTencentCloudSqlserverStartXevent(), - "tencentcloud_ckafka_instance": resourceTencentCloudCkafkaInstance(), - "tencentcloud_ckafka_user": resourceTencentCloudCkafkaUser(), - "tencentcloud_ckafka_acl": resourceTencentCloudCkafkaAcl(), - "tencentcloud_ckafka_topic": resourceTencentCloudCkafkaTopic(), - "tencentcloud_ckafka_datahub_topic": resourceTencentCloudCkafkaDatahubTopic(), - "tencentcloud_ckafka_connect_resource": resourceTencentCloudCkafkaConnectResource(), - "tencentcloud_ckafka_renew_instance": resourceTencentCloudCkafkaRenewInstance(), - "tencentcloud_ckafka_acl_rule": resourceTencentCloudCkafkaAclRule(), - "tencentcloud_ckafka_consumer_group": resourceTencentCloudCkafkaConsumerGroup(), - "tencentcloud_ckafka_consumer_group_modify_offset": resourceTencentCloudCkafkaConsumerGroupModifyOffset(), - "tencentcloud_ckafka_datahub_task": resourceTencentCloudCkafkaDatahubTask(), - "tencentcloud_ckafka_route": resourceTencentCloudCkafkaRoute(), + "tencentcloud_ckafka_instance": ckafka.ResourceTencentCloudCkafkaInstance(), + "tencentcloud_ckafka_user": ckafka.ResourceTencentCloudCkafkaUser(), + "tencentcloud_ckafka_acl": ckafka.ResourceTencentCloudCkafkaAcl(), + "tencentcloud_ckafka_topic": ckafka.ResourceTencentCloudCkafkaTopic(), + "tencentcloud_ckafka_datahub_topic": ckafka.ResourceTencentCloudCkafkaDatahubTopic(), + "tencentcloud_ckafka_connect_resource": ckafka.ResourceTencentCloudCkafkaConnectResource(), + "tencentcloud_ckafka_renew_instance": ckafka.ResourceTencentCloudCkafkaRenewInstance(), + "tencentcloud_ckafka_acl_rule": ckafka.ResourceTencentCloudCkafkaAclRule(), + "tencentcloud_ckafka_consumer_group": ckafka.ResourceTencentCloudCkafkaConsumerGroup(), + "tencentcloud_ckafka_consumer_group_modify_offset": ckafka.ResourceTencentCloudCkafkaConsumerGroupModifyOffset(), + "tencentcloud_ckafka_datahub_task": ckafka.ResourceTencentCloudCkafkaDatahubTask(), + "tencentcloud_ckafka_route": ckafka.ResourceTencentCloudCkafkaRoute(), "tencentcloud_audit": resourceTencentCloudAudit(), "tencentcloud_audit_track": resourceTencentCloudAuditTrack(), "tencentcloud_image": resourceTencentCloudImage(), diff --git a/tencentcloud/data_source_tc_ckafka_acls.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_acls.go similarity index 81% rename from tencentcloud/data_source_tc_ckafka_acls.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_acls.go index ef99348b55..8d83117649 100644 --- a/tencentcloud/data_source_tc_ckafka_acls.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_acls.go @@ -1,14 +1,17 @@ -package tencentcloud +package ckafka import ( "context" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaAcls() *schema.Resource { +func DataSourceTencentCloudCkafkaAcls() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaAclsRead, @@ -82,10 +85,10 @@ func dataSourceTencentCloudCkafkaAcls() *schema.Resource { } func dataSourceTencentCloudCkafkaAclsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_acls.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_acls.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]interface{}) params["instance_id"] = d.Get("instance_id").(string) @@ -96,7 +99,7 @@ func dataSourceTencentCloudCkafkaAclsRead(d *schema.ResourceData, meta interface } ckafkaService := CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } aclInfos, err := ckafkaService.DescribeAclByFilter(ctx, params) if err != nil { @@ -114,10 +117,10 @@ func dataSourceTencentCloudCkafkaAclsRead(d *schema.ResourceData, meta interface "principal": strings.TrimLeft(*acl.Principal, CKAFKA_ACL_PRINCIPAL_STR), }) - ids = append(ids, params["instance_id"].(string)+FILED_SP+CKAFKA_PERMISSION_TYPE_TO_STRING[*acl.PermissionType]+ - FILED_SP+strings.TrimLeft(*acl.Principal, CKAFKA_ACL_PRINCIPAL_STR)+FILED_SP+*acl.Host+FILED_SP+ - CKAFKA_ACL_OPERATION_TO_STRING[*acl.Operation]+FILED_SP+CKAFKA_ACL_RESOURCE_TYPE_TO_STRING[*acl.ResourceType]+ - FILED_SP+*acl.ResourceName) + ids = append(ids, params["instance_id"].(string)+tccommon.FILED_SP+CKAFKA_PERMISSION_TYPE_TO_STRING[*acl.PermissionType]+ + tccommon.FILED_SP+strings.TrimLeft(*acl.Principal, CKAFKA_ACL_PRINCIPAL_STR)+tccommon.FILED_SP+*acl.Host+tccommon.FILED_SP+ + CKAFKA_ACL_OPERATION_TO_STRING[*acl.Operation]+tccommon.FILED_SP+CKAFKA_ACL_RESOURCE_TYPE_TO_STRING[*acl.ResourceType]+ + tccommon.FILED_SP+*acl.ResourceName) } d.SetId(helper.DataResourceIdsHash(ids)) @@ -125,7 +128,7 @@ func dataSourceTencentCloudCkafkaAclsRead(d *schema.ResourceData, meta interface output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), aclList); e != nil { + if e := tccommon.WriteToFile(output.(string), aclList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_acls_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_acls_test.go similarity index 88% rename from tencentcloud/data_source_tc_ckafka_acls_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_acls_test.go index 7b02de1e23..4250a7ed37 100644 --- a/tencentcloud/data_source_tc_ckafka_acls_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_acls_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaAclsDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCkafkaAclDestroy, Steps: []resource.TestStep{ { @@ -29,7 +31,7 @@ func TestAccTencentCloudCkafkaAclsDataSource(t *testing.T) { }) } -const testAccTencentCloudDataSourceCkafkaAcl = defaultKafkaVariable + ` +const testAccTencentCloudDataSourceCkafkaAcl = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_user" "foo" { instance_id = var.instance_id account_name = "tf-test-acl-data" diff --git a/tencentcloud/data_source_tc_ckafka_connect_resource.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_connect_resource.go similarity index 98% rename from tencentcloud/data_source_tc_ckafka_connect_resource.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_connect_resource.go index 7872e71b90..0fe3d6a0b0 100644 --- a/tencentcloud/data_source_tc_ckafka_connect_resource.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_connect_resource.go @@ -1,15 +1,18 @@ -package tencentcloud +package ckafka import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaConnectResource() *schema.Resource { +func DataSourceTencentCloudCkafkaConnectResource() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaConnectResourceRead, Schema: map[string]*schema.Schema{ @@ -651,12 +654,12 @@ func dataSourceTencentCloudCkafkaConnectResource() *schema.Resource { } func dataSourceTencentCloudCkafkaConnectResourceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_connect_resource.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_connect_resource.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("type"); ok { @@ -679,14 +682,14 @@ func dataSourceTencentCloudCkafkaConnectResourceRead(d *schema.ResourceData, met paramMap["resource_region"] = v.(string) } - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *ckafka.DescribeConnectResourcesResp - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeCkafkaConnectResourceByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -1164,7 +1167,7 @@ func dataSourceTencentCloudCkafkaConnectResourceRead(d *schema.ResourceData, met d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), describeConnectResourcesRespMap); e != nil { + if e := tccommon.WriteToFile(output.(string), describeConnectResourcesRespMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_connect_resource_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_connect_resource_test.go similarity index 53% rename from tencentcloud/data_source_tc_ckafka_connect_resource_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_connect_resource_test.go index e73696b067..1914a95ab5 100644 --- a/tencentcloud/data_source_tc_ckafka_connect_resource_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_connect_resource_test.go @@ -1,20 +1,22 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaConnectResourceDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaConnectResourceDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_connect_resource.connect_resource")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_connect_resource.connect_resource")), }, }, }) diff --git a/tencentcloud/data_source_tc_ckafka_datahub_group_offsets.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_group_offsets.go similarity index 86% rename from tencentcloud/data_source_tc_ckafka_datahub_group_offsets.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_group_offsets.go index 6387c451e3..d1a5cee676 100644 --- a/tencentcloud/data_source_tc_ckafka_datahub_group_offsets.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_group_offsets.go @@ -1,15 +1,18 @@ -package tencentcloud +package ckafka import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaDatahubGroupOffsets() *schema.Resource { +func DataSourceTencentCloudCkafkaDatahubGroupOffsets() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaDatahubGroupOffsetsRead, Schema: map[string]*schema.Schema{ @@ -95,12 +98,12 @@ func dataSourceTencentCloudCkafkaDatahubGroupOffsets() *schema.Resource { } func dataSourceTencentCloudCkafkaDatahubGroupOffsetsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_datahub_group_offsets.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_datahub_group_offsets.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("name"); ok { @@ -115,14 +118,14 @@ func dataSourceTencentCloudCkafkaDatahubGroupOffsetsRead(d *schema.ResourceData, paramMap["search_word"] = helper.String(v.(string)) } - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result []*ckafka.GroupOffsetTopic - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { groupOffsetTopics, e := service.DescribeCkafkaDatahubGroupOffsetsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = groupOffsetTopics return nil @@ -186,7 +189,7 @@ func dataSourceTencentCloudCkafkaDatahubGroupOffsetsRead(d *schema.ResourceData, output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), topicList); e != nil { + if e := tccommon.WriteToFile(output.(string), topicList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_datahub_group_offsets_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_group_offsets_test.go similarity index 56% rename from tencentcloud/data_source_tc_ckafka_datahub_group_offsets_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_group_offsets_test.go index fa6bab27e3..3dca3e755e 100644 --- a/tencentcloud/data_source_tc_ckafka_datahub_group_offsets_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_group_offsets_test.go @@ -1,20 +1,22 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaDatahubGroupOffsetsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaDatahubGroupOffsetsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_datahub_group_offsets.datahub_group_offsets")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_datahub_group_offsets.datahub_group_offsets")), }, }, }) diff --git a/tencentcloud/data_source_tc_ckafka_datahub_task.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_task.go similarity index 99% rename from tencentcloud/data_source_tc_ckafka_datahub_task.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_task.go index cf9a32e9c3..366680652f 100644 --- a/tencentcloud/data_source_tc_ckafka_datahub_task.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_task.go @@ -1,15 +1,18 @@ -package tencentcloud +package ckafka import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaDatahubTask() *schema.Resource { +func DataSourceTencentCloudCkafkaDatahubTask() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaDatahubTaskRead, Schema: map[string]*schema.Schema{ @@ -2880,12 +2883,12 @@ func dataSourceTencentCloudCkafkaDatahubTask() *schema.Resource { } func dataSourceTencentCloudCkafkaDatahubTaskRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_datahub_task.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_datahub_task.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) @@ -2909,14 +2912,14 @@ func dataSourceTencentCloudCkafkaDatahubTaskRead(d *schema.ResourceData, meta in paramMap["resource"] = helper.String(v.(string)) } - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var datahubTaskInfos []*ckafka.DatahubTaskInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCkafkaDatahubTaskByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } datahubTaskInfos = result return nil @@ -5175,7 +5178,7 @@ func dataSourceTencentCloudCkafkaDatahubTaskRead(d *schema.ResourceData, meta in _ = d.Set("task_list", taskList) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), taskList); e != nil { + if e := tccommon.WriteToFile(output.(string), taskList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_datahub_task_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_task_test.go similarity index 52% rename from tencentcloud/data_source_tc_ckafka_datahub_task_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_task_test.go index c203233eb1..566ddd685e 100644 --- a/tencentcloud/data_source_tc_ckafka_datahub_task_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_task_test.go @@ -1,20 +1,22 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaDatahubTaskDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaDatahubTaskDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_datahub_task.datahub_task")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_datahub_task.datahub_task")), }, }, }) diff --git a/tencentcloud/data_source_tc_ckafka_datahub_topic.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_topic.go similarity index 85% rename from tencentcloud/data_source_tc_ckafka_datahub_topic.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_topic.go index 1296cff77b..fcdf306744 100644 --- a/tencentcloud/data_source_tc_ckafka_datahub_topic.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_topic.go @@ -1,15 +1,18 @@ -package tencentcloud +package ckafka import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaDatahubTopic() *schema.Resource { +func DataSourceTencentCloudCkafkaDatahubTopic() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaDatahubTopicRead, Schema: map[string]*schema.Schema{ @@ -88,12 +91,12 @@ func dataSourceTencentCloudCkafkaDatahubTopic() *schema.Resource { } func dataSourceTencentCloudCkafkaDatahubTopicRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_datahub_topic.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_datahub_topic.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("search_word"); ok { @@ -108,14 +111,14 @@ func dataSourceTencentCloudCkafkaDatahubTopicRead(d *schema.ResourceData, meta i paramMap["limit"] = v.(int) } - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var describeDatahubTopicsResp *ckafka.DescribeDatahubTopicsResp - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeCkafkaDatahubTopicByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } describeDatahubTopicsResp = response return nil @@ -172,7 +175,7 @@ func dataSourceTencentCloudCkafkaDatahubTopicRead(d *schema.ResourceData, meta i output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), topicList); e != nil { + if e := tccommon.WriteToFile(output.(string), topicList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_datahub_topic_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_topic_test.go similarity index 52% rename from tencentcloud/data_source_tc_ckafka_datahub_topic_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_topic_test.go index a437ab81af..005a5b6f5a 100644 --- a/tencentcloud/data_source_tc_ckafka_datahub_topic_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_datahub_topic_test.go @@ -1,20 +1,22 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaDatahubTopicDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaDatahubTopicDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_datahub_topic.datahub_topic")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_datahub_topic.datahub_topic")), }, }, }) diff --git a/tencentcloud/data_source_tc_ckafka_group.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_group.go similarity index 78% rename from tencentcloud/data_source_tc_ckafka_group.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_group.go index ab2ff96357..e09d5815e3 100644 --- a/tencentcloud/data_source_tc_ckafka_group.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_group.go @@ -1,15 +1,18 @@ -package tencentcloud +package ckafka import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaGroup() *schema.Resource { +func DataSourceTencentCloudCkafkaGroup() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaGroupRead, Schema: map[string]*schema.Schema{ @@ -55,12 +58,12 @@ func dataSourceTencentCloudCkafkaGroup() *schema.Resource { } func dataSourceTencentCloudCkafkaGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_group.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { @@ -71,14 +74,14 @@ func dataSourceTencentCloudCkafkaGroupRead(d *schema.ResourceData, meta interfac paramMap["search_word"] = helper.String(v.(string)) } - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var groups []*ckafka.DescribeGroup - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCkafkaGroupByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } groups = result return nil @@ -109,7 +112,7 @@ func dataSourceTencentCloudCkafkaGroupRead(d *schema.ResourceData, meta interfac output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), groupMapList); e != nil { + if e := tccommon.WriteToFile(output.(string), groupMapList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_group_info.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_group_info.go similarity index 91% rename from tencentcloud/data_source_tc_ckafka_group_info.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_group_info.go index 17edfa817c..c1f9b930d8 100644 --- a/tencentcloud/data_source_tc_ckafka_group_info.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_group_info.go @@ -1,15 +1,18 @@ -package tencentcloud +package ckafka import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaGroupInfo() *schema.Resource { +func DataSourceTencentCloudCkafkaGroupInfo() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaGroupInfoRead, Schema: map[string]*schema.Schema{ @@ -133,12 +136,12 @@ func dataSourceTencentCloudCkafkaGroupInfo() *schema.Resource { } func dataSourceTencentCloudCkafkaGroupInfoRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_group_info.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_group_info.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { @@ -150,14 +153,14 @@ func dataSourceTencentCloudCkafkaGroupInfoRead(d *schema.ResourceData, meta inte paramMap["group_list"] = helper.InterfacesStringsPoint(groupListSet) } - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result []*ckafka.GroupInfoResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { groupInfo, e := service.DescribeCkafkaGroupInfoByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = groupInfo return nil @@ -255,7 +258,7 @@ func dataSourceTencentCloudCkafkaGroupInfoRead(d *schema.ResourceData, meta inte d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_group_info_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_group_info_test.go similarity index 55% rename from tencentcloud/data_source_tc_ckafka_group_info_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_group_info_test.go index 53e69dc1b1..fb224feb41 100644 --- a/tencentcloud/data_source_tc_ckafka_group_info_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_group_info_test.go @@ -1,20 +1,22 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaGroupInfoDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaGroupInfoDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_group_info.group_info")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_group_info.group_info")), }, }, }) diff --git a/tencentcloud/data_source_tc_ckafka_group_offsets.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_group_offsets.go similarity index 88% rename from tencentcloud/data_source_tc_ckafka_group_offsets.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_group_offsets.go index 0084b38aab..4a1f4836a0 100644 --- a/tencentcloud/data_source_tc_ckafka_group_offsets.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_group_offsets.go @@ -1,15 +1,18 @@ -package tencentcloud +package ckafka import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaGroupOffsets() *schema.Resource { +func DataSourceTencentCloudCkafkaGroupOffsets() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaGroupOffsetsRead, Schema: map[string]*schema.Schema{ @@ -104,12 +107,12 @@ func dataSourceTencentCloudCkafkaGroupOffsets() *schema.Resource { } func dataSourceTencentCloudCkafkaGroupOffsetsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_group_offsets.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_group_offsets.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { @@ -129,14 +132,14 @@ func dataSourceTencentCloudCkafkaGroupOffsetsRead(d *schema.ResourceData, meta i paramMap["search_word"] = helper.String(v.(string)) } - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var groupOffsetTopics []*ckafka.GroupOffsetTopic - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCkafkaGroupOffsetsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } groupOffsetTopics = result return nil @@ -201,7 +204,7 @@ func dataSourceTencentCloudCkafkaGroupOffsetsRead(d *schema.ResourceData, meta i output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), groupOffsetResponseMap); e != nil { + if e := tccommon.WriteToFile(output.(string), groupOffsetResponseMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_group_offsets_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_group_offsets_test.go similarity index 55% rename from tencentcloud/data_source_tc_ckafka_group_offsets_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_group_offsets_test.go index 97d799b581..7bdb08e8de 100644 --- a/tencentcloud/data_source_tc_ckafka_group_offsets_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_group_offsets_test.go @@ -1,20 +1,22 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaGroupOffsetsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaGroupOffsetsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_group_offsets.group_offsets")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_group_offsets.group_offsets")), }, }, }) diff --git a/tencentcloud/data_source_tc_ckafka_group_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_group_test.go similarity index 55% rename from tencentcloud/data_source_tc_ckafka_group_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_group_test.go index b1996195f9..5f6d128969 100644 --- a/tencentcloud/data_source_tc_ckafka_group_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_group_test.go @@ -1,20 +1,22 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaGroupDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaGroupDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_group.group")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_group.group")), }, }, }) diff --git a/tencentcloud/data_source_tc_ckafka_instances.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_instances.go similarity index 97% rename from tencentcloud/data_source_tc_ckafka_instances.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_instances.go index 5f72bf517a..f140b3e948 100644 --- a/tencentcloud/data_source_tc_ckafka_instances.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_instances.go @@ -1,12 +1,14 @@ -package tencentcloud +package ckafka import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaInstances() *schema.Resource { +func DataSourceTencentCloudCkafkaInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaInstancesRead, @@ -267,10 +269,10 @@ func dataSourceTencentCloudCkafkaInstances() *schema.Resource { } func dataSourceTencentCloudCkafkaInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_instances.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_instances.read")() ckafkaService := CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } request := ckafka.NewDescribeInstancesDetailRequest() if v, ok := d.GetOk("instance_ids"); ok { @@ -375,7 +377,7 @@ func dataSourceTencentCloudCkafkaInstancesRead(d *schema.ResourceData, meta inte output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), result); e != nil { + if e := tccommon.WriteToFile(output.(string), result); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_instances_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_instances_test.go similarity index 57% rename from tencentcloud/data_source_tc_ckafka_instances_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_instances_test.go index cf7233740f..d58ee92e96 100644 --- a/tencentcloud/data_source_tc_ckafka_instances_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_instances_test.go @@ -1,29 +1,31 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaInstancesDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCkafkaUserDestroy, Steps: []resource.TestStep{ { Config: testAccTencentCloudDataSourceCkafkaInstances, Check: resource.ComposeAggregateTestCheckFunc( - resource.TestCheckResourceAttr("data.tencentcloud_ckafka_instances.foo", "instance_list.0.instance_id", defaultKafkaInstanceId), + resource.TestCheckResourceAttr("data.tencentcloud_ckafka_instances.foo", "instance_list.0.instance_id", tcacctest.DefaultKafkaInstanceId), ), }, }, }) } -const testAccTencentCloudDataSourceCkafkaInstances = defaultKafkaVariable + ` +const testAccTencentCloudDataSourceCkafkaInstances = tcacctest.DefaultKafkaVariable + ` data "tencentcloud_ckafka_instances" "foo" { instance_ids=[var.instance_id] } diff --git a/tencentcloud/data_source_tc_ckafka_region.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_region.go similarity index 84% rename from tencentcloud/data_source_tc_ckafka_region.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_region.go index 3ab2b486f5..232d6c44bc 100644 --- a/tencentcloud/data_source_tc_ckafka_region.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_region.go @@ -1,16 +1,19 @@ -package tencentcloud +package ckafka import ( "errors" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaRegion() *schema.Resource { +func DataSourceTencentCloudCkafkaRegion() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaRegionRead, Schema: map[string]*schema.Schema{ @@ -74,18 +77,18 @@ func dataSourceTencentCloudCkafkaRegion() *schema.Resource { } func dataSourceTencentCloudCkafkaRegionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_region.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_region.read")() + defer tccommon.InconsistentCheck(d, meta)() var result []*ckafka.Region request := ckafka.NewDescribeRegionRequest() - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseCkafkaClient().DescribeRegion(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCkafkaClient().DescribeRegion(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if response == nil || response.Response == nil { - return retryError(errors.New("Response is null")) + return tccommon.RetryError(errors.New("Response is null")) } result = response.Response.Result return nil @@ -143,7 +146,7 @@ func dataSourceTencentCloudCkafkaRegionRead(d *schema.ResourceData, meta interfa d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_region_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_region_test.go similarity index 51% rename from tencentcloud/data_source_tc_ckafka_region_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_region_test.go index d2fa1879fc..28b15ba1c2 100644 --- a/tencentcloud/data_source_tc_ckafka_region_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_region_test.go @@ -1,20 +1,22 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaRegionDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaRegionDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_region.region")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_region.region")), }, }, }) diff --git a/tencentcloud/data_source_tc_ckafka_task_status.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_task_status.go similarity index 73% rename from tencentcloud/data_source_tc_ckafka_task_status.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_task_status.go index bf3a1e13e9..ba130367f6 100644 --- a/tencentcloud/data_source_tc_ckafka_task_status.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_task_status.go @@ -1,15 +1,17 @@ -package tencentcloud +package ckafka import ( "context" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" ) -func dataSourceTencentCloudCkafkaTaskStatus() *schema.Resource { +func DataSourceTencentCloudCkafkaTaskStatus() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaTaskStatusRead, Schema: map[string]*schema.Schema{ @@ -49,23 +51,23 @@ func dataSourceTencentCloudCkafkaTaskStatus() *schema.Resource { } func dataSourceTencentCloudCkafkaTaskStatusRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_task_status.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_task_status.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) flowId := d.Get("flow_id").(int) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *ckafka.TaskStatusResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, e := service.DescribeCkafkaTaskStatusByFilter(ctx, flowId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = taskStatus return nil @@ -90,7 +92,7 @@ func dataSourceTencentCloudCkafkaTaskStatusRead(d *schema.ResourceData, meta int d.SetId(strconv.Itoa(flowId)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), taskStatusResponseMapList); e != nil { + if e := tccommon.WriteToFile(output.(string), taskStatusResponseMapList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_task_status_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_task_status_test.go similarity index 53% rename from tencentcloud/data_source_tc_ckafka_task_status_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_task_status_test.go index 4dc5569146..c0dd84fbe0 100644 --- a/tencentcloud/data_source_tc_ckafka_task_status_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_task_status_test.go @@ -1,20 +1,22 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaTaskStatusDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaTaskStatusDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_task_status.task_status")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_task_status.task_status")), }, }, }) diff --git a/tencentcloud/data_source_tc_ckafka_topic_flow_ranking.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_flow_ranking.go similarity index 91% rename from tencentcloud/data_source_tc_ckafka_topic_flow_ranking.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_topic_flow_ranking.go index c0248362f5..f40159f0af 100644 --- a/tencentcloud/data_source_tc_ckafka_topic_flow_ranking.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_flow_ranking.go @@ -1,15 +1,18 @@ -package tencentcloud +package ckafka import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaTopicFlowRanking() *schema.Resource { +func DataSourceTencentCloudCkafkaTopicFlowRanking() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaTopicFlowRankingRead, Schema: map[string]*schema.Schema{ @@ -154,12 +157,12 @@ func dataSourceTencentCloudCkafkaTopicFlowRanking() *schema.Resource { } func dataSourceTencentCloudCkafkaTopicFlowRankingRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_topic_flow_ranking.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_topic_flow_ranking.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instanceId string paramMap := make(map[string]interface{}) @@ -180,14 +183,14 @@ func dataSourceTencentCloudCkafkaTopicFlowRankingRead(d *schema.ResourceData, me paramMap["end_date"] = helper.String(v.(string)) } - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *ckafka.TopicFlowRankingResult - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { topicFlowRanking, e := service.DescribeCkafkaTopicFlowRankingByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = topicFlowRanking return nil @@ -294,7 +297,7 @@ func dataSourceTencentCloudCkafkaTopicFlowRankingRead(d *schema.ResourceData, me d.SetId(instanceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), topicFlowRankingResultMapList); e != nil { + if e := tccommon.WriteToFile(output.(string), topicFlowRankingResultMapList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_topic_flow_ranking_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_flow_ranking_test.go similarity index 59% rename from tencentcloud/data_source_tc_ckafka_topic_flow_ranking_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_topic_flow_ranking_test.go index 2dc5e2ad60..465090ea62 100644 --- a/tencentcloud/data_source_tc_ckafka_topic_flow_ranking_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_flow_ranking_test.go @@ -1,20 +1,22 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaTopicFlowRankingDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaTopicFlowRankingDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_topic_flow_ranking.topic_flow_ranking")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_topic_flow_ranking.topic_flow_ranking")), }, }, }) diff --git a/tencentcloud/data_source_tc_ckafka_topic_produce_connection.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_produce_connection.go similarity index 80% rename from tencentcloud/data_source_tc_ckafka_topic_produce_connection.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_topic_produce_connection.go index dc650b53d3..7987859186 100644 --- a/tencentcloud/data_source_tc_ckafka_topic_produce_connection.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_produce_connection.go @@ -1,15 +1,18 @@ -package tencentcloud +package ckafka import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaTopicProduceConnection() *schema.Resource { +func DataSourceTencentCloudCkafkaTopicProduceConnection() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaTopicProduceConnectionRead, Schema: map[string]*schema.Schema{ @@ -60,12 +63,12 @@ func dataSourceTencentCloudCkafkaTopicProduceConnection() *schema.Resource { } func dataSourceTencentCloudCkafkaTopicProduceConnectionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_topic_produce_connection.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_topic_produce_connection.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( instanceId string topicName string @@ -81,14 +84,14 @@ func dataSourceTencentCloudCkafkaTopicProduceConnectionRead(d *schema.ResourceDa paramMap["topic_name"] = helper.String(topicName) } - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result []*ckafka.DescribeConnectInfoResultDTO - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { topicProduceConnection, e := service.DescribeCkafkaTopicProduceConnectionByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = topicProduceConnection return nil @@ -121,11 +124,11 @@ func dataSourceTencentCloudCkafkaTopicProduceConnectionRead(d *schema.ResourceDa _ = d.Set("result", tmpList) } - d.SetId(instanceId + FILED_SP + topicName) + d.SetId(instanceId + tccommon.FILED_SP + topicName) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_topic_produce_connection_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_produce_connection_test.go similarity index 57% rename from tencentcloud/data_source_tc_ckafka_topic_produce_connection_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_topic_produce_connection_test.go index 06068ed901..0c07e44efa 100644 --- a/tencentcloud/data_source_tc_ckafka_topic_produce_connection_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_produce_connection_test.go @@ -1,20 +1,22 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaTopicProduceConnectionDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaTopicProduceConnectionDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_topic_produce_connection.topic_produce_connection")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_topic_produce_connection.topic_produce_connection")), }, }, }) diff --git a/tencentcloud/data_source_tc_ckafka_topic_subscribe_group.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_subscribe_group.go similarity index 91% rename from tencentcloud/data_source_tc_ckafka_topic_subscribe_group.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_topic_subscribe_group.go index a846553025..9bf33c4b07 100644 --- a/tencentcloud/data_source_tc_ckafka_topic_subscribe_group.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_subscribe_group.go @@ -1,15 +1,18 @@ -package tencentcloud +package ckafka import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaTopicSubscribeGroup() *schema.Resource { +func DataSourceTencentCloudCkafkaTopicSubscribeGroup() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaTopicSubscribeGroupRead, Schema: map[string]*schema.Schema{ @@ -130,12 +133,12 @@ func dataSourceTencentCloudCkafkaTopicSubscribeGroup() *schema.Resource { } func dataSourceTencentCloudCkafkaTopicSubscribeGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_topic_subscribe_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_topic_subscribe_group.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { @@ -146,14 +149,14 @@ func dataSourceTencentCloudCkafkaTopicSubscribeGroupRead(d *schema.ResourceData, paramMap["TopicName"] = helper.String(v.(string)) } - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result []*ckafka.GroupInfoResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { groupInfos, e := service.DescribeCkafkaTopicSubscribeGroupByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = groupInfos return nil @@ -250,7 +253,7 @@ func dataSourceTencentCloudCkafkaTopicSubscribeGroupRead(d *schema.ResourceData, d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), groupsInfoList); e != nil { + if e := tccommon.WriteToFile(output.(string), groupsInfoList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_topic_subscribe_group_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_subscribe_group_test.go similarity index 56% rename from tencentcloud/data_source_tc_ckafka_topic_subscribe_group_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_topic_subscribe_group_test.go index 6ef0e6aaa3..49bbb5adca 100644 --- a/tencentcloud/data_source_tc_ckafka_topic_subscribe_group_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_subscribe_group_test.go @@ -1,20 +1,22 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaTopicSubscribeGroupDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaTopicSubscribeGroupDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_topic_subscribe_group.topic_subscribe_group")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_topic_subscribe_group.topic_subscribe_group")), }, }, }) diff --git a/tencentcloud/data_source_tc_ckafka_topic_sync_replica.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_sync_replica.go similarity index 86% rename from tencentcloud/data_source_tc_ckafka_topic_sync_replica.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_topic_sync_replica.go index 01e91b31b5..b4e667f6b3 100644 --- a/tencentcloud/data_source_tc_ckafka_topic_sync_replica.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_sync_replica.go @@ -1,15 +1,18 @@ -package tencentcloud +package ckafka import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaTopicSyncReplica() *schema.Resource { +func DataSourceTencentCloudCkafkaTopicSyncReplica() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaTopicSyncReplicaRead, Schema: map[string]*schema.Schema{ @@ -91,12 +94,12 @@ func dataSourceTencentCloudCkafkaTopicSyncReplica() *schema.Resource { } func dataSourceTencentCloudCkafkaTopicSyncReplicaRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_topic_sync_replica.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_topic_sync_replica.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { paramMap["instance_id"] = helper.String(v.(string)) @@ -110,14 +113,14 @@ func dataSourceTencentCloudCkafkaTopicSyncReplicaRead(d *schema.ResourceData, me paramMap["out_of_sync_replica_only"] = helper.Bool(v.(bool)) } - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result []*ckafka.TopicInSyncReplicaInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { topicInSyncReplicaInfos, e := service.DescribeCkafkaTopicSyncReplicaByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = topicInSyncReplicaInfos return nil @@ -173,7 +176,7 @@ func dataSourceTencentCloudCkafkaTopicSyncReplicaRead(d *schema.ResourceData, me d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), topicInSyncReplicaList); e != nil { + if e := tccommon.WriteToFile(output.(string), topicInSyncReplicaList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_topic_sync_replica_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_sync_replica_test.go similarity index 56% rename from tencentcloud/data_source_tc_ckafka_topic_sync_replica_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_topic_sync_replica_test.go index 5aae33728f..d5fa73e133 100644 --- a/tencentcloud/data_source_tc_ckafka_topic_sync_replica_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_topic_sync_replica_test.go @@ -1,20 +1,22 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaTopicSyncReplicaDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaTopicSyncReplicaDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_topic_sync_replica.topic_sync_replica")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_topic_sync_replica.topic_sync_replica")), }, }, }) diff --git a/tencentcloud/data_source_tc_ckafka_topics.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_topics.go similarity index 91% rename from tencentcloud/data_source_tc_ckafka_topics.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_topics.go index 0efa71efea..a417ca360a 100644 --- a/tencentcloud/data_source_tc_ckafka_topics.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_topics.go @@ -1,14 +1,17 @@ -package tencentcloud +package ckafka import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaTopics() *schema.Resource { +func DataSourceTencentCloudCkafkaTopics() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaTopicsRead, @@ -21,7 +24,7 @@ func dataSourceTencentCloudCkafkaTopics() *schema.Resource { "topic_name": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 64), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 64), Description: "Name of the CKafka topic. It must start with a letter, the rest can contain letters, numbers and dashes(-). The length range is from 1 to 64.", }, "result_output_file": { @@ -133,14 +136,14 @@ func dataSourceTencentCloudCkafkaTopics() *schema.Resource { } func dataSourceTencentCloudCkafkaTopicsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_topics.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_topics.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instanceId := d.Get("instance_id").(string) topicName := d.Get("topic_name").(string) ckafkcService := CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } topicDetails, err := ckafkcService.DescribeCkafkaTopics(ctx, instanceId, topicName) if err != nil { @@ -175,7 +178,7 @@ func dataSourceTencentCloudCkafkaTopicsRead(d *schema.ResourceData, meta interfa "segment": topic.Config.SegmentMs, "segment_bytes": topic.Config.SegmentBytes, } - resourceId := instanceId + FILED_SP + *topic.TopicName + resourceId := instanceId + tccommon.FILED_SP + *topic.TopicName instanceList = append(instanceList, instance) ids = append(ids, resourceId) } @@ -188,7 +191,7 @@ func dataSourceTencentCloudCkafkaTopicsRead(d *schema.ResourceData, meta interfa output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), instanceList); err != nil { + if err := tccommon.WriteToFile(output.(string), instanceList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_ckafka_topics_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_topics_test.go similarity index 91% rename from tencentcloud/data_source_tc_ckafka_topics_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_topics_test.go index fd5ec355aa..b8b4932fab 100644 --- a/tencentcloud/data_source_tc_ckafka_topics_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_topics_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaTopicDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudKafkaTopicDestory, Steps: []resource.TestStep{ { @@ -40,7 +42,7 @@ func TestAccTencentCloudCkafkaTopicDataSource(t *testing.T) { }) } -const testAccTencentCloudCkafkaTopicDataSourceConfig = defaultKafkaVariable + ` +const testAccTencentCloudCkafkaTopicDataSourceConfig = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_topic" "kafka_topic" { instance_id = var.instance_id topic_name = "ckafkaTopic-tf-test" diff --git a/tencentcloud/data_source_tc_ckafka_users.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_users.go similarity index 80% rename from tencentcloud/data_source_tc_ckafka_users.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_users.go index 072dffb461..00e50316b8 100644 --- a/tencentcloud/data_source_tc_ckafka_users.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_users.go @@ -1,13 +1,16 @@ -package tencentcloud +package ckafka import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaUsers() *schema.Resource { +func DataSourceTencentCloudCkafkaUsers() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaUsersRead, @@ -56,10 +59,10 @@ func dataSourceTencentCloudCkafkaUsers() *schema.Resource { } func dataSourceTencentCloudCkafkaUsersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_users.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_users.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]interface{}) params["instance_id"] = d.Get("instance_id").(string) @@ -68,7 +71,7 @@ func dataSourceTencentCloudCkafkaUsersRead(d *schema.ResourceData, meta interfac } ckafkaService := CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } userInfos, err := ckafkaService.DescribeUserByFilter(ctx, params) if err != nil { @@ -83,7 +86,7 @@ func dataSourceTencentCloudCkafkaUsersRead(d *schema.ResourceData, meta interfac "update_time": *user.UpdateTime, }) - ids = append(ids, params["instance_id"].(string)+FILED_SP+*user.Name) + ids = append(ids, params["instance_id"].(string)+tccommon.FILED_SP+*user.Name) } d.SetId(helper.DataResourceIdsHash(ids)) @@ -91,7 +94,7 @@ func dataSourceTencentCloudCkafkaUsersRead(d *schema.ResourceData, meta interfac output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), userList); e != nil { + if e := tccommon.WriteToFile(output.(string), userList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_users_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_users_test.go similarity index 78% rename from tencentcloud/data_source_tc_ckafka_users_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_users_test.go index 6bd767f33c..92368eb74e 100644 --- a/tencentcloud/data_source_tc_ckafka_users_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_users_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaUsersDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCkafkaUserDestroy, Steps: []resource.TestStep{ { @@ -27,7 +29,7 @@ func TestAccTencentCloudCkafkaUsersDataSource(t *testing.T) { }) } -const testAccTencentCloudDataSourceCkafkaUser = defaultKafkaVariable + ` +const testAccTencentCloudDataSourceCkafkaUser = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_user" "foo" { instance_id = var.instance_id account_name = "test1" diff --git a/tencentcloud/data_source_tc_ckafka_zone.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_zone.go similarity index 94% rename from tencentcloud/data_source_tc_ckafka_zone.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_zone.go index 34cac4010e..0686180eb1 100644 --- a/tencentcloud/data_source_tc_ckafka_zone.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_zone.go @@ -1,15 +1,18 @@ -package tencentcloud +package ckafka import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCkafkaZone() *schema.Resource { +func DataSourceTencentCloudCkafkaZone() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCkafkaZoneRead, Schema: map[string]*schema.Schema{ @@ -247,26 +250,26 @@ func dataSourceTencentCloudCkafkaZone() *schema.Resource { } func dataSourceTencentCloudCkafkaZoneRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_ckafka_zone.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_ckafka_zone.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("cdc_id"); ok { paramMap["CdcId"] = helper.String(v.(string)) } - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result *ckafka.ZoneResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeCkafkaCkafkaZoneByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -460,7 +463,7 @@ func dataSourceTencentCloudCkafkaZoneRead(d *schema.ResourceData, meta interface d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), zoneResponseMapList); e != nil { + if e := tccommon.WriteToFile(output.(string), zoneResponseMapList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_ckafka_zone_test.go b/tencentcloud/services/ckafka/data_source_tc_ckafka_zone_test.go similarity index 52% rename from tencentcloud/data_source_tc_ckafka_zone_test.go rename to tencentcloud/services/ckafka/data_source_tc_ckafka_zone_test.go index 131bc32021..848ee4d84e 100644 --- a/tencentcloud/data_source_tc_ckafka_zone_test.go +++ b/tencentcloud/services/ckafka/data_source_tc_ckafka_zone_test.go @@ -1,20 +1,22 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaCkafkaZoneDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaCkafkaZoneDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_zone.ckafka_zone")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ckafka_zone.ckafka_zone")), }, }, }) diff --git a/tencentcloud/services/ckafka/extension_ckafka.go b/tencentcloud/services/ckafka/extension_ckafka.go new file mode 100644 index 0000000000..5ae080e86c --- /dev/null +++ b/tencentcloud/services/ckafka/extension_ckafka.go @@ -0,0 +1,90 @@ +package ckafka + +const ( + CKAFKA_DESCRIBE_LIMIT = 50 + CKAFKA_ACL_PRINCIPAL_STR = "User:" +) + +var CKAFKA_INSTANCE_TYPE = map[string]int64{ + "general": 1, + "standard": 2, + "advanced": 3, + "capacity": 4, + "specialized-1": 5, + "specialized-2": 6, + "specialized-3": 7, + "specialized-4": 8, + "exclusive": 9, +} + +var CKAFKA_ACL_RESOURCE_TYPE = map[string]int64{ + "UNKNOWN": 0, + "ANY": 1, + "TOPIC": 2, + "GROUP": 3, + "CLUSTER": 4, + "TRANSACTIONAL_ID": 5, +} + +var CKAFKA_ACL_RESOURCE_TYPE_TO_STRING = map[int64]string{ + 0: "UNKNOWN", + 1: "ANY", + 2: "TOPIC", + 3: "GROUP", + 4: "CLUSTER", + 5: "TRANSACTIONAL_ID", +} + +var CKAFKA_ACL_OPERATION = map[string]int64{ + "UNKNOWN": 0, + "ANY": 1, + "ALL": 2, + "READ": 3, + "WRITE": 4, + "CREATE": 5, + "DELETE": 6, + "ALTER": 7, + "DESCRIBE": 8, + "CLUSTER_ACTION": 9, + "DESCRIBE_CONFIGS": 10, + "ALTER_CONFIGS": 11, + "IDEMPOTEN_WRITE": 12, +} +var CKAFKA_ACL_OPERATION_TO_STRING = map[int64]string{ + 0: "UNKNOWN", + 1: "ANY", + 2: "ALL", + 3: "READ", + 4: "WRITE", + 5: "CREATE", + 6: "DELETE", + 7: "ALTER", + 8: "DESCRIBE", + 9: "CLUSTER_ACTION", + 10: "DESCRIBE_CONFIGS", + 11: "ALTER_CONFIGS", + 12: "IDEMPOTEN_WRITE", +} + +var CKAFKA_PERMISSION_TYPE = map[string]int64{ + "UNKNOWN": 0, + "ANY": 1, + "DENY": 2, + "ALLOW": 3, +} + +var CKAFKA_PERMISSION_TYPE_TO_STRING = map[int64]string{ + 0: "UNKNOWN", + 1: "ANY", + 2: "DENY", + 3: "ALLOW", +} + +// sdk ckafka not found error +const CkafkaInstanceNotFound = "InvalidParameterValue.InstanceNotExist" +const CkafkaFailedOperation = "FailedOperation" + +const ( + CKAFKA_CHARGE_TYPE_POSTPAID = COMMON_PAYTYPE_POSTPAID + CKAFKA_CHARGE_TYPE_PREPAID = COMMON_PAYTYPE_PREPAID +) diff --git a/tencentcloud/services/ckafka/extension_postgresql.go b/tencentcloud/services/ckafka/extension_postgresql.go new file mode 100644 index 0000000000..1c504c7242 --- /dev/null +++ b/tencentcloud/services/ckafka/extension_postgresql.go @@ -0,0 +1,57 @@ +package ckafka + +const ( + POSTGRESQL_PAYTYPE_PREPAID = "prepaid" + POSTGRESQL_PAYTYPE_POSTPAID = "postpaid" +) + +const ( + COMMON_PAYTYPE_PREPAID = "PREPAID" + COMMON_PAYTYPE_POSTPAID = "POSTPAID_BY_HOUR" +) + +var POSTGRESQL_PAYTYPE = []string{COMMON_PAYTYPE_POSTPAID} + +const ( + POSTGRESQL_DB_VERSION_9_3_5 = "9.3.5" + POSTGRESQL_DB_VERSION_9_5_4 = "9.5.4" + POSTGRESQL_DB_VERSION_10_4 = "10.4" +) + +const ( + POSTGRESQL_KERNEL_UPGRADE_IMMEDIATELY = 0 + POSTGRESQL_KERNEL_UPGRADE_SPECIFIED_TIME = 1 + POSTGRESQL_KERNEL_UPGRADE_MAINTAIN_WINDOW = 2 +) + +var POSTSQL_DB_VERSION = []string{POSTGRESQL_DB_VERSION_9_3_5, POSTGRESQL_DB_VERSION_9_5_4, POSTGRESQL_DB_VERSION_10_4} + +const ( + POSTGRESQL_DB_CHARSET_UTF8 = "UTF8" + POSTGRESQL_DB_CHARSET_LATIN1 = "LATIN1" +) + +var POSTGRESQL_DB_CHARSET = []string{POSTGRESQL_DB_CHARSET_UTF8, POSTGRESQL_DB_CHARSET_LATIN1} + +const ( + POSTGRESQL_STAUTS_RUNNING = "running" + POSTGRESQL_STAUTS_ISOLATED = "isolated" +) + +var POSTGRESQL_RETRYABLE_STATUS = []string{ + "initing", + "expanding", + "switching", + // deployment changing not exposed at response struct but actually exists + "deployment changing", +} + +const ( + SYNC_MODE_SEMI = "Semi-sync" + SYNC_MODE_ASYNC = "Async" +) + +var SYNC_MODE = []string{ + SYNC_MODE_SEMI, + SYNC_MODE_ASYNC, +} diff --git a/tencentcloud/services/ckafka/extension_tags.go b/tencentcloud/services/ckafka/extension_tags.go new file mode 100644 index 0000000000..29c3336e4f --- /dev/null +++ b/tencentcloud/services/ckafka/extension_tags.go @@ -0,0 +1,3 @@ +package ckafka + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/resource_tc_ckafka_acl.go b/tencentcloud/services/ckafka/resource_tc_ckafka_acl.go similarity index 78% rename from tencentcloud/resource_tc_ckafka_acl.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_acl.go index 1cca4e3ce6..2b5da8b99b 100644 --- a/tencentcloud/resource_tc_ckafka_acl.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_acl.go @@ -1,14 +1,16 @@ -package tencentcloud +package ckafka import ( "context" "fmt" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudCkafkaAcl() *schema.Resource { +func ResourceTencentCloudCkafkaAcl() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCkafkaAclCreate, Read: resourceTencentCloudCkafkaAclRead, @@ -69,10 +71,10 @@ func resourceTencentCloudCkafkaAcl() *schema.Resource { } func resourceTencentCloudCkafkaAclCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_acl.create")() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_acl.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instanceId := d.Get("instance_id").(string) resourceType := d.Get("resource_type").(string) @@ -83,24 +85,24 @@ func resourceTencentCloudCkafkaAclCreate(d *schema.ResourceData, meta interface{ principal := d.Get("principal").(string) ckafkaService := CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if err := ckafkaService.CreateAcl(ctx, instanceId, resourceType, resourceName, operation, permissionType, host, principal); err != nil { return fmt.Errorf("[CRITAL]%s create ckafka user failed, reason:%+v", logId, err) } - d.SetId(instanceId + FILED_SP + permissionType + FILED_SP + principal + FILED_SP + host + FILED_SP + operation + FILED_SP + resourceType + FILED_SP + resourceName) + d.SetId(instanceId + tccommon.FILED_SP + permissionType + tccommon.FILED_SP + principal + tccommon.FILED_SP + host + tccommon.FILED_SP + operation + tccommon.FILED_SP + resourceType + tccommon.FILED_SP + resourceName) return resourceTencentCloudCkafkaAclRead(d, meta) } func resourceTencentCloudCkafkaAclRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_acl.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_acl.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) ckafkaService := CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } id := d.Id() @@ -112,7 +114,7 @@ func resourceTencentCloudCkafkaAclRead(d *schema.ResourceData, meta interface{}) d.SetId("") return nil } - items := strings.Split(id, FILED_SP) + items := strings.Split(id, tccommon.FILED_SP) _ = d.Set("instance_id", items[0]) _ = d.Set("resource_type", CKAFKA_ACL_RESOURCE_TYPE_TO_STRING[*info.ResourceType]) _ = d.Set("resource_name", info.ResourceName) @@ -125,12 +127,12 @@ func resourceTencentCloudCkafkaAclRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudCkafkaAclDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_user.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_user.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) ckafkaService := CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if err := ckafkaService.DeleteAcl(ctx, d.Id()); err != nil { diff --git a/tencentcloud/resource_tc_ckafka_acl_rule.go b/tencentcloud/services/ckafka/resource_tc_ckafka_acl_rule.go similarity index 81% rename from tencentcloud/resource_tc_ckafka_acl_rule.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_acl_rule.go index a4b569a6e6..1d13f7c433 100644 --- a/tencentcloud/resource_tc_ckafka_acl_rule.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_acl_rule.go @@ -1,4 +1,4 @@ -package tencentcloud +package ckafka import ( "context" @@ -7,13 +7,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCkafkaAclRule() *schema.Resource { +func ResourceTencentCloudCkafkaAclRule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCkafkaAclRuleCreate, Read: resourceTencentCloudCkafkaAclRuleRead, @@ -103,10 +106,10 @@ func resourceTencentCloudCkafkaAclRule() *schema.Resource { } func resourceTencentCloudCkafkaAclRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_acl_rule.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_acl_rule.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ckafka.NewCreateAclRuleRequest() @@ -159,10 +162,10 @@ func resourceTencentCloudCkafkaAclRuleCreate(d *schema.ResourceData, meta interf request.IsApplied = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCkafkaClient().CreateAclRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCkafkaClient().CreateAclRule(request) if e != nil { - return retryError(e) + 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()) } @@ -173,22 +176,22 @@ func resourceTencentCloudCkafkaAclRuleCreate(d *schema.ResourceData, meta interf return err } - d.SetId(instanceId + FILED_SP + ruleName) + d.SetId(instanceId + tccommon.FILED_SP + ruleName) return resourceTencentCloudCkafkaAclRuleRead(d, meta) } func resourceTencentCloudCkafkaAclRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_acl_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_acl_rule.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -267,14 +270,14 @@ func resourceTencentCloudCkafkaAclRuleRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudCkafkaAclRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_acl_rule.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_acl_rule.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := ckafka.NewModifyAclRuleRequest() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -296,10 +299,10 @@ func resourceTencentCloudCkafkaAclRuleUpdate(d *schema.ResourceData, meta interf if !hasChange { return resourceTencentCloudCkafkaAclRuleRead(d, meta) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCkafkaClient().ModifyAclRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCkafkaClient().ModifyAclRule(request) if e != nil { - return retryError(e) + 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()) } @@ -314,14 +317,14 @@ func resourceTencentCloudCkafkaAclRuleUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudCkafkaAclRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_acl_rule.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_acl_rule.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ckafka_acl_rule_test.go b/tencentcloud/services/ckafka/resource_tc_ckafka_acl_rule_test.go similarity index 87% rename from tencentcloud/resource_tc_ckafka_acl_rule_test.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_acl_rule_test.go index 5887340eb4..e23af15613 100644 --- a/tencentcloud/resource_tc_ckafka_acl_rule_test.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_acl_rule_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaAclRuleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaAclRule, diff --git a/tencentcloud/resource_tc_ckafka_acl_test.go b/tencentcloud/services/ckafka/resource_tc_ckafka_acl_test.go similarity index 77% rename from tencentcloud/resource_tc_ckafka_acl_test.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_acl_test.go index a6c64ab7d6..76d117f810 100644 --- a/tencentcloud/resource_tc_ckafka_acl_test.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_acl_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ckafka_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localckafka "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ckafka" + "context" "fmt" "testing" @@ -12,8 +16,8 @@ import ( func TestAccTencentCloudCkafkaAclResource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCkafkaAclDestroy, Steps: []resource.TestStep{ { @@ -40,11 +44,9 @@ func TestAccTencentCloudCkafkaAclResource(t *testing.T) { func testAccCheckCkafkaAclExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - ckafkaService := CkafkaService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ckafkaService := localckafka.NewCkafkaService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[n] if !ok { @@ -66,11 +68,9 @@ func testAccCheckCkafkaAclExists(n string) resource.TestCheckFunc { } func testAccCheckCkafkaAclDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - ckafkaService := CkafkaService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ckafkaService := localckafka.NewCkafkaService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ckafka_acl" { @@ -89,7 +89,7 @@ func testAccCheckCkafkaAclDestroy(s *terraform.State) error { return nil } -const testAccCkafkaAcl = defaultKafkaVariable + ` +const testAccCkafkaAcl = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_user" "foo" { instance_id = var.instance_id account_name = "tf-test-acl-resource" diff --git a/tencentcloud/resource_tc_ckafka_connect_resource.go b/tencentcloud/services/ckafka/resource_tc_ckafka_connect_resource.go similarity index 96% rename from tencentcloud/resource_tc_ckafka_connect_resource.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_connect_resource.go index 12461cb41e..9e2471ca52 100644 --- a/tencentcloud/resource_tc_ckafka_connect_resource.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_connect_resource.go @@ -1,17 +1,20 @@ -package tencentcloud +package ckafka import ( "context" "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCkafkaConnectResource() *schema.Resource { +func ResourceTencentCloudCkafkaConnectResource() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCkafkaConnectResourceCreate, Read: resourceTencentCloudCkafkaConnectResourceRead, @@ -553,10 +556,10 @@ func resourceTencentCloudCkafkaConnectResource() *schema.Resource { } func resourceTencentCloudCkafkaConnectResourceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_connect_resource.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_connect_resource.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ckafka.NewCreateConnectResourceRequest() @@ -856,10 +859,10 @@ func resourceTencentCloudCkafkaConnectResourceCreate(d *schema.ResourceData, met request.KafkaConnectParam = &kafkaConnectParam } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCkafkaClient().CreateConnectResource(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCkafkaClient().CreateConnectResource(request) if e != nil { - return retryError(e) + 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()) } @@ -874,9 +877,9 @@ func resourceTencentCloudCkafkaConnectResourceCreate(d *schema.ResourceData, met resourceId = *response.Response.Result.ResourceId d.SetId(resourceId) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - conf := BuildStateChangeConf([]string{}, []string{"1"}, 2*readRetryTimeout, time.Second, service.CkafkaConnectResourceStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"1"}, 2*tccommon.ReadRetryTimeout, time.Second, service.CkafkaConnectResourceStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -886,14 +889,14 @@ func resourceTencentCloudCkafkaConnectResourceCreate(d *schema.ResourceData, met } func resourceTencentCloudCkafkaConnectResourceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_connect_resource.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_connect_resource.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} resourceId := d.Id() @@ -1345,10 +1348,10 @@ func resourceTencentCloudCkafkaConnectResourceRead(d *schema.ResourceData, meta } func resourceTencentCloudCkafkaConnectResourceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_connect_resource.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_connect_resource.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := ckafka.NewModifyConnectResourceRequest() @@ -1669,10 +1672,10 @@ func resourceTencentCloudCkafkaConnectResourceUpdate(d *schema.ResourceData, met } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCkafkaClient().ModifyConnectResource(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCkafkaClient().ModifyConnectResource(request) if e != nil { - return retryError(e) + 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()) } @@ -1683,9 +1686,9 @@ func resourceTencentCloudCkafkaConnectResourceUpdate(d *schema.ResourceData, met return err } - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - conf := BuildStateChangeConf([]string{}, []string{"1"}, 2*readRetryTimeout, time.Second, service.CkafkaConnectResourceStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"1"}, 2*tccommon.ReadRetryTimeout, time.Second, service.CkafkaConnectResourceStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -1695,13 +1698,13 @@ func resourceTencentCloudCkafkaConnectResourceUpdate(d *schema.ResourceData, met } func resourceTencentCloudCkafkaConnectResourceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_connect_resource.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_connect_resource.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} resourceId := d.Id() if err := service.DeleteCkafkaConnectResourceById(ctx, resourceId); err != nil { diff --git a/tencentcloud/resource_tc_ckafka_connect_resource_test.go b/tencentcloud/services/ckafka/resource_tc_ckafka_connect_resource_test.go similarity index 86% rename from tencentcloud/resource_tc_ckafka_connect_resource_test.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_connect_resource_test.go index bea5a4fef8..ee2f9c2867 100644 --- a/tencentcloud/resource_tc_ckafka_connect_resource_test.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_connect_resource_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixCkafkaConnectResourceResource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaConnectResource, diff --git a/tencentcloud/resource_tc_ckafka_consumer_group.go b/tencentcloud/services/ckafka/resource_tc_ckafka_consumer_group.go similarity index 71% rename from tencentcloud/resource_tc_ckafka_consumer_group.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_consumer_group.go index 00f5f85084..92598e3db5 100644 --- a/tencentcloud/resource_tc_ckafka_consumer_group.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_consumer_group.go @@ -1,4 +1,4 @@ -package tencentcloud +package ckafka import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCkafkaConsumerGroup() *schema.Resource { +func ResourceTencentCloudCkafkaConsumerGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCkafkaConsumerGroupCreate, Read: resourceTencentCloudCkafkaConsumerGroupRead, @@ -49,10 +52,10 @@ func resourceTencentCloudCkafkaConsumerGroup() *schema.Resource { } func resourceTencentCloudCkafkaConsumerGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_consumer_group.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_consumer_group.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ckafka.NewCreateConsumerRequest() @@ -77,10 +80,10 @@ func resourceTencentCloudCkafkaConsumerGroupCreate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCkafkaClient().CreateConsumer(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCkafkaClient().CreateConsumer(request) if e != nil { - return retryError(e) + 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()) } @@ -91,22 +94,22 @@ func resourceTencentCloudCkafkaConsumerGroupCreate(d *schema.ResourceData, meta return err } - d.SetId(instanceId + FILED_SP + groupName) + d.SetId(instanceId + tccommon.FILED_SP + groupName) return resourceTencentCloudCkafkaConsumerGroupRead(d, meta) } func resourceTencentCloudCkafkaConsumerGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_consumer_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_consumer_group.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -139,14 +142,14 @@ func resourceTencentCloudCkafkaConsumerGroupRead(d *schema.ResourceData, meta in } func resourceTencentCloudCkafkaConsumerGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_consumer_group.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_consumer_group.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ckafka_consumer_group_modify_offset.go b/tencentcloud/services/ckafka/resource_tc_ckafka_consumer_group_modify_offset.go similarity index 85% rename from tencentcloud/resource_tc_ckafka_consumer_group_modify_offset.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_consumer_group_modify_offset.go index a4f1e33d3a..9977c2b0f9 100644 --- a/tencentcloud/resource_tc_ckafka_consumer_group_modify_offset.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_consumer_group_modify_offset.go @@ -1,15 +1,18 @@ -package tencentcloud +package ckafka import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCkafkaConsumerGroupModifyOffset() *schema.Resource { +func ResourceTencentCloudCkafkaConsumerGroupModifyOffset() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCkafkaConsumerGroupModifyOffsetCreate, Read: resourceTencentCloudCkafkaConsumerGroupModifyOffsetRead, @@ -84,10 +87,10 @@ func resourceTencentCloudCkafkaConsumerGroupModifyOffset() *schema.Resource { } func resourceTencentCloudCkafkaConsumerGroupModifyOffsetCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_consumer_group_modify_offset.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_consumer_group_modify_offset.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ckafka.NewModifyGroupOffsetsRequest() @@ -136,10 +139,10 @@ func resourceTencentCloudCkafkaConsumerGroupModifyOffsetCreate(d *schema.Resourc } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCkafkaClient().ModifyGroupOffsets(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCkafkaClient().ModifyGroupOffsets(request) if e != nil { - return retryError(e) + 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()) } @@ -150,21 +153,21 @@ func resourceTencentCloudCkafkaConsumerGroupModifyOffsetCreate(d *schema.Resourc return err } - d.SetId(instanceId + FILED_SP + group) + d.SetId(instanceId + tccommon.FILED_SP + group) return resourceTencentCloudCkafkaConsumerGroupModifyOffsetRead(d, meta) } func resourceTencentCloudCkafkaConsumerGroupModifyOffsetRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_consumer_group_modify_offset.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_consumer_group_modify_offset.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCkafkaConsumerGroupModifyOffsetDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_consumer_group_modify_offset.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_consumer_group_modify_offset.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_ckafka_consumer_group_modify_offset_test.go b/tencentcloud/services/ckafka/resource_tc_ckafka_consumer_group_modify_offset_test.go similarity index 75% rename from tencentcloud/resource_tc_ckafka_consumer_group_modify_offset_test.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_consumer_group_modify_offset_test.go index 2b9fbec2a4..581441079a 100644 --- a/tencentcloud/resource_tc_ckafka_consumer_group_modify_offset_test.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_consumer_group_modify_offset_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaConsumerGroupModifyOffsetResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaConsumerGroupModifyOffset, diff --git a/tencentcloud/resource_tc_ckafka_consumer_group_test.go b/tencentcloud/services/ckafka/resource_tc_ckafka_consumer_group_test.go similarity index 76% rename from tencentcloud/resource_tc_ckafka_consumer_group_test.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_consumer_group_test.go index a112abd55e..1f02dfae87 100644 --- a/tencentcloud/resource_tc_ckafka_consumer_group_test.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_consumer_group_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaConsumerGroupResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaConsumerGroup, diff --git a/tencentcloud/resource_tc_ckafka_datahub_task.go b/tencentcloud/services/ckafka/resource_tc_ckafka_datahub_task.go similarity index 99% rename from tencentcloud/resource_tc_ckafka_datahub_task.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_datahub_task.go index 9661881eae..a8e71a35f0 100644 --- a/tencentcloud/resource_tc_ckafka_datahub_task.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_datahub_task.go @@ -1,17 +1,20 @@ -package tencentcloud +package ckafka import ( "context" "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCkafkaDatahubTask() *schema.Resource { +func ResourceTencentCloudCkafkaDatahubTask() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCkafkaDatahubTaskCreate, Read: resourceTencentCloudCkafkaDatahubTaskRead, @@ -4676,10 +4679,10 @@ func resourceTencentCloudCkafkaDatahubTask() *schema.Resource { } func resourceTencentCloudCkafkaDatahubTaskCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_datahub_task.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_datahub_task.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ckafka.NewCreateDatahubTaskRequest() @@ -7298,10 +7301,10 @@ func resourceTencentCloudCkafkaDatahubTaskCreate(d *schema.ResourceData, meta in request.TaskId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCkafkaClient().CreateDatahubTask(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCkafkaClient().CreateDatahubTask(request) if e != nil { - return retryError(e) + 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()) } @@ -7316,9 +7319,9 @@ func resourceTencentCloudCkafkaDatahubTaskCreate(d *schema.ResourceData, meta in taskId = *response.Response.Result.TaskId d.SetId(taskId) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - conf := BuildStateChangeConf([]string{}, []string{"1"}, 2*readRetryTimeout, time.Second, service.CkafkaDatahubTaskStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"1"}, 2*tccommon.ReadRetryTimeout, time.Second, service.CkafkaDatahubTaskStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -7328,14 +7331,14 @@ func resourceTencentCloudCkafkaDatahubTaskCreate(d *schema.ResourceData, meta in } func resourceTencentCloudCkafkaDatahubTaskRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_datahub_task.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_datahub_task.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} taskId := d.Id() @@ -10931,10 +10934,10 @@ func resourceTencentCloudCkafkaDatahubTaskRead(d *schema.ResourceData, meta inte } func resourceTencentCloudCkafkaDatahubTaskUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_datahub_task.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_datahub_task.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := ckafka.NewModifyDatahubTaskRequest() taskId := d.Id() @@ -10950,10 +10953,10 @@ func resourceTencentCloudCkafkaDatahubTaskUpdate(d *schema.ResourceData, meta in if !hasChange { return resourceTencentCloudCkafkaDatahubTaskRead(d, meta) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCkafkaClient().ModifyDatahubTask(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCkafkaClient().ModifyDatahubTask(request) if e != nil { - return retryError(e) + 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()) } @@ -10964,9 +10967,9 @@ func resourceTencentCloudCkafkaDatahubTaskUpdate(d *schema.ResourceData, meta in return err } - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - conf := BuildStateChangeConf([]string{}, []string{"1"}, 2*readRetryTimeout, time.Second, service.CkafkaDatahubTaskStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"1"}, 2*tccommon.ReadRetryTimeout, time.Second, service.CkafkaDatahubTaskStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -10976,20 +10979,20 @@ func resourceTencentCloudCkafkaDatahubTaskUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudCkafkaDatahubTaskDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_datahub_task.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_datahub_task.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} taskId := d.Id() if err := service.DeleteCkafkaDatahubTaskById(ctx, taskId); err != nil { return err } - conf := BuildStateChangeConf([]string{}, []string{"3"}, 2*readRetryTimeout, time.Second, service.CkafkaDatahubTaskStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"3"}, 2*tccommon.ReadRetryTimeout, time.Second, service.CkafkaDatahubTaskStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e diff --git a/tencentcloud/resource_tc_ckafka_datahub_task_test.go b/tencentcloud/services/ckafka/resource_tc_ckafka_datahub_task_test.go similarity index 83% rename from tencentcloud/resource_tc_ckafka_datahub_task_test.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_datahub_task_test.go index 97bae7773e..c069272493 100644 --- a/tencentcloud/resource_tc_ckafka_datahub_task_test.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_datahub_task_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaDatahubTaskResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaDatahubTask, diff --git a/tencentcloud/resource_tc_ckafka_datahub_topic.go b/tencentcloud/services/ckafka/resource_tc_ckafka_datahub_topic.go similarity index 73% rename from tencentcloud/resource_tc_ckafka_datahub_topic.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_datahub_topic.go index 8c19a66cae..21cc4834f9 100644 --- a/tencentcloud/resource_tc_ckafka_datahub_topic.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_datahub_topic.go @@ -1,17 +1,20 @@ -package tencentcloud +package ckafka import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCkafkaDatahubTopic() *schema.Resource { +func ResourceTencentCloudCkafkaDatahubTopic() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCkafkaDatahubTopicCreate, Read: resourceTencentCloudCkafkaDatahubTopicRead, @@ -56,10 +59,10 @@ func resourceTencentCloudCkafkaDatahubTopic() *schema.Resource { } func resourceTencentCloudCkafkaDatahubTopicCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_datahub_topic.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_datahub_topic.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ckafka.NewCreateDatahubTopicRequest() @@ -92,10 +95,10 @@ func resourceTencentCloudCkafkaDatahubTopicCreate(d *schema.ResourceData, meta i } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCkafkaClient().CreateDatahubTopic(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCkafkaClient().CreateDatahubTopic(request) if e != nil { - return retryError(e) + 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()) } @@ -108,11 +111,11 @@ func resourceTencentCloudCkafkaDatahubTopicCreate(d *schema.ResourceData, meta i d.SetId(topicName) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::ckafka:%s:uin/:dipTopic/%s", region, topicName) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -123,14 +126,14 @@ func resourceTencentCloudCkafkaDatahubTopicCreate(d *schema.ResourceData, meta i } func resourceTencentCloudCkafkaDatahubTopicRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_datahub_topic.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_datahub_topic.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} topicName := d.Id() @@ -161,7 +164,7 @@ func resourceTencentCloudCkafkaDatahubTopicRead(d *schema.ResourceData, meta int _ = d.Set("note", datahubTopic.Note) } - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "ckafka", "dipTopic", tcClient.Region, d.Id()) if err != nil { @@ -173,10 +176,10 @@ func resourceTencentCloudCkafkaDatahubTopicRead(d *schema.ResourceData, meta int } func resourceTencentCloudCkafkaDatahubTopicUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_datahub_topic.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_datahub_topic.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := ckafka.NewModifyDatahubTopicRequest() @@ -212,10 +215,10 @@ func resourceTencentCloudCkafkaDatahubTopicUpdate(d *schema.ResourceData, meta i request.Note = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCkafkaClient().ModifyDatahubTopic(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCkafkaClient().ModifyDatahubTopic(request) if e != nil { - return retryError(e) + 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()) } @@ -227,14 +230,14 @@ func resourceTencentCloudCkafkaDatahubTopicUpdate(d *schema.ResourceData, meta i } } - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("ckafka", "dipTopic", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("ckafka", "dipTopic", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -244,13 +247,13 @@ func resourceTencentCloudCkafkaDatahubTopicUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudCkafkaDatahubTopicDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_datahub_topic.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_datahub_topic.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} topicName := d.Id() if err := service.DeleteCkafkaDatahubTopicById(ctx, topicName); err != nil { diff --git a/tencentcloud/resource_tc_ckafka_datahub_topic_test.go b/tencentcloud/services/ckafka/resource_tc_ckafka_datahub_topic_test.go similarity index 90% rename from tencentcloud/resource_tc_ckafka_datahub_topic_test.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_datahub_topic_test.go index 5c8d37d416..da30c95851 100644 --- a/tencentcloud/resource_tc_ckafka_datahub_topic_test.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_datahub_topic_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCkafkaDatahubTopicResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaDatahubTopic, diff --git a/tencentcloud/resource_tc_ckafka_instance.go b/tencentcloud/services/ckafka/resource_tc_ckafka_instance.go similarity index 90% rename from tencentcloud/resource_tc_ckafka_instance.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_instance.go index fe325922ae..700fa002e9 100644 --- a/tencentcloud/resource_tc_ckafka_instance.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_instance.go @@ -1,4 +1,4 @@ -package tencentcloud +package ckafka import ( "context" @@ -8,13 +8,16 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCkafkaInstance() *schema.Resource { +func ResourceTencentCloudCkafkaInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCkafkaInstanceCreate, Read: resourceTencentCloudCkafkaInstanceRead, @@ -51,7 +54,7 @@ func resourceTencentCloudCkafkaInstance() *schema.Resource { Type: schema.TypeString, Optional: true, Default: "profession", - ValidateFunc: validateAllowedStringValue([]string{"standard", "profession"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"standard", "profession"}), Description: "Specifications type of instance. Allowed values are `standard`, `profession`. Default is `profession`.", }, "charge_type": { @@ -59,7 +62,7 @@ func resourceTencentCloudCkafkaInstance() *schema.Resource { Optional: true, ForceNew: true, Default: CKAFKA_CHARGE_TYPE_PREPAID, - ValidateFunc: validateAllowedStringValue([]string{CKAFKA_CHARGE_TYPE_POSTPAID, CKAFKA_CHARGE_TYPE_PREPAID}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{CKAFKA_CHARGE_TYPE_POSTPAID, CKAFKA_CHARGE_TYPE_PREPAID}), Description: "The charge type of instance. Valid values are `PREPAID` and `POSTPAID_BY_HOUR`. Default value is `PREPAID`.", }, "period": { @@ -71,7 +74,7 @@ func resourceTencentCloudCkafkaInstance() *schema.Resource { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateAllowedIntValue([]int{1, 2, 3, 4, 5, 6, 7, 8, 9}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{1, 2, 3, 4, 5, 6, 7, 8, 9}), Description: "Description of instance type. `profession`: 1, `standard`: 1(general), 2(standard), 3(advanced), 4(capacity), 5(specialized-1), 6(specialized-2), 7(specialized-3), 8(specialized-4), 9(exclusive).", }, "upgrade_strategy": { @@ -261,7 +264,7 @@ func resourceTencentCloudCkafkaInstance() *schema.Resource { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateIntegerInRange(1024, 12*1024*1024), + ValidateFunc: tccommon.ValidateIntegerInRange(1024, 12*1024*1024), Description: "The size of a single message in bytes at the instance level. Value range: `1024 - 12*1024*1024 bytes (i.e., 1KB-12MB).", }, "vip": { @@ -363,10 +366,10 @@ func ckafkaRequestSetParams(request interface{}, d *schema.ResourceData) { } func createCkafkaInstancePostPaid(ctx context.Context, d *schema.ResourceData, meta interface{}) (instanceId *string, err error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ckafka.NewCreatePostPaidInstanceRequest() ckafkaRequestSetParams(request, d) - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCkafkaClient().CreatePostPaidInstance(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCkafkaClient().CreatePostPaidInstance(request) if err != nil { log.Printf("[CRITAL]%s create ckafka instance failed, reason:%s\n", logId, err.Error()) return @@ -379,10 +382,10 @@ func createCkafkaInstancePostPaid(ctx context.Context, d *schema.ResourceData, m return } func createCkafkaInstancePrePaid(ctx context.Context, d *schema.ResourceData, meta interface{}) (instanceId *string, err error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := ckafka.NewCreateInstancePreRequest() ckafkaRequestSetParams(request, d) - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCkafkaClient().CreateInstancePre(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCkafkaClient().CreateInstancePre(request) if err != nil { log.Printf("[CRITAL]%s create ckafka instance failed, reason:%s\n", logId, err.Error()) return @@ -396,15 +399,15 @@ func createCkafkaInstancePrePaid(ctx context.Context, d *schema.ResourceData, me } func resourceTencentCloudCkafkaInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_instance.create")() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_instance.create")() var ( instanceId *string createErr error - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) service = CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - ctx = context.WithValue(context.TODO(), logIdKey, logId) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) ) chargeType := d.Get("charge_type").(string) @@ -421,7 +424,7 @@ func resourceTencentCloudCkafkaInstanceCreate(d *schema.ResourceData, meta inter if instanceId == nil { return fmt.Errorf("instanceId is nil") } - err := resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { has, ready, err := service.CheckCkafkaInstanceReady(ctx, *instanceId) if err != nil { return resource.NonRetryableError(err) @@ -540,12 +543,12 @@ func resourceTencentCloudCkafkaInstanceCreate(d *schema.ResourceData, meta inter } } - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := TagService{client: client} region := client.Region if tags := helper.GetTags(d, "tag_set"); len(tags) > 0 { - resourceName := BuildTagResourceName("ckafka", "ckafkaId", region, *instanceId) + resourceName := tccommon.BuildTagResourceName("ckafka", "ckafkaId", region, *instanceId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -555,24 +558,24 @@ func resourceTencentCloudCkafkaInstanceCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudCkafkaInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var service = CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } instanceId := d.Id() var info *ckafka.InstanceDetail var isExist = true - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { res, has, e := service.DescribeCkafkaInstanceById(ctx, instanceId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if !has { d.SetId("") @@ -628,7 +631,7 @@ func resourceTencentCloudCkafkaInstanceRead(d *schema.ResourceData, meta interfa } _ = d.Set("tags", tagSets) - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := TagService{client: client} region := client.Region @@ -646,10 +649,10 @@ func resourceTencentCloudCkafkaInstanceRead(d *schema.ResourceData, meta interfa response = ckafka.NewDescribeInstanceAttributesResponse() ) request.InstanceId = &instanceId - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.client.UseCkafkaClient().DescribeInstanceAttributes(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } response = result attr := response.Response.Result @@ -694,11 +697,11 @@ func resourceTencentCloudCkafkaInstanceRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudCkafkaInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_instance.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_instance.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) service := CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } immutableArgs := []string{ @@ -848,7 +851,7 @@ func resourceTencentCloudCkafkaInstanceUpdate(d *schema.ResourceData, meta inter // InstanceScalingDown statue delay time.Sleep(5 * time.Second) - err := resource.Retry(10*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { _, ready, err := service.CheckCkafkaInstanceReady(ctx, instanceId) if err != nil { return resource.NonRetryableError(err) @@ -866,14 +869,14 @@ func resourceTencentCloudCkafkaInstanceUpdate(d *schema.ResourceData, meta inter if d.HasChange("tag_set") { - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := TagService{client: client} region := client.Region oldTags, newTags := d.GetChange("tag_set") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("ckafka", "ckafkaId", region, instanceId) + resourceName := tccommon.BuildTagResourceName("ckafka", "ckafkaId", region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -883,24 +886,24 @@ func resourceTencentCloudCkafkaInstanceUpdate(d *schema.ResourceData, meta inter } func resourceTencentCLoudCkafkaInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_instance.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_instance.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) service = CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } ) instanceId := d.Id() chargeType := d.Get("charge_type").(string) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if chargeType == CKAFKA_CHARGE_TYPE_POSTPAID { request := ckafka.NewDeleteInstancePostRequest() request.InstanceId = &instanceId _, err := service.client.UseCkafkaClient().DeleteInstancePost(request) if err != nil { - return retryError(err, "UnsupportedOperation") + return tccommon.RetryError(err, "UnsupportedOperation") } } else if chargeType == CKAFKA_CHARGE_TYPE_PREPAID { @@ -908,7 +911,7 @@ func resourceTencentCLoudCkafkaInstanceDelete(d *schema.ResourceData, meta inter request.InstanceId = &instanceId _, err := service.client.UseCkafkaClient().DeleteInstancePre(request) if err != nil { - return retryError(err, "UnsupportedOperation") + return tccommon.RetryError(err, "UnsupportedOperation") } } else { return resource.NonRetryableError(fmt.Errorf("invalid `charge_type` value")) @@ -919,7 +922,7 @@ func resourceTencentCLoudCkafkaInstanceDelete(d *schema.ResourceData, meta inter return err } - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { has, _, err := service.CheckCkafkaInstanceReady(ctx, instanceId) if err != nil { return resource.NonRetryableError(err) diff --git a/tencentcloud/resource_tc_ckafka_instance_test.go b/tencentcloud/services/ckafka/resource_tc_ckafka_instance_test.go similarity index 89% rename from tencentcloud/resource_tc_ckafka_instance_test.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_instance_test.go index f2858d5b7e..daa5bd24d8 100644 --- a/tencentcloud/resource_tc_ckafka_instance_test.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_instance_test.go @@ -1,19 +1,24 @@ -package tencentcloud +package ckafka_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + localckafka "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ckafka" ) func TestAccTencentCloudCkafkaInstanceResource_prepaid(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudKafkaInstanceDestroy, Steps: []resource.TestStep{ { @@ -61,8 +66,8 @@ func TestAccTencentCloudCkafkaInstanceResource_prepaid(t *testing.T) { func TestAccTencentCloudCkafkaInstanceResource_postpaid(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudKafkaInstanceDestroy, Steps: []resource.TestStep{ { @@ -111,8 +116,8 @@ func TestAccTencentCloudCkafkaInstanceResource_postpaid(t *testing.T) { func TestAccTencentCloudCkafkaInstanceResource_maz(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudKafkaInstanceDestroy, Steps: []resource.TestStep{ { @@ -137,8 +142,8 @@ func TestAccTencentCloudCkafkaInstanceResource_maz(t *testing.T) { func TestAccTencentCloudCkafkaInstanceResource_type(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudKafkaInstanceDestroy, Steps: []resource.TestStep{ { @@ -161,11 +166,9 @@ func TestAccTencentCloudCkafkaInstanceResource_type(t *testing.T) { } func testAccTencentCloudKafkaInstanceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - ckafkcService := CkafkaService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ckafkcService := localckafka.NewCkafkaService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, r := range s.RootModule().Resources { if r.Type != "tencentcloud_ckafka_instance" { continue @@ -184,8 +187,8 @@ func testAccTencentCloudKafkaInstanceDestroy(s *terraform.State) error { func testAccCheckKafkaInstanceExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -194,15 +197,13 @@ func testAccCheckKafkaInstanceExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("ckafka instance id is not set") } - ckafkcService := CkafkaService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + ckafkcService := localckafka.NewCkafkaService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) var exist bool - outErr := resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, inErr := ckafkcService.DescribeInstanceById(ctx, rs.Primary.ID) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } exist = has return nil @@ -217,7 +218,7 @@ func testAccCheckKafkaInstanceExists(n string) resource.TestCheckFunc { } } -const testAccKafkaInstance = defaultKafkaVariable + ` +const testAccKafkaInstance = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_instance" "kafka_instance" { instance_name = "ckafka-instance-prepaid" zone_id = 100007 @@ -246,7 +247,7 @@ resource "tencentcloud_ckafka_instance" "kafka_instance" { } ` -const testAccKafkaInstanceUpdate = defaultKafkaVariable + ` +const testAccKafkaInstanceUpdate = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_instance" "kafka_instance" { instance_name = "ckafka-instance-prepaid" zone_id = 100007 @@ -279,7 +280,7 @@ resource "tencentcloud_ckafka_instance" "kafka_instance" { } ` -const testAccKafkaInstancePostpaid = defaultKafkaVariable + ` +const testAccKafkaInstancePostpaid = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_instance" "kafka_instance_postpaid" { instance_name = "ckafka-instance-postpaid" zone_id = 100007 @@ -317,7 +318,7 @@ resource "tencentcloud_ckafka_topic" "foo" { } ` -const testAccKafkaInstanceUpdatePostpaid = defaultKafkaVariable + ` +const testAccKafkaInstanceUpdatePostpaid = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_instance" "kafka_instance_postpaid" { instance_name = "ckafka-instance-postpaid" zone_id = 100007 @@ -358,7 +359,7 @@ resource "tencentcloud_ckafka_topic" "foo" { } ` -const testAccKafkaInstanceUpdatePostpaidDiskSize = defaultKafkaVariable + ` +const testAccKafkaInstanceUpdatePostpaidDiskSize = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_instance" "kafka_instance_postpaid" { instance_name = "ckafka-instance-postpaid" zone_id = 100007 @@ -399,7 +400,7 @@ resource "tencentcloud_ckafka_topic" "foo" { } ` -const testAccKafkaInstanceMAZ = defaultKafkaVariable + ` +const testAccKafkaInstanceMAZ = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_instance" "kafka_instance" { instance_name = "ckafka-instance-maz-tf-test" zone_id = 100007 diff --git a/tencentcloud/resource_tc_ckafka_renew_instance.go b/tencentcloud/services/ckafka/resource_tc_ckafka_renew_instance.go similarity index 70% rename from tencentcloud/resource_tc_ckafka_renew_instance.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_renew_instance.go index 1db6aed81b..48c906503d 100644 --- a/tencentcloud/resource_tc_ckafka_renew_instance.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_renew_instance.go @@ -1,15 +1,18 @@ -package tencentcloud +package ckafka import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCkafkaRenewInstance() *schema.Resource { +func ResourceTencentCloudCkafkaRenewInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCkafkaRenewInstanceCreate, Read: resourceTencentCloudCkafkaRenewInstanceRead, @@ -33,10 +36,10 @@ func resourceTencentCloudCkafkaRenewInstance() *schema.Resource { } func resourceTencentCloudCkafkaRenewInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_renew_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_renew_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ckafka.NewRenewCkafkaInstanceRequest() @@ -51,10 +54,10 @@ func resourceTencentCloudCkafkaRenewInstanceCreate(d *schema.ResourceData, meta request.TimeSpan = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCkafkaClient().RenewCkafkaInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCkafkaClient().RenewCkafkaInstance(request) if e != nil { - return retryError(e) + 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()) } @@ -71,15 +74,15 @@ func resourceTencentCloudCkafkaRenewInstanceCreate(d *schema.ResourceData, meta } func resourceTencentCloudCkafkaRenewInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_renew_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_renew_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCkafkaRenewInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_renew_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_renew_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_ckafka_renew_instance_test.go b/tencentcloud/services/ckafka/resource_tc_ckafka_renew_instance_test.go similarity index 79% rename from tencentcloud/resource_tc_ckafka_renew_instance_test.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_renew_instance_test.go index c96a460b3c..9567e9f5bc 100644 --- a/tencentcloud/resource_tc_ckafka_renew_instance_test.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_renew_instance_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaRenewInstanceResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaRenewInstance, @@ -20,7 +22,7 @@ func TestAccTencentCloudCkafkaRenewInstanceResource_basic(t *testing.T) { }) } -const testAccCkafkaRenewInstance = defaultKafkaVariable + ` +const testAccCkafkaRenewInstance = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_instance" "renew_instance" { instance_name = "ckafka-instance-renew-test" zone_id = 100003 diff --git a/tencentcloud/resource_tc_ckafka_route.go b/tencentcloud/services/ckafka/resource_tc_ckafka_route.go similarity index 81% rename from tencentcloud/resource_tc_ckafka_route.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_route.go index 79e14d667e..cef2fa650b 100644 --- a/tencentcloud/resource_tc_ckafka_route.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_route.go @@ -1,4 +1,4 @@ -package tencentcloud +package ckafka import ( "context" @@ -8,13 +8,16 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCkafkaRoute() *schema.Resource { +func ResourceTencentCloudCkafkaRoute() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCkafkaRouteCreate, Read: resourceTencentCloudCkafkaRouteRead, @@ -128,10 +131,10 @@ func resourceTencentCloudCkafkaRoute() *schema.Resource { } func resourceTencentCloudCkafkaRouteCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_route.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_route.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = ckafka.NewCreateRouteRequest() @@ -175,10 +178,10 @@ func resourceTencentCloudCkafkaRouteCreate(d *schema.ResourceData, meta interfac request.Ip = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCkafkaClient().CreateRoute(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCkafkaClient().CreateRoute(request) if e != nil { - return retryError(e) + 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()) } @@ -193,11 +196,11 @@ func resourceTencentCloudCkafkaRouteCreate(d *schema.ResourceData, meta interfac routeIdInt64 := *response.Response.Result.Data.RouteDTO.RouteId flowIdInt64 := *response.Response.Result.Data.FlowId reouteIdString := strconv.FormatInt(routeIdInt64, 10) - d.SetId(instanceId + FILED_SP + reouteIdString) + d.SetId(instanceId + tccommon.FILED_SP + reouteIdString) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - conf := BuildStateChangeConf([]string{}, []string{"0"}, 1*readRetryTimeout, time.Second, service.CkafkaRouteStateRefreshFunc(flowIdInt64, []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"0"}, 1*tccommon.ReadRetryTimeout, time.Second, service.CkafkaRouteStateRefreshFunc(flowIdInt64, []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -207,16 +210,16 @@ func resourceTencentCloudCkafkaRouteCreate(d *schema.ResourceData, meta interfac } func resourceTencentCloudCkafkaRouteRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_route.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_route.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - items := strings.Split(d.Id(), FILED_SP) + items := strings.Split(d.Id(), tccommon.FILED_SP) if len(items) < 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -277,8 +280,8 @@ func resourceTencentCloudCkafkaRouteRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCkafkaRouteUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_route.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_route.update")() + defer tccommon.InconsistentCheck(d, meta)() immutableArgs := []string{"instance_id", "vip_type", "vpc_id", "subnet_id", "access_type", "auth_flag", "caller_appid", "public_network", "ip"} @@ -291,14 +294,14 @@ func resourceTencentCloudCkafkaRouteUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCloudCkafkaRouteDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_route.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_route.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CkafkaService{client: meta.(*TencentCloudClient).apiV3Conn} - items := strings.Split(d.Id(), FILED_SP) + service := CkafkaService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + items := strings.Split(d.Id(), tccommon.FILED_SP) if len(items) < 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ckafka_route_test.go b/tencentcloud/services/ckafka/resource_tc_ckafka_route_test.go similarity index 69% rename from tencentcloud/resource_tc_ckafka_route_test.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_route_test.go index a6ec1b8bdf..527a425b75 100644 --- a/tencentcloud/resource_tc_ckafka_route_test.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_route_test.go @@ -1,15 +1,17 @@ -package tencentcloud +package ckafka_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCkafkaRouteResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaRouteBasic, @@ -21,8 +23,8 @@ func TestAccTencentCloudCkafkaRouteResource_basic(t *testing.T) { func TestAccTencentCloudCkafkaRouteResource_withIp(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCkafkaRouteBasicWithIp, @@ -32,7 +34,7 @@ func TestAccTencentCloudCkafkaRouteResource_withIp(t *testing.T) { }) } -const testAccCkafkaRouteBasic = defaultKafkaVariable + ` +const testAccCkafkaRouteBasic = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_route" "route" { instance_id = var.instance_id vip_type = 3 @@ -43,7 +45,7 @@ resource "tencentcloud_ckafka_route" "route" { } ` -const testAccCkafkaRouteBasicWithIp = defaultKafkaVariable + ` +const testAccCkafkaRouteBasicWithIp = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_route" "route_with_ip" { instance_id = var.instance_id vip_type = 3 diff --git a/tencentcloud/resource_tc_ckafka_topic.go b/tencentcloud/services/ckafka/resource_tc_ckafka_topic.go similarity index 88% rename from tencentcloud/resource_tc_ckafka_topic.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_topic.go index 347d1a5f7d..509a2841ea 100644 --- a/tencentcloud/resource_tc_ckafka_topic.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_topic.go @@ -1,17 +1,20 @@ -package tencentcloud +package ckafka import ( "context" "fmt" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCkafkaTopic() *schema.Resource { +func ResourceTencentCloudCkafkaTopic() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCkafkaTopicCreate, Read: resourceTencentCloudCkafkaTopicRead, @@ -65,7 +68,7 @@ func resourceTencentCloudCkafkaTopic() *schema.Resource { Type: schema.TypeInt, Optional: true, Default: 60000, - ValidateFunc: validateIntegerMin(60000), + ValidateFunc: tccommon.ValidateIntegerMin(60000), Description: "Message can be selected. Retention time, unit is ms, the current minimum value is 60000ms.", }, "sync_replica_min_num": { @@ -95,7 +98,7 @@ func resourceTencentCloudCkafkaTopic() *schema.Resource { "segment": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerMin(3600000), + ValidateFunc: tccommon.ValidateIntegerMin(3600000), Description: "Segment scrolling time, in ms, the current minimum is 3600000ms.", }, "message_storage_location": { @@ -133,12 +136,12 @@ func resourceTencentCloudCkafkaTopic() *schema.Resource { } func resourceTencentCloudCkafkaTopicCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_topic.create")() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_topic.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) ckafkcService = CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } request = ckafka.NewCreateTopicRequest() instanceId = d.Get("instance_id").(string) @@ -207,20 +210,20 @@ func resourceTencentCloudCkafkaTopicCreate(d *schema.ResourceData, meta interfac return err } } - resourceId := instanceId + FILED_SP + topicName + resourceId := instanceId + tccommon.FILED_SP + topicName d.SetId(resourceId) return resourceTencentCloudCkafkaTopicRead(d, meta) } func resourceTencentCloudCkafkaTopicRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_topic.read")() - defer inconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_topic.read")() + defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) ckafkcService := CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - items := strings.Split(d.Id(), FILED_SP) + items := strings.Split(d.Id(), tccommon.FILED_SP) if len(items) < 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -236,10 +239,10 @@ func resourceTencentCloudCkafkaTopicRead(d *schema.ResourceData, meta interface{ } var topicinfo *ckafka.TopicAttributesResponse - errInfo := resource.Retry(readRetryTimeout, func() *resource.RetryError { + errInfo := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { topicDetail, e := ckafkcService.DescribeCkafkaTopicAttributes(ctx, instanceId, topicName) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if topicDetail == nil { d.SetId("") @@ -275,14 +278,14 @@ func resourceTencentCloudCkafkaTopicRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCkafkaTopicUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_topic.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_topic.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) ckafkcService := CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - items := strings.Split(d.Id(), FILED_SP) + items := strings.Split(d.Id(), tccommon.FILED_SP) if len(items) < 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -362,13 +365,13 @@ func resourceTencentCloudCkafkaTopicUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCLoudCkafkaTopicDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_topic.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_topic.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) ckafkcService := CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - items := strings.Split(d.Id(), FILED_SP) + items := strings.Split(d.Id(), tccommon.FILED_SP) if len(items) < 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_ckafka_topic_test.go b/tencentcloud/services/ckafka/resource_tc_ckafka_topic_test.go similarity index 79% rename from tencentcloud/resource_tc_ckafka_topic_test.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_topic_test.go index 6f9c45c233..d1d672f22d 100644 --- a/tencentcloud/resource_tc_ckafka_topic_test.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_topic_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ckafka_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localckafka "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ckafka" + "context" "fmt" "log" @@ -17,17 +21,15 @@ func init() { resource.AddTestSweepers("tencentcloud_ckafka_topic", &resource.Sweeper{ Name: "tencentcloud_ckafka_topic", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - sharedClient, err := sharedClientForRegion(r) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sharedClient, err := tcacctest.SharedClientForRegion(r) if err != nil { return fmt.Errorf("getting tencentcloud client error: %s", err.Error()) } - client := sharedClient.(*TencentCloudClient) - ckafkcService := CkafkaService{ - client: client.apiV3Conn, - } - instanceId := defaultKafkaInstanceId + client := sharedClient.(tccommon.ProviderMeta) + ckafkcService := localckafka.NewCkafkaService(client.GetAPIV3Conn()) + instanceId := tcacctest.DefaultKafkaInstanceId topicDetails, err := ckafkcService.DescribeCkafkaTopics(ctx, instanceId, "") if err != nil { return err @@ -39,11 +41,11 @@ func init() { createTime := time.Unix(*topicDetail.CreateTime, 0) interval := now.Sub(createTime).Minutes() - if strings.HasPrefix(topicName, keepResource) || strings.HasPrefix(topicName, defaultResource) { + if strings.HasPrefix(topicName, tcacctest.KeepResource) || strings.HasPrefix(topicName, tcacctest.DefaultResource) { continue } - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } err := ckafkcService.DeleteCkafkaTopic(ctx, instanceId, topicName) @@ -60,8 +62,8 @@ func init() { func TestAccTencentCloudCkafkaTopicResource_Basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudKafkaTopicDestory, Steps: []resource.TestStep{ { @@ -110,16 +112,14 @@ func TestAccTencentCloudCkafkaTopicResource_Basic(t *testing.T) { } func testAccTencentCloudKafkaTopicDestory(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - ckafkcService := CkafkaService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ckafkcService := localckafka.NewCkafkaService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, r := range s.RootModule().Resources { if r.Type != "tencentcloud_ckafka_topic" { continue } - split := strings.Split(r.Primary.ID, FILED_SP) + split := strings.Split(r.Primary.ID, tccommon.FILED_SP) if len(split) < 2 { continue } @@ -137,8 +137,8 @@ func testAccTencentCloudKafkaTopicDestory(s *terraform.State) error { func testAccCheckKafkaTopicInstanceExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -147,18 +147,16 @@ func testAccCheckKafkaTopicInstanceExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("ckafka topic id is not set") } - ckafkcService := CkafkaService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } - split := strings.Split(rs.Primary.ID, FILED_SP) + ckafkcService := localckafka.NewCkafkaService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + split := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(split) < 2 { return fmt.Errorf("ckafka topic is not set: %s", rs.Primary.ID) } var exist bool - outErr := resource.Retry(readRetryTimeout, func() *resource.RetryError { + outErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, inErr := ckafkcService.DescribeCkafkaTopicByName(ctx, split[0], split[1]) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } exist = has return nil @@ -173,7 +171,7 @@ func testAccCheckKafkaTopicInstanceExists(n string) resource.TestCheckFunc { } } -const testAccKafkaTopicInstance = defaultKafkaVariable + ` +const testAccKafkaTopicInstance = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_topic" "kafka_topic" { instance_id = var.instance_id topic_name = "ckafka-topic-tf-test" @@ -191,7 +189,7 @@ resource "tencentcloud_ckafka_topic" "kafka_topic" { } ` -const testAccKafkaTopicInstanceUpdate = defaultKafkaVariable + ` +const testAccKafkaTopicInstanceUpdate = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_topic" "kafka_topic" { instance_id = var.instance_id topic_name = "ckafka-topic-tf-test" diff --git a/tencentcloud/resource_tc_ckafka_user.go b/tencentcloud/services/ckafka/resource_tc_ckafka_user.go similarity index 68% rename from tencentcloud/resource_tc_ckafka_user.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_user.go index 96b73fe361..b0b30ee638 100644 --- a/tencentcloud/resource_tc_ckafka_user.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_user.go @@ -1,14 +1,16 @@ -package tencentcloud +package ckafka import ( "context" "fmt" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudCkafkaUser() *schema.Resource { +func ResourceTencentCloudCkafkaUser() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCkafkaUserCreate, Read: resourceTencentCloudCkafkaUserRead, @@ -53,34 +55,34 @@ func resourceTencentCloudCkafkaUser() *schema.Resource { } func resourceTencentCloudCkafkaUserCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_user.create")() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_user.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instanceId := d.Get("instance_id").(string) accountName := d.Get("account_name").(string) password := d.Get("password").(string) ckafkaService := CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if err := ckafkaService.CreateUser(ctx, instanceId, accountName, password); err != nil { return fmt.Errorf("[CRITAL]%s create ckafka user failed, reason:%+v", logId, err) } - d.SetId(instanceId + FILED_SP + accountName) + d.SetId(instanceId + tccommon.FILED_SP + accountName) return resourceTencentCloudCkafkaUserRead(d, meta) } func resourceTencentCloudCkafkaUserRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_user.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_user.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) ckafkaService := CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } id := d.Id() @@ -92,7 +94,7 @@ func resourceTencentCloudCkafkaUserRead(d *schema.ResourceData, meta interface{} d.SetId("") return nil } - items := strings.Split(id, FILED_SP) + items := strings.Split(id, tccommon.FILED_SP) _ = d.Set("instance_id", items[0]) _ = d.Set("account_name", info.Name) _ = d.Set("create_time", info.CreateTime) @@ -102,12 +104,12 @@ func resourceTencentCloudCkafkaUserRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudCkafkaUserUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_user.update")() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_user.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) ckafkaService := CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } instanceId := d.Get("instance_id").(string) @@ -124,12 +126,12 @@ func resourceTencentCloudCkafkaUserUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudCkafkaUserDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_ckafka_user.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_ckafka_user.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) ckafkaService := CkafkaService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if err := ckafkaService.DeleteUser(ctx, d.Id()); err != nil { diff --git a/tencentcloud/resource_tc_ckafka_user_test.go b/tencentcloud/services/ckafka/resource_tc_ckafka_user_test.go similarity index 68% rename from tencentcloud/resource_tc_ckafka_user_test.go rename to tencentcloud/services/ckafka/resource_tc_ckafka_user_test.go index a7bb27f557..2f3fcede3a 100644 --- a/tencentcloud/resource_tc_ckafka_user_test.go +++ b/tencentcloud/services/ckafka/resource_tc_ckafka_user_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package ckafka_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localckafka "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ckafka" + "context" "fmt" "strings" @@ -16,17 +20,17 @@ func init() { resource.AddTestSweepers("tencentcloud_kafka", &resource.Sweeper{ Name: "tencentcloud_kafka", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - sharedClient, err := sharedClientForRegion(r) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sharedClient, err := tcacctest.SharedClientForRegion(r) if err != nil { return fmt.Errorf("getting tencentcloud client error: %s", err.Error()) } - client := sharedClient.(*TencentCloudClient) + client := sharedClient.(tccommon.ProviderMeta) - ckafkaService := CkafkaService{client: client.apiV3Conn} + ckafkaService := localckafka.NewCkafkaService(client.GetAPIV3Conn()) params := make(map[string]interface{}) - params["instance_id"] = defaultKafkaInstanceId + params["instance_id"] = tcacctest.DefaultKafkaInstanceId userInfos, err := ckafkaService.DescribeUserByFilter(ctx, params) if err != nil { return nil @@ -34,17 +38,17 @@ func init() { for _, userInfo := range userInfos { userName := *userInfo.Name now := time.Now() - createTime := stringTotime(*userInfo.CreateTime) + createTime := tccommon.StringToTime(*userInfo.CreateTime) interval := now.Sub(createTime).Minutes() // less than 30 minute, not delete - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } - if strings.HasPrefix(userName, keepResource) || strings.HasPrefix(userName, defaultResource) { + if strings.HasPrefix(userName, tcacctest.KeepResource) || strings.HasPrefix(userName, tcacctest.DefaultResource) { continue } - userIdStr := fmt.Sprintf("%v#%v", defaultKafkaInstanceId, userName) + userIdStr := fmt.Sprintf("%v#%v", tcacctest.DefaultKafkaInstanceId, userName) err := ckafkaService.DeleteUser(ctx, userIdStr) if err != nil { return nil @@ -57,8 +61,8 @@ func init() { func TestAccTencentCloudCkafkaUser(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCkafkaUserDestroy, Steps: []resource.TestStep{ { @@ -95,11 +99,9 @@ func TestAccTencentCloudCkafkaUser(t *testing.T) { func testAccCheckCkafkaUserExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - ckafkaService := CkafkaService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ckafkaService := localckafka.NewCkafkaService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[n] if !ok { @@ -121,11 +123,9 @@ func testAccCheckCkafkaUserExists(n string) resource.TestCheckFunc { } func testAccCheckCkafkaUserDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - ckafkaService := CkafkaService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + ckafkaService := localckafka.NewCkafkaService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_ckafka_user" { @@ -144,7 +144,7 @@ func testAccCheckCkafkaUserDestroy(s *terraform.State) error { return nil } -const testAccCkafkaUser = defaultKafkaVariable + ` +const testAccCkafkaUser = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_user" "foo" { instance_id = var.instance_id account_name = "tf-test" @@ -152,7 +152,7 @@ resource "tencentcloud_ckafka_user" "foo" { } ` -const testAccCkafkaUser_update = defaultKafkaVariable + ` +const testAccCkafkaUser_update = tcacctest.DefaultKafkaVariable + ` resource "tencentcloud_ckafka_user" "foo" { instance_id = var.instance_id account_name = "tf-test" diff --git a/tencentcloud/services/ckafka/service_tencentcloud_ckafka.go b/tencentcloud/services/ckafka/service_tencentcloud_ckafka.go new file mode 100644 index 0000000000..5c47b8519d --- /dev/null +++ b/tencentcloud/services/ckafka/service_tencentcloud_ckafka.go @@ -0,0 +1,1807 @@ +package ckafka + +import ( + "context" + "fmt" + "log" + "strconv" + "strings" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +func NewCkafkaService(client *connectivity.TencentCloudClient) CkafkaService { + return CkafkaService{client: client} +} + +type CkafkaService struct { + client *connectivity.TencentCloudClient +} + +func (me *CkafkaService) CheckCkafkaInstanceReady(ctx context.Context, + instanceId string) (has bool, ready bool, errRet error) { + logId := tccommon.GetLogId(ctx) + var ( + request = ckafka.NewDescribeInstancesDetailRequest() + response = ckafka.NewDescribeInstancesDetailResponse() + info *ckafka.InstanceDetail + ) + 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()) + } + }() + request.InstanceId = &instanceId + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, err := me.client.UseCkafkaClient().DescribeInstancesDetail(request) + if err != nil { + return tccommon.RetryError(err) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s read ckafka instance failed, reason: %v", logId, err) + return false, false, err + } + if len(response.Response.Result.InstanceList) < 1 { + return + } + has = true + info = response.Response.Result.InstanceList[0] + if *info.Status == 1 { + ready = true + } + return +} + +func (me *CkafkaService) ModifyCkafkaInstanceAttributes(ctx context.Context, + request *ckafka.ModifyInstanceAttributesRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + ratelimit.Check(request.GetAction()) + _, err := me.client.UseCkafkaClient().ModifyInstanceAttributes(request) + if err != nil { + return fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, + request.GetAction(), request.ToJsonString(), err.Error()) + } + return +} + +func (me *CkafkaService) DescribeCkafkaInstanceById(ctx context.Context, + instanceId string) (info *ckafka.InstanceDetail, has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + var ( + request = ckafka.NewDescribeInstancesDetailRequest() + response = ckafka.NewDescribeInstancesDetailResponse() + ) + 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()) + } + }() + request.InstanceId = &instanceId + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, err := me.client.UseCkafkaClient().DescribeInstancesDetail(request) + if err != nil { + return tccommon.RetryError(err) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s read ckafka instance failed, reason: %v", logId, err) + return nil, false, err + } + if len(response.Response.Result.InstanceList) < 1 { + return + } + has = true + info = response.Response.Result.InstanceList[0] + return +} + +func (me *CkafkaService) CreateUser(ctx context.Context, instanceId, user, password string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := ckafka.NewCreateUserRequest() + request.InstanceId = &instanceId + request.Name = &user + request.Password = &password + + var response *ckafka.CreateUserResponse + var err error + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, err = me.client.UseCkafkaClient().CreateUser(request) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }) + + if err != nil { + return err + } + if response != nil && response.Response != nil && !me.OperateStatusCheck(ctx, response.Response.Result) { + return fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) + } + return nil +} + +func (me *CkafkaService) OperateStatusCheck(ctx context.Context, result *ckafka.JgwOperateResponse) (isSucceed bool) { + logId := tccommon.GetLogId(ctx) + if result == nil { + log.Printf("[CRITAL]%s OperateStatusCheck fail, result is nil", logId) + return false + } + + if result != nil && *result.ReturnCode == "0" { + return true + } else { + return false + } +} + +func (me *CkafkaService) DescribeUserByUserId(ctx context.Context, userId string) (userInfo *ckafka.User, has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + + items := strings.Split(userId, tccommon.FILED_SP) + if len(items) != 2 { + errRet = fmt.Errorf("id of resource.tencentcloud_ckafka_user is wrong") + return + } + instanceId, user := items[0], items[1] + + if _, has, _ = me.DescribeInstanceById(ctx, instanceId); !has { + return + } + + request := ckafka.NewDescribeUserRequest() + request.InstanceId = &instanceId + request.SearchWord = &user + + var response *ckafka.DescribeUserResponse + var err error + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + response, err = me.client.UseCkafkaClient().DescribeUser(request) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }) + + if err != nil { + errRet = fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } + + if response != nil && response.Response != nil && response.Response.Result != nil && response.Response.Result.Users != nil { + if len(response.Response.Result.Users) < 1 { + has = false + return + } else if len(response.Response.Result.Users) > 1 { + errRet = fmt.Errorf("[CRITAL]%s dumplicated users found", logId) + return + } + + userInfo = response.Response.Result.Users[0] + has = true + return + } + + return +} + +func (me *CkafkaService) ModifyPassword(ctx context.Context, instanceId, user, oldPasswd, newPasswd string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := ckafka.NewModifyPasswordRequest() + request.InstanceId = &instanceId + request.Name = &user + request.Password = &oldPasswd + request.PasswordNew = &newPasswd + + var response *ckafka.ModifyPasswordResponse + var err error + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, err = me.client.UseCkafkaClient().ModifyPassword(request) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }) + + if err != nil { + return err + } + if response != nil && response.Response != nil && !me.OperateStatusCheck(ctx, response.Response.Result) { + return fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) + } + return nil +} + +func (me *CkafkaService) DeleteUser(ctx context.Context, userId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + items := strings.Split(userId, tccommon.FILED_SP) + if len(items) != 2 { + errRet = fmt.Errorf("id of resource.tencentcloud_ckafka_user is wrong") + return + } + instanceId, user := items[0], items[1] + + request := ckafka.NewDeleteUserRequest() + request.InstanceId = &instanceId + request.Name = &user + + var response *ckafka.DeleteUserResponse + var err error + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, err = me.client.UseCkafkaClient().DeleteUser(request) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }) + + if err != nil { + return err + } + if response != nil && response.Response != nil && !me.OperateStatusCheck(ctx, response.Response.Result) { + return fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) + } + return nil +} + +func (me *CkafkaService) DescribeUserByFilter(ctx context.Context, params map[string]interface{}) (userInfos []*ckafka.User, errRet error) { + logId := tccommon.GetLogId(ctx) + + instanceId := params["instance_id"].(string) + if _, has, _ := me.DescribeInstanceById(ctx, instanceId); !has { + return + } + + request := ckafka.NewDescribeUserRequest() + var offset int64 = 0 + var pageSize = int64(CKAFKA_DESCRIBE_LIMIT) + request.InstanceId = &instanceId + if user, ok := params["account_name"]; ok { + request.SearchWord = helper.String(user.(string)) + } + request.Limit = &pageSize + request.Offset = &offset + + userInfos = make([]*ckafka.User, 0) + for { + var response *ckafka.DescribeUserResponse + var err error + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err = me.client.UseCkafkaClient().DescribeUser(request) + if err != nil { + return tccommon.RetryError(err) + } + userInfos = append(userInfos, response.Response.Result.Users...) + return nil + }) + if err != nil { + errRet = fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } else { + if len(response.Response.Result.Users) < CKAFKA_DESCRIBE_LIMIT { + break + } else { + offset += pageSize + } + } + } + return +} + +func (me *CkafkaService) CreateAcl(ctx context.Context, instanceId, resourceType, resourceName, operation, permissionType, host, principal string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := ckafka.NewCreateAclRequest() + request.InstanceId = &instanceId + request.ResourceType = helper.Int64(CKAFKA_ACL_RESOURCE_TYPE[resourceType]) + request.ResourceName = &resourceName + request.Operation = helper.Int64(CKAFKA_ACL_OPERATION[operation]) + request.PermissionType = helper.Int64(CKAFKA_PERMISSION_TYPE[permissionType]) + request.Host = &host + request.Principal = helper.String(CKAFKA_ACL_PRINCIPAL_STR + principal) + + var response *ckafka.CreateAclResponse + var err error + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, err = me.client.UseCkafkaClient().CreateAcl(request) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }) + + if err != nil { + return err + } + if response != nil && response.Response != nil && !me.OperateStatusCheck(ctx, response.Response.Result) { + return fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) + } + return nil +} + +func (me *CkafkaService) DescribeAclByFilter(ctx context.Context, params map[string]interface{}) (aclInfos []*ckafka.Acl, errRet error) { + logId := tccommon.GetLogId(ctx) + + instanceId := params["instance_id"].(string) + if _, has, _ := me.DescribeInstanceById(ctx, instanceId); !has { + return + } + resourceType := params["resource_type"].(string) + resourceName := params["resource_name"].(string) + if resourceType == "TOPIC" { + if _, has, _ := me.DescribeTopicById(ctx, instanceId+tccommon.FILED_SP+resourceName); !has { + return + } + } + + request := ckafka.NewDescribeACLRequest() + var offset int64 = 0 + var pageSize = int64(CKAFKA_DESCRIBE_LIMIT) + request.InstanceId = &instanceId + request.ResourceType = helper.Int64(CKAFKA_ACL_RESOURCE_TYPE[resourceType]) + request.ResourceName = helper.String(resourceName) + if host, ok := params["host"]; ok { + request.SearchWord = helper.String(host.(string)) + } + request.Limit = &pageSize + request.Offset = &offset + + aclInfos = make([]*ckafka.Acl, 0) + for { + var response *ckafka.DescribeACLResponse + var err error + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err = me.client.UseCkafkaClient().DescribeACL(request) + if err != nil { + return tccommon.RetryError(err) + } + aclInfos = append(aclInfos, response.Response.Result.AclList...) + return nil + }) + if err != nil { + errRet = fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } else { + if len(response.Response.Result.AclList) < CKAFKA_DESCRIBE_LIMIT { + break + } else { + offset += pageSize + } + } + } + return +} + +func (me *CkafkaService) DescribeAclByAclId(ctx context.Context, aclId string) (aclInfo *ckafka.Acl, has bool, errRet error) { + // acl id is organized by "instanceId + tccommon.FILED_SP + permissionType + tccommon.FILED_SP + principal + tccommon.FILED_SP + host + tccommon.FILED_SP + operation + tccommon.FILED_SP + resourceType + tccommon.FILED_SP + resourceName" + items := strings.Split(aclId, tccommon.FILED_SP) + if len(items) != 7 { + errRet = fmt.Errorf("id of resource.tencentcloud_ckafka_acl is wrong") + return + } + instanceId, permission, principal, host, operation, resourceType, resourceName := items[0], items[1], items[2], items[3], items[4], items[5], items[6] + + var params = map[string]interface{}{ + "instance_id": instanceId, + "resource_type": resourceType, + "resource_name": resourceName, + "host": host, + } + aclInfos, err := me.DescribeAclByFilter(ctx, params) + if err != nil { + errRet = err + return + } + for _, acl := range aclInfos { + if CKAFKA_PERMISSION_TYPE_TO_STRING[*acl.PermissionType] == permission && *acl.Principal == CKAFKA_ACL_PRINCIPAL_STR+principal && CKAFKA_ACL_OPERATION_TO_STRING[*acl.Operation] == operation { + aclInfo = acl + has = true + return + } + } + has = false + return +} + +func (me *CkafkaService) DeleteAcl(ctx context.Context, aclId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + // acl id is organized by "instanceId + tccommon.FILED_SP + permissionType + tccommon.FILED_SP + principal + tccommon.FILED_SP + host + tccommon.FILED_SP + operation + tccommon.FILED_SP + resourceType + tccommon.FILED_SP + resourceName" + items := strings.Split(aclId, tccommon.FILED_SP) + if len(items) != 7 { + errRet = fmt.Errorf("id of resource.tencentcloud_ckafka_acl is wrong") + return + } + instanceId, permission, principal, host, operation, resourceType, resourceName := items[0], items[1], items[2], items[3], items[4], items[5], items[6] + + request := ckafka.NewDeleteAclRequest() + request.InstanceId = &instanceId + request.ResourceType = helper.Int64(CKAFKA_ACL_RESOURCE_TYPE[resourceType]) + request.ResourceName = &resourceName + request.Operation = helper.Int64(CKAFKA_ACL_OPERATION[operation]) + request.PermissionType = helper.Int64(CKAFKA_PERMISSION_TYPE[permission]) + request.Host = &host + request.Principal = helper.String(CKAFKA_ACL_PRINCIPAL_STR + principal) + + var response *ckafka.DeleteAclResponse + var err error + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, err = me.client.UseCkafkaClient().DeleteAcl(request) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }) + + if err != nil { + return err + } + if response != nil && response.Response != nil && !me.OperateStatusCheck(ctx, response.Response.Result) { + return fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) + } + return nil +} + +func (me *CkafkaService) DescribeInstanceById(ctx context.Context, instanceId string) (instanceInfo *ckafka.InstanceAttributesResponse, has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDescribeInstanceAttributesRequest() + request.InstanceId = &instanceId + var response *ckafka.DescribeInstanceAttributesResponse + var err error + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err = me.client.UseCkafkaClient().DescribeInstanceAttributes(request) + if err != nil { + if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { + if sdkErr.Code == CkafkaInstanceNotFound || sdkErr.Code == CkafkaFailedOperation { + return nil + } + } + return tccommon.RetryError(err) + } + return nil + }) + if err != nil { + errRet = fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } + + if response != nil && response.Response != nil { + if instanceInfo = response.Response.Result; instanceInfo != nil { + has = true + return + } + } + + has = false + return +} + +func (me *CkafkaService) DescribeTopicById(ctx context.Context, topicId string) (topicInfo *ckafka.TopicAttributesResponse, has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDescribeTopicAttributesRequest() + items := strings.Split(topicId, tccommon.FILED_SP) + if len(items) != 2 { + errRet = fmt.Errorf("id of resource.tencentcloud_ckafka_topic is wrong") + return + } + instanceId, topicName := items[0], items[1] + request.InstanceId = &instanceId + request.TopicName = &topicName + var response *ckafka.DescribeTopicAttributesResponse + var err error + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err = me.client.UseCkafkaClient().DescribeTopicAttributes(request) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }) + if err != nil { + errRet = fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } + + if response != nil && response.Response != nil { + if topicInfo = response.Response.Result; topicInfo != nil { + has = true + return + } + } + + has = false + return +} + +func (me *CkafkaService) DescribeCkafkaTopics(ctx context.Context, instanceId string, topicName string) (topicList []*ckafka.TopicDetail, errRet error) { + logId := tccommon.GetLogId(ctx) + request := ckafka.NewDescribeTopicDetailRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.InstanceId = &instanceId + if topicName != "" { + request.SearchWord = &topicName + } + var offset, limit int64 = 0, 20 + request.Offset = &offset + request.Limit = &limit + //check ckafka exist + _, ckafkaExist, errRet := me.DescribeInstanceById(ctx, instanceId) + if errRet != nil { + return + } + if !ckafkaExist { + return + } + for { + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCkafkaClient().DescribeTopicDetail(request) + if err != nil { + errRet = err + return + } + if response == nil || response.Response == nil || response.Response.Result == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + return + } + topicList = append(topicList, response.Response.Result.TopicList...) + if len(response.Response.Result.TopicList) < int(limit) { + break + } + offset += limit + } + return +} + +func (me *CkafkaService) CreateCkafkaTopic(ctx context.Context, request *ckafka.CreateTopicRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + var response *ckafka.CreateTopicResponse + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + resp, e := me.client.UseCkafkaClient().CreateTopic(request) + if e != nil { + return tccommon.RetryError(e) + } + response = resp + return nil + }) + if errRet != nil { + return + } + if response == nil || response.Response == nil || response.Response.Result == nil { + return fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + if *response.Response.Result.TopicId == "" { + return fmt.Errorf("TencentCloud SDK returns empty ckafka topic ID, %s", request.GetAction()) + } + return nil +} + +func (me *CkafkaService) DescribeCkafkaTopicByName(ctx context.Context, instanceId string, topicName string) (topic *ckafka.TopicDetail, has bool, errRet error) { + var topicList []*ckafka.TopicDetail + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + list, err := me.DescribeCkafkaTopics(ctx, instanceId, topicName) + if err != nil { + return tccommon.RetryError(err) + } + topicList = list + return nil + }) + if errRet != nil { + return + } + for _, v := range topicList { + if *v.TopicName == topicName { + has = true + topic = v + break + } + } + return +} + +func (me *CkafkaService) DescribeCkafkaTopicAttributes(ctx context.Context, instanceId string, topicName string) (topicInfo *ckafka.TopicAttributesResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + request := ckafka.NewDescribeTopicAttributesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.InstanceId = &instanceId + request.TopicName = &topicName + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCkafkaClient().DescribeTopicAttributes(request) + if err != nil { + errRet = err + return + } + if response == nil || response.Response == nil || response.Response.Result == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + return + } + topicInfo = response.Response.Result + return +} + +func (me *CkafkaService) AddCkafkaTopicIpWhiteList(ctx context.Context, instanceId string, topicName string, whiteIpList []*string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := ckafka.NewCreateTopicIpWhiteListRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + request.TopicName = &topicName + request.InstanceId = &instanceId + request.IpWhiteList = whiteIpList + var response *ckafka.CreateTopicIpWhiteListResponse + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + resp, e := me.client.UseCkafkaClient().CreateTopicIpWhiteList(request) + if e != nil { + return tccommon.RetryError(e) + } + response = resp + return nil + }) + if errRet != nil { + return + } + if response == nil || response.Response == nil || response.Response.Result == nil { + return fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + return nil +} + +func (me *CkafkaService) AddCkafkaTopicPartition(ctx context.Context, instanceId string, topicName string, partitionNum int64) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := ckafka.NewCreatePartitionRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + request.TopicName = &topicName + request.InstanceId = &instanceId + request.PartitionNum = &partitionNum + var response *ckafka.CreatePartitionResponse + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + resp, e := me.client.UseCkafkaClient().CreatePartition(request) + if e != nil { + return tccommon.RetryError(e) + } + response = resp + return nil + }) + if errRet != nil { + return + } + if response == nil || response.Response == nil || response.Response.Result == nil { + return fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + return nil +} + +func (me *CkafkaService) RemoveCkafkaTopicIpWhiteList(ctx context.Context, instaneId string, topicName string, whiteIpList []*string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := ckafka.NewDeleteTopicIpWhiteListRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + request.TopicName = &topicName + request.InstanceId = &instaneId + request.IpWhiteList = whiteIpList + ratelimit.Check(request.GetAction()) + var response *ckafka.DeleteTopicIpWhiteListResponse + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + resp, e := me.client.UseCkafkaClient().DeleteTopicIpWhiteList(request) + if e != nil { + return tccommon.RetryError(e) + } + response = resp + return nil + }) + if errRet != nil { + return + } + if response == nil || response.Response == nil || response.Response.Result == nil { + return fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + return nil +} + +func (me *CkafkaService) DescribeCkafkaById(ctx context.Context, instanceId string) (instance *ckafka.InstanceDetail, has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + request := ckafka.NewDescribeInstancesDetailRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + request.InstanceId = &instanceId + ratelimit.Check(request.GetAction()) + resp, err := me.client.UseCkafkaClient().DescribeInstancesDetail(request) + if err != nil { + has = false + return + } + for _, cKafkaInstance := range resp.Response.Result.InstanceList { + if *cKafkaInstance.InstanceId == instanceId { + has = true + instance = cKafkaInstance + break + } + } + return +} + +func (me *CkafkaService) ModifyCkafkaTopicAttribute(ctx context.Context, request *ckafka.ModifyTopicAttributesRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, errRet := me.client.UseCkafkaClient().ModifyTopicAttributes(request) + if errRet != nil { + return errRet + } + if response == nil || response.Response == nil || response.Response.Result == nil { + return fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + return +} + +func (me *CkafkaService) DeleteCkafkaTopic(ctx context.Context, instanceId string, name string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := ckafka.NewDeleteTopicRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.InstanceId = &instanceId + request.TopicName = &name + + ratelimit.Check(request.GetAction()) + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, err := me.client.UseCkafkaClient().DeleteTopic(request) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }) + if errRet != nil { + return + } + //重试超时时间 + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + topicList, err := me.DescribeCkafkaTopics(ctx, instanceId, name) + if err != nil { + return tccommon.RetryError(err) + } + if len(topicList) != 0 { + return resource.RetryableError(fmt.Errorf("this Topic %s Delete Failed", name)) + } + return nil + }) + + if errRet != nil { + return errRet + } + return +} + +func (me *CkafkaService) DescribeCkafkaDatahubTopicById(ctx context.Context, topicName string) (datahubTopic *ckafka.DescribeDatahubTopicResp, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDescribeDatahubTopicRequest() + request.Name = &topicName + + 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.UseCkafkaClient().DescribeDatahubTopic(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()) + + if response.Response.Result == nil { + return + } + + datahubTopic = response.Response.Result + return +} + +func (me *CkafkaService) DeleteCkafkaDatahubTopicById(ctx context.Context, topicName string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDeleteDatahubTopicRequest() + request.Name = &topicName + + 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.UseCkafkaClient().DeleteDatahubTopic(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 +} + +func (me *CkafkaService) DescribeCkafkaConnectResourceById(ctx context.Context, resourceId string) (connectResource *ckafka.DescribeConnectResourceResp, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDescribeConnectResourceRequest() + request.ResourceId = &resourceId + + 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.UseCkafkaClient().DescribeConnectResource(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()) + + if response.Response.Result == nil { + return + } + + connectResource = response.Response.Result + return +} + +func (me *CkafkaService) DeleteCkafkaConnectResourceById(ctx context.Context, resourceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDeleteConnectResourceRequest() + request.ResourceId = &resourceId + + 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.UseCkafkaClient().DeleteConnectResource(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 +} + +func (me *CkafkaService) CkafkaConnectResourceStateRefreshFunc(resourceId string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + ctx := tccommon.ContextNil + + object, err := me.DescribeCkafkaConnectResourceById(ctx, resourceId) + + if err != nil { + return nil, "", err + } + + return object, helper.Int64ToStr(*object.Status), nil + } +} + +func (me *CkafkaService) DescribeCkafkaConnectResourceByFilter(ctx context.Context, params map[string]interface{}) (describeConnectResourceResp *ckafka.DescribeConnectResourcesResp, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDescribeConnectResourcesRequest() + + 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()) + } + }() + offset := 0 + limit := 20 + for k, v := range params { + if k == "type" { + request.Type = helper.String(v.(string)) + } + if k == "search_word" { + request.SearchWord = helper.String(v.(string)) + } + if k == "resource_region" { + request.ResourceRegion = helper.String(v.(string)) + } + if k == "offset" { + offset = v.(int) + } + if k == "limit" { + limit = v.(int) + } + } + + request.Offset = helper.IntInt64(offset) + request.Limit = helper.IntInt64(limit) + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCkafkaClient().DescribeConnectResources(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()) + + if response == nil || response.Response == nil || response.Response.Result == nil { + errRet = fmt.Errorf("Response is null") + return + } + + describeConnectResourceResp = response.Response.Result + return +} + +func (me *CkafkaService) DescribeCkafkaDatahubTopicByFilter(ctx context.Context, paramMap map[string]interface{}) (result *ckafka.DescribeDatahubTopicsResp, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDescribeDatahubTopicsRequest() + + 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()) + } + }() + + offset := 0 + limit := 50 + for k, v := range paramMap { + if k == "search_word" { + request.SearchWord = helper.String(v.(string)) + } + if k == "offset" { + offset = v.(int) + } + if k == "limit" { + limit = v.(int) + } + } + request.Limit = helper.IntUint64(limit) + request.Offset = helper.IntUint64(offset) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCkafkaClient().DescribeDatahubTopics(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()) + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("Response is null") + return + } + + result = response.Response.Result + return +} + +func (me *CkafkaService) DescribeCkafkaDatahubGroupOffsetsByFilter(ctx context.Context, param map[string]interface{}) (groupOffsetTopics []*ckafka.GroupOffsetTopic, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ckafka.NewDescribeDatahubGroupOffsetsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "name" { + request.Name = v.(*string) + } + if k == "group" { + request.Group = v.(*string) + } + if k == "search_word" { + request.SearchWord = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCkafkaClient().DescribeDatahubGroupOffsets(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()) + + if response == nil || response.Response == nil || response.Response.Result == nil { + break + } + groupOffsetTopics = append(groupOffsetTopics, response.Response.Result.TopicList...) + if len(response.Response.Result.TopicList) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *CkafkaService) DescribeCkafkaDatahubTaskByFilter(ctx context.Context, param map[string]interface{}) (datahubTaskInfos []*ckafka.DatahubTaskInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ckafka.NewDescribeDatahubTasksRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "search_word" { + request.SearchWord = v.(*string) + } + if k == "target_type" { + request.TargetType = v.(*string) + } + if k == "task_type" { + request.TaskType = v.(*string) + } + if k == "source_type" { + request.SourceType = v.(*string) + } + if k == "resource" { + request.Resource = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCkafkaClient().DescribeDatahubTasks(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()) + + if response == nil || response.Response == nil || response.Response.Result == nil || len(response.Response.Result.TaskList) < 1 { + break + } + datahubTaskInfos = append(datahubTaskInfos, response.Response.Result.TaskList...) + if len(response.Response.Result.TaskList) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *CkafkaService) DescribeCkafkaGroupByFilter(ctx context.Context, param map[string]interface{}) (groups []*ckafka.DescribeGroup, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ckafka.NewDescribeGroupRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "instance_id" { + request.InstanceId = v.(*string) + } + if k == "search_word" { + request.SearchWord = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCkafkaClient().DescribeGroup(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()) + + if response == nil || response.Response == nil || len(response.Response.Result.GroupList) < 1 { + break + } + groups = append(groups, response.Response.Result.GroupList...) + if len(response.Response.Result.GroupList) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *CkafkaService) DescribeCkafkaGroupOffsetsByFilter(ctx context.Context, param map[string]interface{}) (groupOffsetTopics []*ckafka.GroupOffsetTopic, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ckafka.NewDescribeGroupOffsetsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "instance_id" { + request.InstanceId = v.(*string) + } + if k == "group" { + request.Group = v.(*string) + } + if k == "topics" { + request.Topics = v.([]*string) + } + if k == "search_word" { + request.SearchWord = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCkafkaClient().DescribeGroupOffsets(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()) + + if response == nil || response.Response == nil || response.Response.Result == nil || len(response.Response.Result.TopicList) < 1 { + break + } + groupOffsetTopics = append(groupOffsetTopics, response.Response.Result.TopicList...) + if len(response.Response.Result.TopicList) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *CkafkaService) DescribeCkafkaGroupInfoByFilter(ctx context.Context, param map[string]interface{}) (groupInfo []*ckafka.GroupInfoResponse, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ckafka.NewDescribeGroupInfoRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "instance_id" { + request.InstanceId = v.(*string) + } + if k == "group_list" { + request.GroupList = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCkafkaClient().DescribeGroupInfo(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()) + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("Response body is null") + return + } + groupInfo = response.Response.Result + + return +} + +func (me *CkafkaService) DescribeCkafkaTaskStatusByFilter(ctx context.Context, flowId int) (taskStatus *ckafka.TaskStatusResponse, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ckafka.NewDescribeTaskStatusRequest() + ) + + 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()) + } + }() + + request.FlowId = helper.IntInt64(flowId) + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCkafkaClient().DescribeTaskStatus(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()) + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("Response body is null") + return + } + taskStatus = response.Response.Result + + return +} + +func (me *CkafkaService) DescribeCkafkaTopicFlowRankingByFilter(ctx context.Context, param map[string]interface{}) (topicFlowRanking *ckafka.TopicFlowRankingResult, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ckafka.NewDescribeTopicFlowRankingRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "instance_id" { + request.InstanceId = v.(*string) + } + if k == "ranking_type" { + request.RankingType = v.(*string) + } + if k == "begin_date" { + request.BeginDate = v.(*string) + } + if k == "end_date" { + request.EndDate = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCkafkaClient().DescribeTopicFlowRanking(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()) + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("Response body is null") + return + } + topicFlowRanking = response.Response.Result + + return +} + +func (me *CkafkaService) DescribeCkafkaTopicProduceConnectionByFilter(ctx context.Context, param map[string]interface{}) (topicProduceConnection []*ckafka.DescribeConnectInfoResultDTO, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ckafka.NewDescribeTopicProduceConnectionRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "instance_id" { + request.InstanceId = v.(*string) + } + if k == "topic_name" { + request.TopicName = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCkafkaClient().DescribeTopicProduceConnection(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()) + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("Response body is null") + return + } + topicProduceConnection = response.Response.Result + + return +} + +func (me *CkafkaService) DescribeCkafkaTopicSubscribeGroupByFilter(ctx context.Context, param map[string]interface{}) (groupInfos []*ckafka.GroupInfoResponse, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ckafka.NewDescribeTopicSubscribeGroupRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + if k == "TopicName" { + request.TopicName = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCkafkaClient().DescribeTopicSubscribeGroup(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()) + + if response == nil || response.Response == nil || response.Response.Result == nil || len(response.Response.Result.GroupsInfo) < 1 { + break + } + groupInfos = append(groupInfos, response.Response.Result.GroupsInfo...) + if len(response.Response.Result.GroupsInfo) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *CkafkaService) DescribeCkafkaTopicSyncReplicaByFilter(ctx context.Context, param map[string]interface{}) (topicInSyncReplicaInfos []*ckafka.TopicInSyncReplicaInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ckafka.NewDescribeTopicSyncReplicaRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "instance_id" { + request.InstanceId = v.(*string) + } + if k == "topic_name" { + request.TopicName = v.(*string) + } + if k == "out_of_sync_replica_only" { + request.OutOfSyncReplicaOnly = v.(*bool) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCkafkaClient().DescribeTopicSyncReplica(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()) + + if response == nil || response.Response == nil || response.Response.Result == nil || len(response.Response.Result.TopicInSyncReplicaList) < 1 { + break + } + topicInSyncReplicaInfos = append(topicInSyncReplicaInfos, response.Response.Result.TopicInSyncReplicaList...) + if len(response.Response.Result.TopicInSyncReplicaList) < int(limit) { + break + } + + offset += uint64(limit) + } + + return +} + +func (me *CkafkaService) DescribeCkafkaAclRuleById(ctx context.Context, instanceId string, ruleName string) (aclRule *ckafka.AclRule, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDescribeAclRuleRequest() + request.InstanceId = &instanceId + request.RuleName = &ruleName + + 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.UseCkafkaClient().DescribeAclRule(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()) + + if response == nil || response.Response == nil || response.Response.Result == nil || len(response.Response.Result.AclRuleList) < 1 { + return + } + + aclRule = response.Response.Result.AclRuleList[0] + return +} + +func (me *CkafkaService) DeleteCkafkaAclRuleById(ctx context.Context, instanceId string, ruleName string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDeleteAclRuleRequest() + request.InstanceId = &instanceId + request.RuleName = &ruleName + + 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.UseCkafkaClient().DeleteAclRule(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 +} + +func (me *CkafkaService) DescribeCkafkaConsumerGroupById(ctx context.Context, instanceId string, groupName string) (consumerGroup *ckafka.ConsumerGroupResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDescribeConsumerGroupRequest() + request.InstanceId = &instanceId + request.GroupName = &groupName + + 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.UseCkafkaClient().DescribeConsumerGroup(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()) + + if response == nil || response.Response == nil || response.Response.Result == nil { + return + } + + consumerGroup = response.Response.Result + return +} + +func (me *CkafkaService) DeleteCkafkaConsumerGroupById(ctx context.Context, instanceId string, groupName string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDeleteGroupRequest() + request.InstanceId = &instanceId + request.Group = &groupName + + 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.UseCkafkaClient().DeleteGroup(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 +} + +func (me *CkafkaService) DeleteCkafkaDatahubTaskById(ctx context.Context, taskId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDeleteDatahubTaskRequest() + request.TaskId = &taskId + + 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.UseCkafkaClient().DeleteDatahubTask(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 +} + +func (me *CkafkaService) DescribeDatahubTask(ctx context.Context, taskId string) (result *ckafka.DescribeDatahubTaskRes, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDescribeDatahubTaskRequest() + request.TaskId = &taskId + + 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.UseCkafkaClient().DescribeDatahubTask(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()) + if response == nil || response.Response == nil || response.Response.Result == nil { + errRet = fmt.Errorf("Response body is null") + return + } + result = response.Response.Result + return +} + +func (me *CkafkaService) CkafkaDatahubTaskStateRefreshFunc(taskId string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + ctx := tccommon.ContextNil + + object, err := me.DescribeDatahubTask(ctx, taskId) + + if err != nil { + return nil, "", err + } + + return object, helper.Int64ToStr(*object.Status), nil + } +} + +func (me *CkafkaService) DescribeCkafkaCkafkaZoneByFilter(ctx context.Context, param map[string]interface{}) (ckafkaZone *ckafka.ZoneResponse, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ckafka.NewDescribeCkafkaZoneRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "CdcId" { + request.CdcId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCkafkaClient().DescribeCkafkaZone(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()) + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("Response body is null") + return + } + ckafkaZone = response.Response.Result + + return +} + +func (me *CkafkaService) DescribeCkafkaRouteById(ctx context.Context, instanceId string, routeId int64) (route *ckafka.Route, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDescribeRouteRequest() + request.InstanceId = &instanceId + request.RouteId = &routeId + + 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.UseCkafkaClient().DescribeRoute(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()) + + if response.Response == nil || response.Response.Result == nil || len(response.Response.Result.Routers) < 1 { + return + } + + route = response.Response.Result.Routers[0] + return +} + +func (me *CkafkaService) DeleteCkafkaRouteById(ctx context.Context, instanceId string, routeId int64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := ckafka.NewDeleteRouteRequest() + request.InstanceId = &instanceId + request.RouteId = &routeId + + 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.UseCkafkaClient().DeleteRoute(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()) + // response.Response.Result.Data.FlowId + return +} + +func (me *CkafkaService) CkafkaRouteStateRefreshFunc(flowId int64, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + request := ckafka.NewDescribeTaskStatusRequest() + request.FlowId = helper.Int64(flowId) + object, err := me.client.UseCkafkaClient().DescribeTaskStatus(request) + + if err != nil { + return nil, "", err + } + status := strconv.FormatInt(*object.Response.Result.Status, 10) + return object, status, nil + } +} diff --git a/tencentcloud/services/ckafka/service_tencentcloud_tag.go b/tencentcloud/services/ckafka/service_tencentcloud_tag.go new file mode 100644 index 0000000000..a957bad4e6 --- /dev/null +++ b/tencentcloud/services/ckafka/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package ckafka + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 2749a1ba97f6b78658524ec9100d81fe9ebd232b Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 13:44:22 +0800 Subject: [PATCH 17/31] refactor: migrate package tencentcloud/services/clb --- ...ata_source_tc_postgresql_instances_test.go | 25 + tencentcloud/provider.go | 75 +- ...source_tc_clb_replace_cert_for_lbs_test.go | 35 - .../clb}/data_source_tc_clb_attachments.go | 21 +- .../data_source_tc_clb_attachments_test.go | 10 +- .../data_source_tc_clb_cluster_resources.go | 23 +- ...ta_source_tc_clb_cluster_resources_test.go | 10 +- .../clb}/data_source_tc_clb_cross_targets.go | 23 +- .../data_source_tc_clb_cross_targets_test.go | 10 +- .../data_source_tc_clb_exclusive_clusters.go | 23 +- ...a_source_tc_clb_exclusive_clusters_test.go | 10 +- .../clb}/data_source_tc_clb_idle_instances.go | 23 +- .../data_source_tc_clb_idle_instances_test.go | 10 +- .../data_source_tc_clb_instance_by_cert_id.go | 23 +- ..._source_tc_clb_instance_by_cert_id_test.go | 10 +- .../data_source_tc_clb_instance_detail.go | 23 +- ...data_source_tc_clb_instance_detail_test.go | 10 +- .../data_source_tc_clb_instance_traffic.go | 23 +- ...ata_source_tc_clb_instance_traffic_test.go | 10 +- .../clb}/data_source_tc_clb_instances.go | 23 +- .../clb}/data_source_tc_clb_instances_test.go | 12 +- .../clb}/data_source_tc_clb_listener_rules.go | 23 +- .../data_source_tc_clb_listener_rules_test.go | 8 +- .../clb}/data_source_tc_clb_listeners.go | 25 +- ...data_source_tc_clb_listeners_by_targets.go | 23 +- ...source_tc_clb_listeners_by_targets_test.go | 10 +- .../clb}/data_source_tc_clb_listeners_test.go | 8 +- .../clb}/data_source_tc_clb_redirections.go | 21 +- .../data_source_tc_clb_redirections_test.go | 8 +- .../clb}/data_source_tc_clb_resources.go | 23 +- .../clb}/data_source_tc_clb_resources_test.go | 10 +- .../data_source_tc_clb_target_group_list.go | 23 +- ...ta_source_tc_clb_target_group_list_test.go | 10 +- .../clb}/data_source_tc_clb_target_groups.go | 25 +- .../data_source_tc_clb_target_groups_test.go | 10 +- .../clb}/data_source_tc_clb_target_health.go | 23 +- .../data_source_tc_clb_target_health_test.go | 10 +- tencentcloud/services/clb/extension_as.go | 180 ++ tencentcloud/services/clb/extension_clb.go | 136 + tencentcloud/services/clb/extension_ssl.go | 88 + tencentcloud/services/clb/extension_tags.go | 3 + .../clb}/resource_tc_alb_server_attachment.go | 75 +- .../clb}/resource_tc_clb_attachment.go | 79 +- .../clb}/resource_tc_clb_attachment_test.go | 57 +- .../clb}/resource_tc_clb_customized_config.go | 75 +- ...urce_tc_clb_function_targets_attachment.go | 69 +- ...tc_clb_function_targets_attachment_test.go | 8 +- .../clb}/resource_tc_clb_instance.go | 153 +- ...ce_tc_clb_instance_mix_ip_target_config.go | 39 +- ..._clb_instance_mix_ip_target_config_test.go | 8 +- .../resource_tc_clb_instance_sla_config.go | 39 +- ...esource_tc_clb_instance_sla_config_test.go | 8 +- .../clb}/resource_tc_clb_instance_test.go | 62 +- .../resource_tc_clb_instance_testing_test.go | 16 +- .../clb}/resource_tc_clb_listener.go | 113 +- .../clb}/resource_tc_clb_listener_rule.go | 125 +- .../resource_tc_clb_listener_rule_test.go | 42 +- .../clb}/resource_tc_clb_listener_test.go | 74 +- .../resource_tc_clb_listener_testing_test.go | 8 +- .../clb}/resource_tc_clb_log_set.go | 32 +- .../clb}/resource_tc_clb_log_set_test.go | 26 +- .../clb}/resource_tc_clb_log_topic.go | 28 +- .../clb}/resource_tc_clb_log_topic_test.go | 18 +- .../clb}/resource_tc_clb_redirection.go | 87 +- .../clb}/resource_tc_clb_redirection_test.go | 32 +- .../resource_tc_clb_replace_cert_for_lbs.go | 27 +- ...source_tc_clb_replace_cert_for_lbs_test.go | 60 + ...source_tc_clb_security_group_attachment.go | 43 +- ...e_tc_clb_security_group_attachment_test.go | 8 +- ..._security_group_attachment_testing_test.go | 8 +- .../clb}/resource_tc_clb_snat_ip.go | 60 +- .../clb}/resource_tc_clb_snat_ip_test.go | 8 +- .../clb}/resource_tc_clb_target_group.go | 48 +- ...resource_tc_clb_target_group_attachment.go | 52 +- ...rce_tc_clb_target_group_attachment_test.go | 34 +- ...esource_tc_clb_target_group_attachments.go | 52 +- ...ce_tc_clb_target_group_attachments_test.go | 8 +- ...tc_clb_target_group_instance_attachment.go | 54 +- ...b_target_group_instance_attachment_test.go | 34 +- ..._group_instance_attachment_testing_test.go | 8 +- .../clb}/resource_tc_clb_target_group_test.go | 44 +- ...source_tc_clb_target_group_testing_test.go | 12 +- .../{ => services/clb}/resource_tc_lb.go | 65 +- .../{ => services/clb}/resource_tc_lb_test.go | 22 +- .../clb/service_tencent_ssl_certificate.go | 1489 +++++++++++ .../services/clb/service_tencentcloud_clb.go | 2328 +++++++++++++++++ .../services/clb/service_tencentcloud_cls.go | 1315 ++++++++++ .../services/clb/service_tencentcloud_ssl.go | 247 ++ .../services/clb/service_tencentcloud_tag.go | 415 +++ 89 files changed, 7615 insertions(+), 1198 deletions(-) delete mode 100644 tencentcloud/resource_tc_clb_replace_cert_for_lbs_test.go rename tencentcloud/{ => services/clb}/data_source_tc_clb_attachments.go (89%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_attachments_test.go (86%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_cluster_resources.go (89%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_cluster_resources_test.go (61%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_cross_targets.go (88%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_cross_targets_test.go (61%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_exclusive_clusters.go (93%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_exclusive_clusters_test.go (61%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_idle_instances.go (86%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_idle_instances_test.go (60%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_instance_by_cert_id.go (98%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_instance_by_cert_id_test.go (59%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_instance_detail.go (97%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_instance_detail_test.go (59%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_instance_traffic.go (85%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_instance_traffic_test.go (60%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_instances.go (93%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_instances_test.go (94%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_listener_rules.go (93%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_listener_rules_test.go (91%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_listeners.go (93%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_listeners_by_targets.go (93%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_listeners_by_targets_test.go (62%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_listeners_test.go (94%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_redirections.go (87%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_redirections_test.go (93%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_resources.go (91%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_resources_test.go (60%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_target_group_list.go (92%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_target_group_list_test.go (61%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_target_groups.go (92%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_target_groups_test.go (93%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_target_health.go (92%) rename tencentcloud/{ => services/clb}/data_source_tc_clb_target_health_test.go (60%) create mode 100644 tencentcloud/services/clb/extension_as.go create mode 100644 tencentcloud/services/clb/extension_clb.go create mode 100644 tencentcloud/services/clb/extension_ssl.go create mode 100644 tencentcloud/services/clb/extension_tags.go rename tencentcloud/{ => services/clb}/resource_tc_alb_server_attachment.go (78%) rename tencentcloud/{ => services/clb}/resource_tc_clb_attachment.go (84%) rename tencentcloud/{ => services/clb}/resource_tc_clb_attachment_test.go (88%) rename tencentcloud/{ => services/clb}/resource_tc_clb_customized_config.go (71%) rename tencentcloud/{ => services/clb}/resource_tc_clb_function_targets_attachment.go (84%) rename tencentcloud/{ => services/clb}/resource_tc_clb_function_targets_attachment_test.go (92%) rename tencentcloud/{ => services/clb}/resource_tc_clb_instance.go (82%) rename tencentcloud/{ => services/clb}/resource_tc_clb_instance_mix_ip_target_config.go (68%) rename tencentcloud/{ => services/clb}/resource_tc_clb_instance_mix_ip_target_config_test.go (83%) rename tencentcloud/{ => services/clb}/resource_tc_clb_instance_sla_config.go (72%) rename tencentcloud/{ => services/clb}/resource_tc_clb_instance_sla_config_test.go (82%) rename tencentcloud/{ => services/clb}/resource_tc_clb_instance_test.go (92%) rename tencentcloud/{ => services/clb}/resource_tc_clb_instance_testing_test.go (94%) rename tencentcloud/{ => services/clb}/resource_tc_clb_listener.go (86%) rename tencentcloud/{ => services/clb}/resource_tc_clb_listener_rule.go (83%) rename tencentcloud/{ => services/clb}/resource_tc_clb_listener_rule_test.go (89%) rename tencentcloud/{ => services/clb}/resource_tc_clb_listener_test.go (93%) rename tencentcloud/{ => services/clb}/resource_tc_clb_listener_testing_test.go (93%) rename tencentcloud/{ => services/clb}/resource_tc_clb_log_set.go (70%) rename tencentcloud/{ => services/clb}/resource_tc_clb_log_set_test.go (70%) rename tencentcloud/{ => services/clb}/resource_tc_clb_log_topic.go (78%) rename tencentcloud/{ => services/clb}/resource_tc_clb_log_topic_test.go (70%) rename tencentcloud/{ => services/clb}/resource_tc_clb_redirection.go (77%) rename tencentcloud/{ => services/clb}/resource_tc_clb_redirection_test.go (84%) rename tencentcloud/{ => services/clb}/resource_tc_clb_replace_cert_for_lbs.go (85%) create mode 100644 tencentcloud/services/clb/resource_tc_clb_replace_cert_for_lbs_test.go rename tencentcloud/{ => services/clb}/resource_tc_clb_security_group_attachment.go (70%) rename tencentcloud/{ => services/clb}/resource_tc_clb_security_group_attachment_test.go (83%) rename tencentcloud/{ => services/clb}/resource_tc_clb_security_group_attachment_testing_test.go (83%) rename tencentcloud/{ => services/clb}/resource_tc_clb_snat_ip.go (74%) rename tencentcloud/{ => services/clb}/resource_tc_clb_snat_ip_test.go (95%) rename tencentcloud/{ => services/clb}/resource_tc_clb_target_group.go (73%) rename tencentcloud/{ => services/clb}/resource_tc_clb_target_group_attachment.go (78%) rename tencentcloud/{ => services/clb}/resource_tc_clb_target_group_attachment_test.go (85%) rename tencentcloud/{ => services/clb}/resource_tc_clb_target_group_attachments.go (77%) rename tencentcloud/{ => services/clb}/resource_tc_clb_target_group_attachments_test.go (95%) rename tencentcloud/{ => services/clb}/resource_tc_clb_target_group_instance_attachment.go (69%) rename tencentcloud/{ => services/clb}/resource_tc_clb_target_group_instance_attachment_test.go (80%) rename tencentcloud/{ => services/clb}/resource_tc_clb_target_group_instance_attachment_testing_test.go (92%) rename tencentcloud/{ => services/clb}/resource_tc_clb_target_group_test.go (78%) rename tencentcloud/{ => services/clb}/resource_tc_clb_target_group_testing_test.go (89%) rename tencentcloud/{ => services/clb}/resource_tc_lb.go (73%) rename tencentcloud/{ => services/clb}/resource_tc_lb_test.go (71%) create mode 100644 tencentcloud/services/clb/service_tencent_ssl_certificate.go create mode 100644 tencentcloud/services/clb/service_tencentcloud_clb.go create mode 100644 tencentcloud/services/clb/service_tencentcloud_cls.go create mode 100644 tencentcloud/services/clb/service_tencentcloud_ssl.go create mode 100644 tencentcloud/services/clb/service_tencentcloud_tag.go diff --git a/tencentcloud/data_source_tc_postgresql_instances_test.go b/tencentcloud/data_source_tc_postgresql_instances_test.go index 45de81440d..ac40672c66 100644 --- a/tencentcloud/data_source_tc_postgresql_instances_test.go +++ b/tencentcloud/data_source_tc_postgresql_instances_test.go @@ -1,9 +1,14 @@ package tencentcloud import ( + "context" + "fmt" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" ) var testDataPostgresqlInstancesName = "data.tencentcloud_postgresql_instances.id_test" @@ -43,6 +48,26 @@ func TestAccTencentCloudPostgresqlInstancesDataSource(t *testing.T) { }) } +func testAccCheckLBDestroy(s *terraform.State) error { + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + + clbService := ClbService{ + client: testAccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn(), + } + for _, rs := range s.RootModule().Resources { + if rs.Type != "tencentcloud_lb" { + continue + } + + _, err := clbService.DescribeLoadBalancerById(ctx, rs.Primary.ID) + if err == nil { + return fmt.Errorf("clb instance still exists: %s", rs.Primary.ID) + } + } + return nil +} + const testAccTencentCloudDataPostgresqlInstanceBasic = CommonPresetPGSQL + ` data "tencentcloud_postgresql_instances" "id_test"{ diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index eb55717076..a12e97db26 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ckafka" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ciam" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" @@ -327,23 +328,23 @@ func Provider() *schema.Provider { "tencentcloud_cbs_storages_set": cbs.DataSourceTencentCloudCbsStoragesSet(), "tencentcloud_cbs_snapshots": cbs.DataSourceTencentCloudCbsSnapshots(), "tencentcloud_cbs_snapshot_policies": cbs.DataSourceTencentCloudCbsSnapshotPolicies(), - "tencentcloud_clb_instances": dataSourceTencentCloudClbInstances(), - "tencentcloud_clb_listeners": dataSourceTencentCloudClbListeners(), - "tencentcloud_clb_listener_rules": dataSourceTencentCloudClbListenerRules(), - "tencentcloud_clb_attachments": dataSourceTencentCloudClbServerAttachments(), - "tencentcloud_clb_redirections": dataSourceTencentCloudClbRedirections(), - "tencentcloud_clb_target_groups": dataSourceTencentCloudClbTargetGroups(), - "tencentcloud_clb_cluster_resources": dataSourceTencentCloudClbClusterResources(), - "tencentcloud_clb_cross_targets": dataSourceTencentCloudClbCrossTargets(), - "tencentcloud_clb_exclusive_clusters": dataSourceTencentCloudClbExclusiveClusters(), - "tencentcloud_clb_idle_instances": dataSourceTencentCloudClbIdleInstances(), - "tencentcloud_clb_listeners_by_targets": dataSourceTencentCloudClbListenersByTargets(), - "tencentcloud_clb_instance_by_cert_id": dataSourceTencentCloudClbInstanceByCertId(), - "tencentcloud_clb_instance_traffic": dataSourceTencentCloudClbInstanceTraffic(), - "tencentcloud_clb_instance_detail": dataSourceTencentCloudClbInstanceDetail(), - "tencentcloud_clb_resources": dataSourceTencentCloudClbResources(), - "tencentcloud_clb_target_group_list": dataSourceTencentCloudClbTargetGroupList(), - "tencentcloud_clb_target_health": dataSourceTencentCloudClbTargetHealth(), + "tencentcloud_clb_instances": clb.DataSourceTencentCloudClbInstances(), + "tencentcloud_clb_listeners": clb.DataSourceTencentCloudClbListeners(), + "tencentcloud_clb_listener_rules": clb.DataSourceTencentCloudClbListenerRules(), + "tencentcloud_clb_attachments": clb.DataSourceTencentCloudClbServerAttachments(), + "tencentcloud_clb_redirections": clb.DataSourceTencentCloudClbRedirections(), + "tencentcloud_clb_target_groups": clb.DataSourceTencentCloudClbTargetGroups(), + "tencentcloud_clb_cluster_resources": clb.DataSourceTencentCloudClbClusterResources(), + "tencentcloud_clb_cross_targets": clb.DataSourceTencentCloudClbCrossTargets(), + "tencentcloud_clb_exclusive_clusters": clb.DataSourceTencentCloudClbExclusiveClusters(), + "tencentcloud_clb_idle_instances": clb.DataSourceTencentCloudClbIdleInstances(), + "tencentcloud_clb_listeners_by_targets": clb.DataSourceTencentCloudClbListenersByTargets(), + "tencentcloud_clb_instance_by_cert_id": clb.DataSourceTencentCloudClbInstanceByCertId(), + "tencentcloud_clb_instance_traffic": clb.DataSourceTencentCloudClbInstanceTraffic(), + "tencentcloud_clb_instance_detail": clb.DataSourceTencentCloudClbInstanceDetail(), + "tencentcloud_clb_resources": clb.DataSourceTencentCloudClbResources(), + "tencentcloud_clb_target_group_list": clb.DataSourceTencentCloudClbTargetGroupList(), + "tencentcloud_clb_target_health": clb.DataSourceTencentCloudClbTargetHealth(), "tencentcloud_elasticsearch_instances": dataSourceTencentCloudElasticsearchInstances(), "tencentcloud_elasticsearch_instance_logs": dataSourceTencentCloudElasticsearchInstanceLogs(), "tencentcloud_elasticsearch_instance_operations": dataSourceTencentCloudElasticsearchInstanceOperations(), @@ -1007,25 +1008,25 @@ func Provider() *schema.Provider { "tencentcloud_security_group_rule": resourceTencentCloudSecurityGroupRule(), "tencentcloud_security_group_rule_set": resourceTencentCloudSecurityGroupRuleSet(), "tencentcloud_security_group_lite_rule": resourceTencentCloudSecurityGroupLiteRule(), - "tencentcloud_lb": resourceTencentCloudLB(), - "tencentcloud_alb_server_attachment": resourceTencentCloudAlbServerAttachment(), - "tencentcloud_clb_instance": resourceTencentCloudClbInstance(), - "tencentcloud_clb_listener": resourceTencentCloudClbListener(), - "tencentcloud_clb_listener_rule": resourceTencentCloudClbListenerRule(), - "tencentcloud_clb_attachment": resourceTencentCloudClbServerAttachment(), - "tencentcloud_clb_redirection": resourceTencentCloudClbRedirection(), - "tencentcloud_clb_target_group": resourceTencentCloudClbTargetGroup(), - "tencentcloud_clb_target_group_instance_attachment": resourceTencentCloudClbTGAttachmentInstance(), - "tencentcloud_clb_target_group_attachment": resourceTencentCloudClbTargetGroupAttachment(), - "tencentcloud_clb_log_set": resourceTencentCloudClbLogSet(), - "tencentcloud_clb_log_topic": resourceTencentCloudClbLogTopic(), - "tencentcloud_clb_customized_config": resourceTencentCloudClbCustomizedConfig(), - "tencentcloud_clb_snat_ip": resourceTencentCloudClbSnatIp(), - "tencentcloud_clb_function_targets_attachment": resourceTencentCloudClbFunctionTargetsAttachment(), - "tencentcloud_clb_instance_mix_ip_target_config": resourceTencentCloudClbInstanceMixIpTargetConfig(), - "tencentcloud_clb_instance_sla_config": resourceTencentCloudClbInstanceSlaConfig(), - "tencentcloud_clb_replace_cert_for_lbs": resourceTencentCloudClbReplaceCertForLbs(), - "tencentcloud_clb_security_group_attachment": resourceTencentCloudClbSecurityGroupAttachment(), + "tencentcloud_lb": clb.ResourceTencentCloudLB(), + "tencentcloud_alb_server_attachment": clb.ResourceTencentCloudAlbServerAttachment(), + "tencentcloud_clb_instance": clb.ResourceTencentCloudClbInstance(), + "tencentcloud_clb_listener": clb.ResourceTencentCloudClbListener(), + "tencentcloud_clb_listener_rule": clb.ResourceTencentCloudClbListenerRule(), + "tencentcloud_clb_attachment": clb.ResourceTencentCloudClbServerAttachment(), + "tencentcloud_clb_redirection": clb.ResourceTencentCloudClbRedirection(), + "tencentcloud_clb_target_group": clb.ResourceTencentCloudClbTargetGroup(), + "tencentcloud_clb_target_group_instance_attachment": clb.ResourceTencentCloudClbTGAttachmentInstance(), + "tencentcloud_clb_target_group_attachment": clb.ResourceTencentCloudClbTargetGroupAttachment(), + "tencentcloud_clb_log_set": clb.ResourceTencentCloudClbLogSet(), + "tencentcloud_clb_log_topic": clb.ResourceTencentCloudClbLogTopic(), + "tencentcloud_clb_customized_config": clb.ResourceTencentCloudClbCustomizedConfig(), + "tencentcloud_clb_snat_ip": clb.ResourceTencentCloudClbSnatIp(), + "tencentcloud_clb_function_targets_attachment": clb.ResourceTencentCloudClbFunctionTargetsAttachment(), + "tencentcloud_clb_instance_mix_ip_target_config": clb.ResourceTencentCloudClbInstanceMixIpTargetConfig(), + "tencentcloud_clb_instance_sla_config": clb.ResourceTencentCloudClbInstanceSlaConfig(), + "tencentcloud_clb_replace_cert_for_lbs": clb.ResourceTencentCloudClbReplaceCertForLbs(), + "tencentcloud_clb_security_group_attachment": clb.ResourceTencentCloudClbSecurityGroupAttachment(), "tencentcloud_container_cluster": resourceTencentCloudContainerCluster(), "tencentcloud_container_cluster_instance": resourceTencentCloudContainerClusterInstance(), "tencentcloud_kubernetes_cluster": resourceTencentCloudTkeCluster(), @@ -1868,7 +1869,7 @@ func Provider() *schema.Provider { "tencentcloud_cdwpg_instance": cdwpg.ResourceTencentCloudCdwpgInstance(), "tencentcloud_clickhouse_keyval_config": cdwch.ResourceTencentCloudClickhouseKeyvalConfig(), "tencentcloud_clickhouse_xml_config": cdwch.ResourceTencentCloudClickhouseXmlConfig(), - "tencentcloud_clb_target_group_attachments": resourceTencentCloudClbTargetGroupAttachments(), + "tencentcloud_clb_target_group_attachments": clb.ResourceTencentCloudClbTargetGroupAttachments(), }, ConfigureFunc: providerConfigure, diff --git a/tencentcloud/resource_tc_clb_replace_cert_for_lbs_test.go b/tencentcloud/resource_tc_clb_replace_cert_for_lbs_test.go deleted file mode 100644 index b91f75d011..0000000000 --- a/tencentcloud/resource_tc_clb_replace_cert_for_lbs_test.go +++ /dev/null @@ -1,35 +0,0 @@ -package tencentcloud - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccTencentCloudNeedFixClbReplaceCertForLbsResource_basic(t *testing.T) { - t.Parallel() - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - Providers: testAccProviders, - Steps: []resource.TestStep{ - { - Config: testAccClbReplaceCertForLbs, - Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_clb_replace_cert_for_lbs.replace_cert_for_lbs", "id")), - }, - }, - }) -} - -var testAccClbReplaceCertForLbs = fmt.Sprintf(` - -resource "tencentcloud_clb_replace_cert_for_lbs" "replace_cert_for_lbs" { - old_certificate_id = "zjUMifFK" - certificate { - cert_ca_name = "test" - cert_ca_content = "%s" - } -} -`, testAccSslCertificateCA) diff --git a/tencentcloud/data_source_tc_clb_attachments.go b/tencentcloud/services/clb/data_source_tc_clb_attachments.go similarity index 89% rename from tencentcloud/data_source_tc_clb_attachments.go rename to tencentcloud/services/clb/data_source_tc_clb_attachments.go index e291db9aaa..490fc0b3bf 100644 --- a/tencentcloud/data_source_tc_clb_attachments.go +++ b/tencentcloud/services/clb/data_source_tc_clb_attachments.go @@ -1,16 +1,19 @@ -package tencentcloud +package clb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbServerAttachments() *schema.Resource { +func DataSourceTencentCloudClbServerAttachments() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbServerAttachmentsRead, @@ -93,10 +96,10 @@ func dataSourceTencentCloudClbServerAttachments() *schema.Resource { } func dataSourceTencentCloudClbServerAttachmentsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_attachments.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_attachments.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]string) clbId := d.Get("clb_id").(string) @@ -118,13 +121,13 @@ func dataSourceTencentCloudClbServerAttachmentsRead(d *schema.ResourceData, meta params["listener_id"] = listenerId clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var attachments []*clb.ListenerBackend - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := clbService.DescribeAttachmentsByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } attachments = results return nil @@ -168,7 +171,7 @@ func dataSourceTencentCloudClbServerAttachmentsRead(d *schema.ResourceData, meta output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), attachmentList); e != nil { + if e := tccommon.WriteToFile(output.(string), attachmentList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_attachments_test.go b/tencentcloud/services/clb/data_source_tc_clb_attachments_test.go similarity index 86% rename from tencentcloud/data_source_tc_clb_attachments_test.go rename to tencentcloud/services/clb/data_source_tc_clb_attachments_test.go index a44d19af48..194d80c76e 100644 --- a/tencentcloud/data_source_tc_clb_attachments_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_attachments_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ func TestAccTencentCloudClbServerAttachmentsDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbServerAttachmentDestroy, Steps: []resource.TestStep{ { @@ -28,7 +30,7 @@ func TestAccTencentCloudClbServerAttachmentsDataSource(t *testing.T) { }) } -const testAccTencentCloudDataSourceClbServerAttachments = instanceCommonTestCase + ` +const testAccTencentCloudDataSourceClbServerAttachments = tcacctest.InstanceCommonTestCase + ` resource "tencentcloud_clb_instance" "foo" { network_type = "OPEN" clb_name = var.instance_name diff --git a/tencentcloud/data_source_tc_clb_cluster_resources.go b/tencentcloud/services/clb/data_source_tc_clb_cluster_resources.go similarity index 89% rename from tencentcloud/data_source_tc_clb_cluster_resources.go rename to tencentcloud/services/clb/data_source_tc_clb_cluster_resources.go index 07fb4760f2..3072e66136 100644 --- a/tencentcloud/data_source_tc_clb_cluster_resources.go +++ b/tencentcloud/services/clb/data_source_tc_clb_cluster_resources.go @@ -1,15 +1,18 @@ -package tencentcloud +package clb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbClusterResources() *schema.Resource { +func DataSourceTencentCloudClbClusterResources() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbClusterResourcesRead, Schema: map[string]*schema.Schema{ @@ -111,12 +114,12 @@ func dataSourceTencentCloudClbClusterResources() *schema.Resource { } func dataSourceTencentCloudClbClusterResourcesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_cluster_resources.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_cluster_resources.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("filters"); ok { @@ -139,14 +142,14 @@ func dataSourceTencentCloudClbClusterResourcesRead(d *schema.ResourceData, meta paramMap["Filters"] = tmpSet } - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var clusterResourceSet []*clb.ClusterResource - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClbClusterResourcesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } clusterResourceSet = result return nil @@ -210,7 +213,7 @@ func dataSourceTencentCloudClbClusterResourcesRead(d *schema.ResourceData, meta d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_cluster_resources_test.go b/tencentcloud/services/clb/data_source_tc_clb_cluster_resources_test.go similarity index 61% rename from tencentcloud/data_source_tc_clb_cluster_resources_test.go rename to tencentcloud/services/clb/data_source_tc_clb_cluster_resources_test.go index d1f552288a..6a7b063e9f 100644 --- a/tencentcloud/data_source_tc_clb_cluster_resources_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_cluster_resources_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudClbClusterResourcesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbClusterResourcesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clb_cluster_resources.cluster_resources")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clb_cluster_resources.cluster_resources")), }, }, }) diff --git a/tencentcloud/data_source_tc_clb_cross_targets.go b/tencentcloud/services/clb/data_source_tc_clb_cross_targets.go similarity index 88% rename from tencentcloud/data_source_tc_clb_cross_targets.go rename to tencentcloud/services/clb/data_source_tc_clb_cross_targets.go index b6fd8fa655..fb909165ea 100644 --- a/tencentcloud/data_source_tc_clb_cross_targets.go +++ b/tencentcloud/services/clb/data_source_tc_clb_cross_targets.go @@ -1,15 +1,18 @@ -package tencentcloud +package clb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbCrossTargets() *schema.Resource { +func DataSourceTencentCloudClbCrossTargets() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbCrossTargetsRead, Schema: map[string]*schema.Schema{ @@ -96,12 +99,12 @@ func dataSourceTencentCloudClbCrossTargets() *schema.Resource { } func dataSourceTencentCloudClbCrossTargetsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_cross_targets.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_cross_targets.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("filters"); ok { @@ -124,14 +127,14 @@ func dataSourceTencentCloudClbCrossTargetsRead(d *schema.ResourceData, meta inte paramMap["Filters"] = tmpSet } - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var crossTargetSet []*clb.CrossTargets - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClbCrossTargetsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } crossTargetSet = result return nil @@ -189,7 +192,7 @@ func dataSourceTencentCloudClbCrossTargetsRead(d *schema.ResourceData, meta inte d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_cross_targets_test.go b/tencentcloud/services/clb/data_source_tc_clb_cross_targets_test.go similarity index 61% rename from tencentcloud/data_source_tc_clb_cross_targets_test.go rename to tencentcloud/services/clb/data_source_tc_clb_cross_targets_test.go index b673f7d737..3af9d4f34b 100644 --- a/tencentcloud/data_source_tc_clb_cross_targets_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_cross_targets_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudClbCrossTargetsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbCrossTargetsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clb_cross_targets.cross_targets")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clb_cross_targets.cross_targets")), }, }, }) diff --git a/tencentcloud/data_source_tc_clb_exclusive_clusters.go b/tencentcloud/services/clb/data_source_tc_clb_exclusive_clusters.go similarity index 93% rename from tencentcloud/data_source_tc_clb_exclusive_clusters.go rename to tencentcloud/services/clb/data_source_tc_clb_exclusive_clusters.go index bc3ad785e1..09b7161737 100644 --- a/tencentcloud/data_source_tc_clb_exclusive_clusters.go +++ b/tencentcloud/services/clb/data_source_tc_clb_exclusive_clusters.go @@ -1,15 +1,18 @@ -package tencentcloud +package clb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbExclusiveClusters() *schema.Resource { +func DataSourceTencentCloudClbExclusiveClusters() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbExclusiveClustersRead, Schema: map[string]*schema.Schema{ @@ -191,12 +194,12 @@ func dataSourceTencentCloudClbExclusiveClusters() *schema.Resource { } func dataSourceTencentCloudClbExclusiveClustersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_exclusive_clusters.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_exclusive_clusters.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("filters"); ok { @@ -219,14 +222,14 @@ func dataSourceTencentCloudClbExclusiveClustersRead(d *schema.ResourceData, meta paramMap["Filters"] = tmpSet } - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var clusterSet []*clb.Cluster - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClbExclusiveClustersByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } clusterSet = result return nil @@ -354,7 +357,7 @@ func dataSourceTencentCloudClbExclusiveClustersRead(d *schema.ResourceData, meta d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_exclusive_clusters_test.go b/tencentcloud/services/clb/data_source_tc_clb_exclusive_clusters_test.go similarity index 61% rename from tencentcloud/data_source_tc_clb_exclusive_clusters_test.go rename to tencentcloud/services/clb/data_source_tc_clb_exclusive_clusters_test.go index 95c052e332..8931cdaee5 100644 --- a/tencentcloud/data_source_tc_clb_exclusive_clusters_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_exclusive_clusters_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudClbExclusiveClustersDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbExclusiveClustersDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clb_exclusive_clusters.exclusive_clusters")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clb_exclusive_clusters.exclusive_clusters")), }, }, }) diff --git a/tencentcloud/data_source_tc_clb_idle_instances.go b/tencentcloud/services/clb/data_source_tc_clb_idle_instances.go similarity index 86% rename from tencentcloud/data_source_tc_clb_idle_instances.go rename to tencentcloud/services/clb/data_source_tc_clb_idle_instances.go index fe7da765d4..83d5302346 100644 --- a/tencentcloud/data_source_tc_clb_idle_instances.go +++ b/tencentcloud/services/clb/data_source_tc_clb_idle_instances.go @@ -1,15 +1,18 @@ -package tencentcloud +package clb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbIdleInstances() *schema.Resource { +func DataSourceTencentCloudClbIdleInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbIdleInstancesRead, Schema: map[string]*schema.Schema{ @@ -79,26 +82,26 @@ func dataSourceTencentCloudClbIdleInstances() *schema.Resource { } func dataSourceTencentCloudClbIdleInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_idle_loadbalancers.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_idle_loadbalancers.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("load_balancer_region"); ok { paramMap["LoadBalancerRegion"] = helper.String(v.(string)) } - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var idleLoadBalancers []*clb.IdleLoadBalancer - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClbIdleInstancesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } idleLoadBalancers = result return nil @@ -156,7 +159,7 @@ func dataSourceTencentCloudClbIdleInstancesRead(d *schema.ResourceData, meta int d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_idle_instances_test.go b/tencentcloud/services/clb/data_source_tc_clb_idle_instances_test.go similarity index 60% rename from tencentcloud/data_source_tc_clb_idle_instances_test.go rename to tencentcloud/services/clb/data_source_tc_clb_idle_instances_test.go index b36776571b..df23ecb323 100644 --- a/tencentcloud/data_source_tc_clb_idle_instances_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_idle_instances_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudClbIdleInstancesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbIdleInstancesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clb_idle_instances.idle_instance")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clb_idle_instances.idle_instance")), }, }, }) diff --git a/tencentcloud/data_source_tc_clb_instance_by_cert_id.go b/tencentcloud/services/clb/data_source_tc_clb_instance_by_cert_id.go similarity index 98% rename from tencentcloud/data_source_tc_clb_instance_by_cert_id.go rename to tencentcloud/services/clb/data_source_tc_clb_instance_by_cert_id.go index 86979b56ab..d95b9cf563 100644 --- a/tencentcloud/data_source_tc_clb_instance_by_cert_id.go +++ b/tencentcloud/services/clb/data_source_tc_clb_instance_by_cert_id.go @@ -1,15 +1,18 @@ -package tencentcloud +package clb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbInstanceByCertId() *schema.Resource { +func DataSourceTencentCloudClbInstanceByCertId() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbInstanceByCertIdRead, Schema: map[string]*schema.Schema{ @@ -574,12 +577,12 @@ func dataSourceTencentCloudClbInstanceByCertId() *schema.Resource { } func dataSourceTencentCloudClbInstanceByCertIdRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_instance_by_cert_id.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_instance_by_cert_id.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("cert_ids"); ok { @@ -587,14 +590,14 @@ func dataSourceTencentCloudClbInstanceByCertIdRead(d *schema.ResourceData, meta paramMap["CertIds"] = helper.InterfacesStringsPoint(certIdsSet) } - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var certSet []*clb.CertIdRelatedWithLoadBalancers - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClbInstanceByCertId(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } certSet = result return nil @@ -1048,7 +1051,7 @@ func dataSourceTencentCloudClbInstanceByCertIdRead(d *schema.ResourceData, meta d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_instance_by_cert_id_test.go b/tencentcloud/services/clb/data_source_tc_clb_instance_by_cert_id_test.go similarity index 59% rename from tencentcloud/data_source_tc_clb_instance_by_cert_id_test.go rename to tencentcloud/services/clb/data_source_tc_clb_instance_by_cert_id_test.go index ee670b62ff..5390518170 100644 --- a/tencentcloud/data_source_tc_clb_instance_by_cert_id_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_instance_by_cert_id_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudClbInstanceByCertIdDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbInstanceByCertIdDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clb_instance_by_cert_id.instance_by_cert_id")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clb_instance_by_cert_id.instance_by_cert_id")), }, }, }) diff --git a/tencentcloud/data_source_tc_clb_instance_detail.go b/tencentcloud/services/clb/data_source_tc_clb_instance_detail.go similarity index 97% rename from tencentcloud/data_source_tc_clb_instance_detail.go rename to tencentcloud/services/clb/data_source_tc_clb_instance_detail.go index 244d8a10d3..122cdd3950 100644 --- a/tencentcloud/data_source_tc_clb_instance_detail.go +++ b/tencentcloud/services/clb/data_source_tc_clb_instance_detail.go @@ -1,15 +1,18 @@ -package tencentcloud +package clb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbInstanceDetail() *schema.Resource { +func DataSourceTencentCloudClbInstanceDetail() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbInstanceDetailRead, Schema: map[string]*schema.Schema{ @@ -331,12 +334,12 @@ func dataSourceTencentCloudClbInstanceDetail() *schema.Resource { } func dataSourceTencentCloudClbInstanceDetailRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_instance_detail.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_instance_detail.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("fields"); ok { @@ -368,14 +371,14 @@ func dataSourceTencentCloudClbInstanceDetailRead(d *schema.ResourceData, meta in paramMap["Filters"] = tmpSet } - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var loadBalancerDetailSet []*clb.LoadBalancerDetail - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClbInstanceDetailByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } loadBalancerDetailSet = result return nil @@ -602,7 +605,7 @@ func dataSourceTencentCloudClbInstanceDetailRead(d *schema.ResourceData, meta in d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_instance_detail_test.go b/tencentcloud/services/clb/data_source_tc_clb_instance_detail_test.go similarity index 59% rename from tencentcloud/data_source_tc_clb_instance_detail_test.go rename to tencentcloud/services/clb/data_source_tc_clb_instance_detail_test.go index 3b94739229..488a0694ba 100644 --- a/tencentcloud/data_source_tc_clb_instance_detail_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_instance_detail_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudClbInstanceDetailDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbInstanceDetailDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clb_instance_detail.instance_detail")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clb_instance_detail.instance_detail")), }, }, }) diff --git a/tencentcloud/data_source_tc_clb_instance_traffic.go b/tencentcloud/services/clb/data_source_tc_clb_instance_traffic.go similarity index 85% rename from tencentcloud/data_source_tc_clb_instance_traffic.go rename to tencentcloud/services/clb/data_source_tc_clb_instance_traffic.go index 07bc8a9ebf..3c3258bac4 100644 --- a/tencentcloud/data_source_tc_clb_instance_traffic.go +++ b/tencentcloud/services/clb/data_source_tc_clb_instance_traffic.go @@ -1,15 +1,18 @@ -package tencentcloud +package clb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbInstanceTraffic() *schema.Resource { +func DataSourceTencentCloudClbInstanceTraffic() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbInstanceTrafficRead, Schema: map[string]*schema.Schema{ @@ -69,26 +72,26 @@ func dataSourceTencentCloudClbInstanceTraffic() *schema.Resource { } func dataSourceTencentCloudClbInstanceTrafficRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_instance_traffic.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_instance_traffic.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("load_balancer_region"); ok { paramMap["LoadBalancerRegion"] = helper.String(v.(string)) } - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var loadBalancerTraffic []*clb.LoadBalancerTraffic - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClbInstanceTraffic(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } loadBalancerTraffic = result return nil @@ -138,7 +141,7 @@ func dataSourceTencentCloudClbInstanceTrafficRead(d *schema.ResourceData, meta i d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_instance_traffic_test.go b/tencentcloud/services/clb/data_source_tc_clb_instance_traffic_test.go similarity index 60% rename from tencentcloud/data_source_tc_clb_instance_traffic_test.go rename to tencentcloud/services/clb/data_source_tc_clb_instance_traffic_test.go index 9e9f8753c7..bc6149cbbe 100644 --- a/tencentcloud/data_source_tc_clb_instance_traffic_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_instance_traffic_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudClbInstanceTrafficDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbInstanceTrafficDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clb_instance_traffic.instance_traffic")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clb_instance_traffic.instance_traffic")), }, }, }) diff --git a/tencentcloud/data_source_tc_clb_instances.go b/tencentcloud/services/clb/data_source_tc_clb_instances.go similarity index 93% rename from tencentcloud/data_source_tc_clb_instances.go rename to tencentcloud/services/clb/data_source_tc_clb_instances.go index 111d0a67a4..52c43a33be 100644 --- a/tencentcloud/data_source_tc_clb_instances.go +++ b/tencentcloud/services/clb/data_source_tc_clb_instances.go @@ -1,16 +1,19 @@ -package tencentcloud +package clb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbInstances() *schema.Resource { +func DataSourceTencentCloudClbInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbInstancesRead, @@ -23,7 +26,7 @@ func dataSourceTencentCloudClbInstances() *schema.Resource { "network_type": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CLB_NETWORK_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CLB_NETWORK_TYPE), Description: "Type of CLB instance, and available values include `OPEN` and `INTERNAL`.", }, "clb_name": { @@ -177,10 +180,10 @@ func dataSourceTencentCloudClbInstances() *schema.Resource { } func dataSourceTencentCloudClbInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_instances.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_instances.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]interface{}) if v, ok := d.GetOk("clb_id"); ok { @@ -200,13 +203,13 @@ func dataSourceTencentCloudClbInstancesRead(d *schema.ResourceData, meta interfa } clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var clbs []*clb.LoadBalancer - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := clbService.DescribeLoadBalancerByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } clbs = results return nil @@ -266,7 +269,7 @@ func dataSourceTencentCloudClbInstancesRead(d *schema.ResourceData, meta interfa output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), clbList); e != nil { + if e := tccommon.WriteToFile(output.(string), clbList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_instances_test.go b/tencentcloud/services/clb/data_source_tc_clb_instances_test.go similarity index 94% rename from tencentcloud/data_source_tc_clb_instances_test.go rename to tencentcloud/services/clb/data_source_tc_clb_instances_test.go index 332bebe276..9661ce801c 100644 --- a/tencentcloud/data_source_tc_clb_instances_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_instances_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ func TestAccTencentCloudClbInstancesDataSource_internal(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbInstanceDestroy, Steps: []resource.TestStep{ { @@ -40,8 +42,8 @@ func TestAccTencentCloudClbInstancesDataSource_open(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbInstanceDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_clb_listener_rules.go b/tencentcloud/services/clb/data_source_tc_clb_listener_rules.go similarity index 93% rename from tencentcloud/data_source_tc_clb_listener_rules.go rename to tencentcloud/services/clb/data_source_tc_clb_listener_rules.go index 449ef2cdaf..5b6bcc90fb 100644 --- a/tencentcloud/data_source_tc_clb_listener_rules.go +++ b/tencentcloud/services/clb/data_source_tc_clb_listener_rules.go @@ -1,16 +1,19 @@ -package tencentcloud +package clb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbListenerRules() *schema.Resource { +func DataSourceTencentCloudClbListenerRules() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbListenerRulesRead, @@ -43,7 +46,7 @@ func dataSourceTencentCloudClbListenerRules() *schema.Resource { "scheduler": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CLB_LISTENER_SCHEDULER), + ValidateFunc: tccommon.ValidateAllowedStringValue(CLB_LISTENER_SCHEDULER), Description: "Scheduling method of the forwarding rule of thr CLB listener, and available values include `WRR`, `IP HASH` and `LEAST_CONN`. The default is `WRR`.", }, "result_output_file": { @@ -160,10 +163,10 @@ func dataSourceTencentCloudClbListenerRules() *schema.Resource { } func dataSourceTencentCloudClbListenerRulesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_listener_rules.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_listener_rules.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) listenerId := d.Get("listener_id").(string) checkErr := ListenerIdCheck(listenerId) @@ -195,13 +198,13 @@ func dataSourceTencentCloudClbListenerRulesRead(d *schema.ResourceData, meta int } clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var rules []*clb.RuleOutput - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := clbService.DescribeRulesByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } rules = results return nil @@ -256,7 +259,7 @@ func dataSourceTencentCloudClbListenerRulesRead(d *schema.ResourceData, meta int output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), ruleList); e != nil { + if e := tccommon.WriteToFile(output.(string), ruleList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_listener_rules_test.go b/tencentcloud/services/clb/data_source_tc_clb_listener_rules_test.go similarity index 91% rename from tencentcloud/data_source_tc_clb_listener_rules_test.go rename to tencentcloud/services/clb/data_source_tc_clb_listener_rules_test.go index 12ef68b57b..7db52f8612 100644 --- a/tencentcloud/data_source_tc_clb_listener_rules_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_listener_rules_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ func TestAccTencentCloudClbListenerRulesDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbListenerRuleDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_clb_listeners.go b/tencentcloud/services/clb/data_source_tc_clb_listeners.go similarity index 93% rename from tencentcloud/data_source_tc_clb_listeners.go rename to tencentcloud/services/clb/data_source_tc_clb_listeners.go index d5daec3e14..4adb531b22 100644 --- a/tencentcloud/data_source_tc_clb_listeners.go +++ b/tencentcloud/services/clb/data_source_tc_clb_listeners.go @@ -1,16 +1,19 @@ -package tencentcloud +package clb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbListeners() *schema.Resource { +func DataSourceTencentCloudClbListeners() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbListenersRead, @@ -28,13 +31,13 @@ func dataSourceTencentCloudClbListeners() *schema.Resource { "protocol": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CLB_LISTENER_PROTOCOL), + ValidateFunc: tccommon.ValidateAllowedStringValue(CLB_LISTENER_PROTOCOL), Description: "Type of protocol within the listener, and available values are `TCP`, `UDP`, `HTTP`, `HTTPS` and `TCP_SSL`.", }, "port": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerInRange(1, 65535), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 65535), Description: "Port of the CLB listener.", }, "result_output_file": { @@ -186,10 +189,10 @@ func dataSourceTencentCloudClbListeners() *schema.Resource { } func dataSourceTencentCloudClbListenersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_listeners.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_listeners.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) clbId := d.Get("clb_id").(string) @@ -211,13 +214,13 @@ func dataSourceTencentCloudClbListenersRead(d *schema.ResourceData, meta interfa } clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var listeners []*clb.Listener - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := clbService.DescribeListenersByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } listeners = results return nil @@ -287,7 +290,7 @@ func dataSourceTencentCloudClbListenersRead(d *schema.ResourceData, meta interfa output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), listenerList); e != nil { + if e := tccommon.WriteToFile(output.(string), listenerList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_listeners_by_targets.go b/tencentcloud/services/clb/data_source_tc_clb_listeners_by_targets.go similarity index 93% rename from tencentcloud/data_source_tc_clb_listeners_by_targets.go rename to tencentcloud/services/clb/data_source_tc_clb_listeners_by_targets.go index 4e22a76727..6aaa19eca4 100644 --- a/tencentcloud/data_source_tc_clb_listeners_by_targets.go +++ b/tencentcloud/services/clb/data_source_tc_clb_listeners_by_targets.go @@ -1,15 +1,18 @@ -package tencentcloud +package clb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbListenersByTargets() *schema.Resource { +func DataSourceTencentCloudClbListenersByTargets() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbListenersByTargetsRead, Schema: map[string]*schema.Schema{ @@ -189,12 +192,12 @@ func dataSourceTencentCloudClbListenersByTargets() *schema.Resource { } func dataSourceTencentCloudClbListenersByTargetsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_listeners_by_targets.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_listeners_by_targets.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("backends"); ok { @@ -216,14 +219,14 @@ func dataSourceTencentCloudClbListenersByTargetsRead(d *schema.ResourceData, met paramMap["Backends"] = tmpSet } - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var loadBalancers []*clb.LBItem - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClbListenersByTargets(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } loadBalancers = result return nil @@ -373,7 +376,7 @@ func dataSourceTencentCloudClbListenersByTargetsRead(d *schema.ResourceData, met d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_listeners_by_targets_test.go b/tencentcloud/services/clb/data_source_tc_clb_listeners_by_targets_test.go similarity index 62% rename from tencentcloud/data_source_tc_clb_listeners_by_targets_test.go rename to tencentcloud/services/clb/data_source_tc_clb_listeners_by_targets_test.go index e9cae82d68..39c4f23a4d 100644 --- a/tencentcloud/data_source_tc_clb_listeners_by_targets_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_listeners_by_targets_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudClbListenersByTargetsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbListenersByTargetsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clb_listeners_by_targets.listeners_by_targets")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clb_listeners_by_targets.listeners_by_targets")), }, }, }) diff --git a/tencentcloud/data_source_tc_clb_listeners_test.go b/tencentcloud/services/clb/data_source_tc_clb_listeners_test.go similarity index 94% rename from tencentcloud/data_source_tc_clb_listeners_test.go rename to tencentcloud/services/clb/data_source_tc_clb_listeners_test.go index 9205f3811f..4bf524d83b 100644 --- a/tencentcloud/data_source_tc_clb_listeners_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_listeners_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ func TestAccTencentCloudClbListenersDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbListenerDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_clb_redirections.go b/tencentcloud/services/clb/data_source_tc_clb_redirections.go similarity index 87% rename from tencentcloud/data_source_tc_clb_redirections.go rename to tencentcloud/services/clb/data_source_tc_clb_redirections.go index bac8e9aa3e..1cb4d59fd0 100644 --- a/tencentcloud/data_source_tc_clb_redirections.go +++ b/tencentcloud/services/clb/data_source_tc_clb_redirections.go @@ -1,15 +1,18 @@ -package tencentcloud +package clb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbRedirections() *schema.Resource { +func DataSourceTencentCloudClbRedirections() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbRedirectionsRead, @@ -83,10 +86,10 @@ func dataSourceTencentCloudClbRedirections() *schema.Resource { } func dataSourceTencentCloudClbRedirectionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_redirections.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_redirections.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]string) params["clb_id"] = d.Get("clb_id").(string) @@ -116,13 +119,13 @@ func dataSourceTencentCloudClbRedirectionsRead(d *schema.ResourceData, meta inte } clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var redirections []*map[string]string - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := clbService.DescribeRedirectionsByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } redirections = results return nil @@ -154,7 +157,7 @@ func dataSourceTencentCloudClbRedirectionsRead(d *schema.ResourceData, meta inte output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), redirectionList); e != nil { + if e := tccommon.WriteToFile(output.(string), redirectionList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_redirections_test.go b/tencentcloud/services/clb/data_source_tc_clb_redirections_test.go similarity index 93% rename from tencentcloud/data_source_tc_clb_redirections_test.go rename to tencentcloud/services/clb/data_source_tc_clb_redirections_test.go index b9145b194f..7bce7376c3 100644 --- a/tencentcloud/data_source_tc_clb_redirections_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_redirections_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ func TestAccTencentCloudClbRedirectionsDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbRedirectionDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_clb_resources.go b/tencentcloud/services/clb/data_source_tc_clb_resources.go similarity index 91% rename from tencentcloud/data_source_tc_clb_resources.go rename to tencentcloud/services/clb/data_source_tc_clb_resources.go index 4e06574cd4..ca11536169 100644 --- a/tencentcloud/data_source_tc_clb_resources.go +++ b/tencentcloud/services/clb/data_source_tc_clb_resources.go @@ -1,15 +1,18 @@ -package tencentcloud +package clb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbResources() *schema.Resource { +func DataSourceTencentCloudClbResources() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbResourcesRead, Schema: map[string]*schema.Schema{ @@ -132,12 +135,12 @@ func dataSourceTencentCloudClbResources() *schema.Resource { } func dataSourceTencentCloudClbResourcesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_resources.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_resources.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("filters"); ok { @@ -160,14 +163,14 @@ func dataSourceTencentCloudClbResourcesRead(d *schema.ResourceData, meta interfa paramMap["Filters"] = tmpSet } - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var zoneResourceSet []*clb.ZoneResource - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClbResourcesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } zoneResourceSet = result return nil @@ -259,7 +262,7 @@ func dataSourceTencentCloudClbResourcesRead(d *schema.ResourceData, meta interfa d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_resources_test.go b/tencentcloud/services/clb/data_source_tc_clb_resources_test.go similarity index 60% rename from tencentcloud/data_source_tc_clb_resources_test.go rename to tencentcloud/services/clb/data_source_tc_clb_resources_test.go index 8067475b5a..313b98689e 100644 --- a/tencentcloud/data_source_tc_clb_resources_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_resources_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudClbResourcesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbResourcesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clb_resources.resources")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clb_resources.resources")), }, }, }) diff --git a/tencentcloud/data_source_tc_clb_target_group_list.go b/tencentcloud/services/clb/data_source_tc_clb_target_group_list.go similarity index 92% rename from tencentcloud/data_source_tc_clb_target_group_list.go rename to tencentcloud/services/clb/data_source_tc_clb_target_group_list.go index 98ae43e92d..d2cb4904c6 100644 --- a/tencentcloud/data_source_tc_clb_target_group_list.go +++ b/tencentcloud/services/clb/data_source_tc_clb_target_group_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package clb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbTargetGroupList() *schema.Resource { +func DataSourceTencentCloudClbTargetGroupList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbTargetGroupListRead, Schema: map[string]*schema.Schema{ @@ -149,12 +152,12 @@ func dataSourceTencentCloudClbTargetGroupList() *schema.Resource { } func dataSourceTencentCloudClbTargetGroupListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_target_group_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_target_group_list.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("target_group_ids"); ok { @@ -182,14 +185,14 @@ func dataSourceTencentCloudClbTargetGroupListRead(d *schema.ResourceData, meta i paramMap["Filters"] = tmpSet } - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var targetGroupSet []*clb.TargetGroupInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClbTargetGroupListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } targetGroupSet = result return nil @@ -286,7 +289,7 @@ func dataSourceTencentCloudClbTargetGroupListRead(d *schema.ResourceData, meta i d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_target_group_list_test.go b/tencentcloud/services/clb/data_source_tc_clb_target_group_list_test.go similarity index 61% rename from tencentcloud/data_source_tc_clb_target_group_list_test.go rename to tencentcloud/services/clb/data_source_tc_clb_target_group_list_test.go index c4e2e9eaf4..d69543e21e 100644 --- a/tencentcloud/data_source_tc_clb_target_group_list_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_target_group_list_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudClbTargetGroupListDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbTargetGroupListDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clb_target_group_list.target_group_list")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clb_target_group_list.target_group_list")), }, }, }) diff --git a/tencentcloud/data_source_tc_clb_target_groups.go b/tencentcloud/services/clb/data_source_tc_clb_target_groups.go similarity index 92% rename from tencentcloud/data_source_tc_clb_target_groups.go rename to tencentcloud/services/clb/data_source_tc_clb_target_groups.go index 2a6da8724e..56f77fcf5e 100644 --- a/tencentcloud/data_source_tc_clb_target_groups.go +++ b/tencentcloud/services/clb/data_source_tc_clb_target_groups.go @@ -1,16 +1,19 @@ -package tencentcloud +package clb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbTargetGroups() *schema.Resource { +func DataSourceTencentCloudClbTargetGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbTargetGroupRead, @@ -193,14 +196,14 @@ func dataSourceTencentCloudClbTargetGroups() *schema.Resource { } func dataSourceTencentCloudClbTargetGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_target_groups.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_target_groups.read")() var ( clbService = ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instances []*clb.TargetGroupBackend targetInfos []*clb.TargetGroupInfo filters = make(map[string]string, 2) @@ -219,10 +222,10 @@ func dataSourceTencentCloudClbTargetGroupRead(d *schema.ResourceData, meta inter filters["TargetGroupName"] = name.(string) } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { targetInfos, err = clbService.DescribeTargetGroups(ctx, targetGroupId, filters) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -242,12 +245,12 @@ func dataSourceTencentCloudClbTargetGroupRead(d *schema.ResourceData, meta inter instances = []*clb.TargetGroupBackend{} targetGroupInstances = []map[string]interface{}{} - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instances, err = clbService.DescribeTargetGroupInstances(ctx, map[string]string{ "TargetGroupId": *info.TargetGroupId, }) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -305,7 +308,7 @@ func dataSourceTencentCloudClbTargetGroupRead(d *schema.ResourceData, meta inter output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), list); err != nil { + if err := tccommon.WriteToFile(output.(string), list); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_clb_target_groups_test.go b/tencentcloud/services/clb/data_source_tc_clb_target_groups_test.go similarity index 93% rename from tencentcloud/data_source_tc_clb_target_groups_test.go rename to tencentcloud/services/clb/data_source_tc_clb_target_groups_test.go index 03fd2355cd..a304ea5ce5 100644 --- a/tencentcloud/data_source_tc_clb_target_groups_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_target_groups_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -15,8 +17,8 @@ const ( func TestAccTencentCloudClbTargetGroupDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbTargetGroupDestroy, Steps: []resource.TestStep{ { @@ -53,7 +55,7 @@ func TestAccTencentCloudClbTargetGroupDataSource(t *testing.T) { }) } -const tareGetGroupBase = defaultVpcSubnets + ` +const tareGetGroupBase = tcacctest.DefaultVpcSubnets + ` resource "tencentcloud_clb_instance" "clb_basic" { network_type = "OPEN" clb_name = "tf-clb-rule-data" diff --git a/tencentcloud/data_source_tc_clb_target_health.go b/tencentcloud/services/clb/data_source_tc_clb_target_health.go similarity index 92% rename from tencentcloud/data_source_tc_clb_target_health.go rename to tencentcloud/services/clb/data_source_tc_clb_target_health.go index 5f424637f9..e10c50e0c7 100644 --- a/tencentcloud/data_source_tc_clb_target_health.go +++ b/tencentcloud/services/clb/data_source_tc_clb_target_health.go @@ -1,15 +1,18 @@ -package tencentcloud +package clb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClbTargetHealth() *schema.Resource { +func DataSourceTencentCloudClbTargetHealth() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClbTargetHealthRead, Schema: map[string]*schema.Schema{ @@ -139,12 +142,12 @@ func dataSourceTencentCloudClbTargetHealth() *schema.Resource { } func dataSourceTencentCloudClbTargetHealthRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_clb_target_health.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_clb_target_health.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("load_balancer_ids"); ok { @@ -152,14 +155,14 @@ func dataSourceTencentCloudClbTargetHealthRead(d *schema.ResourceData, meta inte paramMap["LoadBalancerIds"] = helper.InterfacesStringsPoint(loadBalancerIdsSet) } - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var loadBalancers []*clb.LoadBalancerHealth - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClbTargetHealthByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } loadBalancers = result return nil @@ -274,7 +277,7 @@ func dataSourceTencentCloudClbTargetHealthRead(d *schema.ResourceData, meta inte d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_clb_target_health_test.go b/tencentcloud/services/clb/data_source_tc_clb_target_health_test.go similarity index 60% rename from tencentcloud/data_source_tc_clb_target_health_test.go rename to tencentcloud/services/clb/data_source_tc_clb_target_health_test.go index c60532b8b4..937e653f32 100644 --- a/tencentcloud/data_source_tc_clb_target_health_test.go +++ b/tencentcloud/services/clb/data_source_tc_clb_target_health_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudClbTargetHealthDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbTargetHealthDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_clb_target_health.target_health")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_clb_target_health.target_health")), }, }, }) diff --git a/tencentcloud/services/clb/extension_as.go b/tencentcloud/services/clb/extension_as.go new file mode 100644 index 0000000000..1fbf7f0dfa --- /dev/null +++ b/tencentcloud/services/clb/extension_as.go @@ -0,0 +1,180 @@ +package clb + +const ( + SYSTEM_DISK_TYPE_LOCAL_BASIC = "LOCAL_BASIC" + SYSTEM_DISK_TYPE_LOCAL_SSD = "LOCAL_SSD" + SYSTEM_DISK_TYPE_CLOUD_BASIC = "CLOUD_BASIC" + SYSTEM_DISK_TYPE_CLOUD_PREMIUM = "CLOUD_PREMIUM" + SYSTEM_DISK_TYPE_CLOUD_SSD = "CLOUD_SSD" + SYSTEM_DISK_TYPE_CLOUD_HSSD = "CLOUD_HSSD" + SYSTEM_DISK_TYPE_CLOUD_BSSD = "CLOUD_BSSD" + SYSTEM_DISK_TYPE_CLOUD_TSSD = "CLOUD_TSSD" +) + +var SYSTEM_DISK_ALLOW_TYPE = []string{ + SYSTEM_DISK_TYPE_LOCAL_BASIC, + SYSTEM_DISK_TYPE_LOCAL_SSD, + SYSTEM_DISK_TYPE_CLOUD_BASIC, + SYSTEM_DISK_TYPE_CLOUD_PREMIUM, + SYSTEM_DISK_TYPE_CLOUD_SSD, + SYSTEM_DISK_TYPE_CLOUD_HSSD, + SYSTEM_DISK_TYPE_CLOUD_TSSD, + SYSTEM_DISK_TYPE_CLOUD_BSSD, +} + +const ( + INTERNET_CHARGE_TYPE_BANDWIDTH_PREPAID = "BANDWIDTH_PREPAID" + INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID_BY_HOUR = "TRAFFIC_POSTPAID_BY_HOUR" + INTERNET_CHARGE_TYPE_BANDWIDTH_POSTPAID_BY_HOUR = "BANDWIDTH_POSTPAID_BY_HOUR" + INTERNET_CHARGE_TYPE_BANDWIDTH_PACKAGE = "BANDWIDTH_PACKAGE" +) + +var INTERNET_CHARGE_ALLOW_TYPE = []string{ + INTERNET_CHARGE_TYPE_BANDWIDTH_PREPAID, + INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID_BY_HOUR, + INTERNET_CHARGE_TYPE_BANDWIDTH_POSTPAID_BY_HOUR, + INTERNET_CHARGE_TYPE_BANDWIDTH_PACKAGE, +} + +const ( + INSTANCE_CHARGE_TYPE_POSTPAID = "POSTPAID_BY_HOUR" + INSTANCE_CHARGE_TYPE_SPOTPAID = "SPOTPAID" + INSTANCE_CHARGE_TYPE_PREPAID = "PREPAID" +) + +const ( + SCALING_GROUP_TERMINATION_POLICY_NEWEST_INSTANCE = "NEWEST_INSTANCE" + SCALING_GROUP_TERMINATION_POLICY_OLDEST_INSTANCE = "OLDEST_INSTANCE" +) + +const ( + SCALING_GROUP_RETRY_POLICY_IMMEDIATE_RETRY = "IMMEDIATE_RETRY" + SCALING_GROUP_RETRY_POLICY_NO_RETRY = "NO_RETRY" + SCALING_GROUP_RETRY_POLICY_INCREMENTAL_INTERVALS = "INCREMENTAL_INTERVALS" +) + +const ( + SCALING_DISK_TYPE_POLICY_ORIGINAL = "ORIGINAL" + SCALING_DISK_TYPE_POLICY_AUTOMATIC = "AUTOMATIC" +) + +var SCALING_DISK_TYPE_ALLOW_POLICY = []string{ + SCALING_DISK_TYPE_POLICY_ORIGINAL, + SCALING_DISK_TYPE_POLICY_AUTOMATIC, +} + +const ( + INSTANCE_NAME_ORIGINAL = "ORIGINAL" + INSTANCE_NAME_UNIQUE = "UNIQUE" +) + +var INSTANCE_NAME_STYLE = []string{ + INSTANCE_NAME_ORIGINAL, + INSTANCE_NAME_UNIQUE, +} + +const ( + SCALING_GROUP_ADJUSTMENT_TYPE_CHANGE_IN_CAPACITY = "CHANGE_IN_CAPACITY" + SCALING_GROUP_ADJUSTMENT_TYPE_EXACT_CAPACITY = "EXACT_CAPACITY" + SCALING_GROUP_ADJUSTMENT_TYPE_PERCENT_CHANGE_IN_CAPACITY = "PERCENT_CHANGE_IN_CAPACITY" +) + +var SCALING_GROUP_ADJUSTMENT_TYPE = []string{ + SCALING_GROUP_ADJUSTMENT_TYPE_CHANGE_IN_CAPACITY, + SCALING_GROUP_ADJUSTMENT_TYPE_EXACT_CAPACITY, + SCALING_GROUP_ADJUSTMENT_TYPE_PERCENT_CHANGE_IN_CAPACITY, +} + +const ( + SCALING_GROUP_COMPARISON_OPERATOR_GREATER = "GREATER_THAN" + SCALING_GROUP_COMPARISON_OPERATOR_GREATER_EQUAL = "GREATER_THAN_OR_EQUAL_TO" + SCALING_GROUP_COMPARISON_OPERATOR_LESS = "LESS_THAN" + SCALING_GROUP_COMPARISON_OPERATOR_LESS_EQUAL = "LESS_THAN_OR_EQUAL_TO" + SCALING_GROUP_COMPARISON_OPERATOR_EQUAL = "EQUAL_TO" + SCALING_GROUP_COMPARISON_OPERATOR_NOT_EQUAL = "NOT_EQUAL_TO" +) + +var SCALING_GROUP_COMPARISON_OPERATOR = []string{ + SCALING_GROUP_COMPARISON_OPERATOR_GREATER, + SCALING_GROUP_COMPARISON_OPERATOR_GREATER_EQUAL, + SCALING_GROUP_COMPARISON_OPERATOR_LESS, + SCALING_GROUP_COMPARISON_OPERATOR_LESS_EQUAL, + SCALING_GROUP_COMPARISON_OPERATOR_EQUAL, + SCALING_GROUP_COMPARISON_OPERATOR_NOT_EQUAL, +} + +const ( + SCALING_GROUP_METRIC_NAME_CPU_UTILIZATION = "CPU_UTILIZATION" + SCALING_GROUP_METRIC_NAME_MEM_UTILIZATION = "MEM_UTILIZATION" + SCALING_GROUP_METRIC_NAME_LAN_TRAFFIC_OUT = "LAN_TRAFFIC_OUT" + SCALING_GROUP_METRIC_NAME_LAN_TRAFFIC_IN = "LAN_TRAFFIC_IN" + SCALING_GROUP_METRIC_NAME_WAN_TRAFFIC_OUT = "WAN_TRAFFIC_OUT" + SCALING_GROUP_METRIC_NAME_WAN_TRAFFIC_IN = "WAN_TRAFFIC_IN" +) + +var SCALING_GROUP_METRIC_NAME = []string{ + SCALING_GROUP_METRIC_NAME_CPU_UTILIZATION, + SCALING_GROUP_METRIC_NAME_MEM_UTILIZATION, + SCALING_GROUP_METRIC_NAME_LAN_TRAFFIC_OUT, + SCALING_GROUP_METRIC_NAME_LAN_TRAFFIC_IN, + SCALING_GROUP_METRIC_NAME_WAN_TRAFFIC_OUT, + SCALING_GROUP_METRIC_NAME_WAN_TRAFFIC_IN, +} + +const ( + SCALING_GROUP_STATISTIC_AVERAGE = "AVERAGE" + SCALING_GROUP_STATISTIC_MAXIMUM = "MAXIMUM" + SCALING_GROUP_STATISTIC_MINIMUM = "MINIMUM" +) + +var SCALING_GROUP_STATISTIC = []string{ + SCALING_GROUP_STATISTIC_AVERAGE, + SCALING_GROUP_STATISTIC_MAXIMUM, + SCALING_GROUP_STATISTIC_MINIMUM, +} + +const ( + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_OUT_SUCCESS = "SCALE_OUT_SUCCESSFUL" + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_OUT_FAILED = "SCALE_OUT_FAILED" + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_IN_SUCCESS = "SCALE_IN_SUCCESSFUL" + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_IN_FAILED = "SCALE_IN_FAILED" + SCALING_GROUP_NOTIFICATION_TYPE_REPLACE_SUCCESS = "REPLACE_UNHEALTHY_INSTANCE_SUCCESSFUL" + SCALING_GROUP_NOTIFICATION_TYPE_REPLACE_FAILED = "REPLACE_UNHEALTHY_INSTANCE_FAILED" +) + +var SCALING_GROUP_NOTIFICATION_TYPE = []string{ + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_OUT_SUCCESS, + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_OUT_FAILED, + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_IN_SUCCESS, + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_IN_FAILED, + SCALING_GROUP_NOTIFICATION_TYPE_REPLACE_SUCCESS, + SCALING_GROUP_NOTIFICATION_TYPE_REPLACE_FAILED, +} + +const ( + SCALING_GROUP_ACTIVITY_STATUS_INIT = "INIT" + SCALING_GROUP_ACTIVITY_STATUS_RUNNING = "RUNNING" + SCALING_GROUP_ACTIVITY_STATUS_SUCCESSFUL = "SUCCESSFUL" + SCALING_GROUP_ACTIVITY_STATUS_PARTIALLY_SUCCESSFUL = "PARTIALLY_SUCCESSFUL" + SCALING_GROUP_ACTIVITY_STATUS_FAILED = "FAILED" + SCALING_GROUP_ACTIVITY_STATUS_CANCELLED = "CANCELLED" +) + +const ( + AsScheduleNotFound = "ResourceNotFound.ScheduledActionNotFound" + AsScalingGroupInProgress = "ResourceInUse.ActivityInProgress" + AsScalingGroupInstanceInGroup = "ResourceInUse.InstanceInGroup" + AsScalingGroupNotFound = "ResourceNotFound.AutoScalingGroupNotFound" + SCALING_GROUP_IN_ACTIVITY_STATUS = "IN_ACTIVITY" + SCALING_GROUP_NOT_IN_ACTIVITY_STATUS = "NOT_IN_ACTIVITY" +) + +const ( + MultiZoneSubnetPolicyPriority = "PRIORITY" + MultiZoneSubnetPolicyEquality = "EQUALITY" +) + +const ( + SCALING_MODE_CLASSIC = "CLASSIC_SCALING" + SCALING_MODE_WAKE_UP_STOPPED = "WAKE_UP_STOPPED_SCALING" +) diff --git a/tencentcloud/services/clb/extension_clb.go b/tencentcloud/services/clb/extension_clb.go new file mode 100644 index 0000000000..bfcc2a4f4f --- /dev/null +++ b/tencentcloud/services/clb/extension_clb.go @@ -0,0 +1,136 @@ +package clb + +const ( + CLB_NETWORK_TYPE_OPEN = "OPEN" + CLB_NETWORK_TYPE_INTERNAL = "INTERNAL" +) + +var CLB_NETWORK_TYPE = []string{ + CLB_NETWORK_TYPE_OPEN, + CLB_NETWORK_TYPE_INTERNAL, +} + +const ( + CLB_LISTENER_PROTOCOL_TCP = "TCP" + CLB_LISTENER_PROTOCOL_UDP = "UDP" + CLB_LISTENER_PROTOCOL_HTTP = "HTTP" + CLB_LISTENER_PROTOCOL_HTTPS = "HTTPS" + CLB_LISTENER_PROTOCOL_TCPSSL = "TCP_SSL" + CLB_LISTENER_PROTOCOL_QUIC = "QUIC" +) + +var CLB_LISTENER_PROTOCOL = []string{ + CLB_LISTENER_PROTOCOL_TCP, + CLB_LISTENER_PROTOCOL_UDP, + CLB_LISTENER_PROTOCOL_HTTP, + CLB_LISTENER_PROTOCOL_HTTPS, + CLB_LISTENER_PROTOCOL_TCPSSL, + CLB_LISTENER_PROTOCOL_QUIC, +} + +const ( + CLB_HTTP_METHOD_GET = "GET" + CLB_HTTP_METHOD_HEAD = "HEAD" +) + +var CLB_HTTP_METHOD = []string{ + CLB_HTTP_METHOD_GET, + CLB_HTTP_METHOD_HEAD, +} + +const ( + CLB_LISTENER_SCHEDULER_WRR = "WRR" + CLB_LISTENER_SCHEDULER_LEASTCONN = "LEAST_CONN" + CLB_LISTENER_SCHEDULER_IP_HASH = "IP_HASH" +) + +var CLB_LISTENER_SCHEDULER = []string{ + CLB_LISTENER_SCHEDULER_WRR, + CLB_LISTENER_SCHEDULER_LEASTCONN, + CLB_LISTENER_SCHEDULER_IP_HASH, +} + +const ( + HTTP_VERSION_ONE_ZERO = "HTTP/1.0" + HTTP_VERSION_ONE_ONE = "HTTP/1.1" +) + +var HTTP_VERSION = []string{ + HTTP_VERSION_ONE_ZERO, + HTTP_VERSION_ONE_ONE, +} + +const ( + HEALTH_CHECK_TYPE_CUSTOM = "CUSTOM" + HEALTH_CHECK_TYPE_TCP = "TCP" + HEALTH_CHECK_TYPE_HTTP = "HTTP" +) + +var HEALTH_CHECK_TYPE = []string{ + HEALTH_CHECK_TYPE_CUSTOM, + HEALTH_CHECK_TYPE_TCP, + HEALTH_CHECK_TYPE_HTTP, +} + +const ( + CONTEX_TYPE_HEX = "HEX" + CONTEX_TYPE_TEXT = "TEXT" +) + +var CONTEX_TYPE = []string{ + CONTEX_TYPE_HEX, + CONTEX_TYPE_TEXT, +} + +const ( + CERT_SSL_MODE_UNI = "UNIDIRECTIONAL" + CERT_SSL_MODE_MUT = "MUTUAL" +) + +var CERT_SSL_MODE = []string{ + CERT_SSL_MODE_UNI, + CERT_SSL_MODE_MUT, +} + +const ( + FORWARD_TYPE_HTTP = "HTTP" +) + +var FORWARD_TYPE = []string{ + FORWARD_TYPE_HTTP, +} + +const ( + CLB_TASK_SUCCESS = 0 + CLB_TASK_FAIL = 1 + CLB_TASK_EXPANDING = 2 +) + +const ( + HEALTH_APPLY_TYPE_LISTENER = "listener" + HEALTH_APPLY_TYPE_RULE = "rule" +) + +const ( + AUTO_TARGET_PORT = 443 + AUTO_SOURCE_PORT = 80 +) + +const ( + CLB_PAGE_LIMIT = 100 +) + +const ( + CLB_TARGET_TYPE_NODE = "NODE" + CLB_TARGET_TYPE_TARGETGROUP = "TARGETGROUP" +) + +const ( + CLB_BACKEND_TYPE_CVM = "CVM" + CLB_BACKEND_TYPE_ENI = "ENI" +) + +const ( + CLB_SESSION_TYPE_NORMAL = "NORMAL" + CLB_SESSION_TYPE_QUIC = "QUIC_CID" +) diff --git a/tencentcloud/services/clb/extension_ssl.go b/tencentcloud/services/clb/extension_ssl.go new file mode 100644 index 0000000000..fb6b3e9d91 --- /dev/null +++ b/tencentcloud/services/clb/extension_ssl.go @@ -0,0 +1,88 @@ +package clb + +const ( + SSL_MODULE_TYPE = "ssl" + SSL_WITH_CERT = "1" +) + +const ( + SSL_STATUS_PENDING = iota + SSL_STATUS_AVAILABLE + SSL_STATUS_REJECTED + SSL_STATUS_EXPIRED + SSL_STATUS_DNS_ADDED + SSL_STATUS_PENDING_SUB + SSL_STATUS_CANCELING + SSL_STATUS_CANCELED + SSL_STATUS_DATA_PENDING + SSL_STATUS_REVOKING + SSL_STATUS_REVOKED + SSL_STATUS_REISSUING + SSL_STATUS_REVOCATION_PENDING +) + +const ( + SSL_CERT_TYPE_SERVER = "SVR" + SSL_CERT_TYPE_CA = "CA" +) + +const ( + CsrTypeOnline = "online" + CsrTypeParse = "parse" +) + +const ( + DNSAuto = "DNS_AUTO" + DNS = "DNS" + File = "FILE" +) + +const ( + InvalidParam = "FailedOperation.InvalidParam" + CertificateNotFound = "FailedOperation.CertificateNotFound" + InvalidParameter = "InvalidParameter" + InvalidParameterValue = "InvalidParameterValue" + CertificateInvalid = "FailedOperation.CertificateInvalid" +) +const SSL_ERR_CANCELING = ` + The update of the information field is still ongoing. Please retry the "terraform apply" later and then check whether the update process is complete. + For more information, please refer to the documentation: + https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest/docs/resources/ssl_pay_certificate.` + +var CsrTypeArr = []string{ + CsrTypeOnline, + CsrTypeParse, +} + +var VerifyType = []string{ + DNSAuto, + DNS, + File, +} + +var SSL_CERT_TYPE = []string{ + SSL_CERT_TYPE_SERVER, + SSL_CERT_TYPE_CA, +} + +var SslCanCancelStatus = map[uint64]struct{}{ + SSL_STATUS_PENDING: {}, + SSL_STATUS_DNS_ADDED: {}, + SSL_STATUS_DATA_PENDING: {}, +} +var DNSPOD_OV_EV_TYPE = []int64{51, 52, 53} +var GEOTRUST_OV_EV_TYPE = []int64{8, 9, 10} +var SECURESITE_OV_EV_TYPE = []int64{3, 4, 5, 6, 7} +var TRUSTASIA_OV_EV_TYPE = []int64{13, 14, 15, 16, 17} +var GLOBALSIGN_OV_EV_TYPE = []int64{18, 19, 20, 21, 22, 23, 24} + +func IsContainProductId(productId int64, lists ...[]int64) bool { + for _, list := range lists { + for _, item := range list { + if item == productId { + return true + } + } + } + return false +} diff --git a/tencentcloud/services/clb/extension_tags.go b/tencentcloud/services/clb/extension_tags.go new file mode 100644 index 0000000000..5f97d32f73 --- /dev/null +++ b/tencentcloud/services/clb/extension_tags.go @@ -0,0 +1,3 @@ +package clb + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/resource_tc_alb_server_attachment.go b/tencentcloud/services/clb/resource_tc_alb_server_attachment.go similarity index 78% rename from tencentcloud/resource_tc_alb_server_attachment.go rename to tencentcloud/services/clb/resource_tc_alb_server_attachment.go index 2a9134c4dd..e0b3671fbd 100644 --- a/tencentcloud/resource_tc_alb_server_attachment.go +++ b/tencentcloud/services/clb/resource_tc_alb_server_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package clb import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAlbServerAttachment() *schema.Resource { +func ResourceTencentCloudAlbServerAttachment() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This resource has been deprecated in Terraform TencentCloud provider version 1.15.0. Please use 'tencentcloud_clb_attachment' instead.", Create: resourceTencentCloudAlbServerAttachmentCreate, @@ -56,14 +59,14 @@ func resourceTencentCloudAlbServerAttachment() *schema.Resource { "port": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateIntegerInRange(0, 65535), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 65535), Description: "The port used by the backend server. Valid value range: [1-65535].", }, "weight": { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateIntegerInRange(0, 100), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 100), Description: "Weight of the backend server. Valid value range: [0-100]. Default to 10.", }, }, @@ -79,12 +82,12 @@ func resourceTencentCloudAlbServerAttachment() *schema.Resource { } func resourceTencentCloudAlbServerAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_alb_server_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_alb_server_attachment.create")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := clb.NewRegisterTargetsRequest() loadbalancerId := d.Get("loadbalancer_id").(string) @@ -105,18 +108,18 @@ func resourceTencentCloudAlbServerAttachmentCreate(d *schema.ResourceData, meta request.Targets = append(request.Targets, clbNewTarget(inst["instance_id"], inst["eni_ip"], inst["port"], inst["weight"])) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { requestId := "" - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().RegisterTargets(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().RegisterTargets(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + 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()) requestId = *result.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(retryErr) } @@ -135,11 +138,11 @@ func resourceTencentCloudAlbServerAttachmentCreate(d *schema.ResourceData, meta } func resourceTencentCloudAlbServerAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_alb_server_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_alb_server_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) items := strings.Split(d.Id(), ":") if len(items) < 3 { @@ -151,14 +154,14 @@ func resourceTencentCloudAlbServerAttachmentRead(d *schema.ResourceData, meta in locationId := items[2] clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *clb.ListenerBackend - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := clbService.DescribeAttachmentByPara(ctx, clbId, listenerId, locationId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -194,13 +197,13 @@ func resourceTencentCloudAlbServerAttachmentRead(d *schema.ResourceData, meta in } func resourceTencentCloudAlbServerAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_alb_server_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_alb_server_attachment.delete")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) items := strings.Split(d.Id(), ":") if len(items) < 3 { @@ -212,12 +215,12 @@ func resourceTencentCloudAlbServerAttachmentDelete(d *schema.ResourceData, meta locationId := items[2] clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := clbService.DeleteAttachmentById(ctx, clbId, listenerId, locationId, d.Get("backends").(*schema.Set).List()) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -230,9 +233,9 @@ func resourceTencentCloudAlbServerAttachmentDelete(d *schema.ResourceData, meta } func resourceTencentCloudAlbServerAttachementRemove(d *schema.ResourceData, meta interface{}, remove []interface{}) error { - defer logElapsed("resource.tencentcloud_alb_server_attachment.remove")() + defer tccommon.LogElapsed("resource.tencentcloud_alb_server_attachment.remove")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) items := strings.Split(d.Id(), ":") if len(items) < 3 { return fmt.Errorf("id %s of resource.tencentcloud_alb_server_attachment is wrong", d.Id()) @@ -251,18 +254,18 @@ func resourceTencentCloudAlbServerAttachementRemove(d *schema.ResourceData, meta request.Targets = append(request.Targets, clbNewTarget(inst["instance_id"], inst["eni_ip"], inst["port"], inst["weight"])) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { requestId := "" - response, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().DeregisterTargets(request) + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().DeregisterTargets(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) requestId = *response.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(retryErr) } @@ -277,8 +280,8 @@ func resourceTencentCloudAlbServerAttachementRemove(d *schema.ResourceData, meta } func resourceTencentCloudAlbServerAttachementAdd(d *schema.ResourceData, meta interface{}, add []interface{}) error { - defer logElapsed("resource.tencentcloud_alb_server_attachment.add")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_alb_server_attachment.add")() + logId := tccommon.GetLogId(tccommon.ContextNil) listenerId := d.Get("listener_id").(string) clbId := d.Get("loadbalancer_id").(string) @@ -298,18 +301,18 @@ func resourceTencentCloudAlbServerAttachementAdd(d *schema.ResourceData, meta in inst := inst_.(map[string]interface{}) request.Targets = append(request.Targets, clbNewTarget(inst["instance_id"], inst["eni_ip"], inst["port"], inst["weight"])) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { requestId := "" - response, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().RegisterTargets(request) + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().RegisterTargets(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) requestId = *response.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(retryErr) } @@ -324,7 +327,7 @@ func resourceTencentCloudAlbServerAttachementAdd(d *schema.ResourceData, meta in } func resourceTencentCloudAlbServerAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_alb_server_attachment.update")() + defer tccommon.LogElapsed("resource.tencentcloud_alb_server_attachment.update")() clbActionMu.Lock() defer clbActionMu.Unlock() diff --git a/tencentcloud/resource_tc_clb_attachment.go b/tencentcloud/services/clb/resource_tc_clb_attachment.go similarity index 84% rename from tencentcloud/resource_tc_clb_attachment.go rename to tencentcloud/services/clb/resource_tc_clb_attachment.go index 2a2d5b9989..ea43b491b6 100644 --- a/tencentcloud/resource_tc_clb_attachment.go +++ b/tencentcloud/services/clb/resource_tc_clb_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package clb import ( "context" @@ -6,16 +6,19 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudClbServerAttachment() *schema.Resource { +func ResourceTencentCloudClbServerAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbServerAttachmentCreate, Read: resourceTencentCloudClbServerAttachmentRead, @@ -69,14 +72,14 @@ func resourceTencentCloudClbServerAttachment() *schema.Resource { "port": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateIntegerInRange(0, 65535), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 65535), Description: "Port of the backend server. Valid value ranges: (0~65535).", }, "weight": { Type: schema.TypeInt, Optional: true, Default: 10, - ValidateFunc: validateIntegerInRange(0, 100), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 100), Description: "Forwarding weight of the backend service. Valid value ranges: (0~100). defaults to `10`.", }, }, @@ -87,12 +90,12 @@ func resourceTencentCloudClbServerAttachment() *schema.Resource { } func resourceTencentCloudClbServerAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_attachment.create")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) listenerId := d.Get("listener_id").(string) checkErr := ListenerIdCheck(listenerId) if checkErr != nil { @@ -128,17 +131,17 @@ func resourceTencentCloudClbServerAttachmentCreate(d *schema.ResourceData, meta request.Targets = append(request.Targets, clbNewTarget(inst["instance_id"], inst["eni_ip"], inst["port"], inst["weight"])) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { requestId := "" ratelimit.Check(request.GetAction()) - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().RegisterTargets(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().RegisterTargets(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) requestId = *result.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } @@ -157,14 +160,14 @@ func resourceTencentCloudClbServerAttachmentCreate(d *schema.ResourceData, meta } func resourceTencentCloudClbServerAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_attachment.delete")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - clbService := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + clbService := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} attachmentId := d.Id() @@ -201,23 +204,23 @@ func resourceTencentCloudClbServerAttachmentDelete(d *schema.ResourceData, meta request.Targets = append(request.Targets, clbNewTarget(inst["instance_id"], inst["eni_ip"], inst["port"], inst["weight"])) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { requestId := "" ratelimit.Check(request.GetAction()) - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().DeregisterTargets(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().DeregisterTargets(request) if e != nil { ee, ok := e.(*sdkErrors.TencentCloudSDKError) if ok && ee.GetCode() == "InvalidParameter" { return nil } - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) requestId = *result.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } @@ -234,10 +237,10 @@ func resourceTencentCloudClbServerAttachmentDelete(d *schema.ResourceData, meta } func resourceTencentCloudClbServerAttachmentRemove(d *schema.ResourceData, meta interface{}, remove []interface{}) error { - defer logElapsed("resource.tencentcloud_clb_attachment.remove")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_attachment.remove")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) attachmentId := d.Id() items := strings.Split(attachmentId, "#") if len(items) < 3 { @@ -255,17 +258,17 @@ func resourceTencentCloudClbServerAttachmentRemove(d *schema.ResourceData, meta } clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { removeCandidates := getRemoveCandidates(ctx, clbService, clbId, listenerId, locationId, remove) if len(removeCandidates) == 0 { return nil } e := clbService.DeleteAttachmentById(ctx, clbId, listenerId, locationId, removeCandidates) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil @@ -279,8 +282,8 @@ func resourceTencentCloudClbServerAttachmentRemove(d *schema.ResourceData, meta } func resourceTencentCloudClbServerAttachmentAdd(d *schema.ResourceData, meta interface{}, add []interface{}) error { - defer logElapsed("resource.tencentcloud_clb_attachment.add")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_clb_attachment.add")() + logId := tccommon.GetLogId(tccommon.ContextNil) listenerId := d.Get("listener_id").(string) clbId := d.Get("clb_id").(string) @@ -300,16 +303,16 @@ func resourceTencentCloudClbServerAttachmentAdd(d *schema.ResourceData, meta int inst := v.(map[string]interface{}) request.Targets = append(request.Targets, clbNewTarget(inst["instance_id"], inst["eni_ip"], inst["port"], inst["weight"])) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { requestId := "" - response, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().RegisterTargets(request) + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().RegisterTargets(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) requestId = *response.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } @@ -324,7 +327,7 @@ func resourceTencentCloudClbServerAttachmentAdd(d *schema.ResourceData, meta int } func resourceTencentCloudClbServerAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_attachment.update")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_attachment.update")() clbActionMu.Lock() defer clbActionMu.Unlock() @@ -376,11 +379,11 @@ func resourceTencentCloudClbServerAttachmentUpdate(d *schema.ResourceData, meta } func resourceTencentCloudClbServerAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) items := strings.Split(d.Id(), "#") locationId := items[0] @@ -388,13 +391,13 @@ func resourceTencentCloudClbServerAttachmentRead(d *schema.ResourceData, meta in clbId := items[2] clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *clb.ListenerBackend - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := clbService.DescribeAttachmentByPara(ctx, clbId, listenerId, locationId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil diff --git a/tencentcloud/resource_tc_clb_attachment_test.go b/tencentcloud/services/clb/resource_tc_clb_attachment_test.go similarity index 88% rename from tencentcloud/resource_tc_clb_attachment_test.go rename to tencentcloud/services/clb/resource_tc_clb_attachment_test.go index b08b97f83a..b4cbb7fa87 100644 --- a/tencentcloud/resource_tc_clb_attachment_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_attachment_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package clb_test import ( "context" @@ -7,14 +7,19 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + localclb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" ) func TestAccTencentCloudClbAttachmentResource_tcp(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbServerAttachmentDestroy, Steps: []resource.TestStep{ { @@ -51,12 +56,12 @@ func TestAccTencentCloudClbAttachmentResource_tcp(t *testing.T) { func TestAccTencentCloudClbAttachmentResource_http(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbServerAttachmentDestroy, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccClbServerAttachment_http, defaultSshCertificate), + Config: fmt.Sprintf(testAccClbServerAttachment_http, tcacctest.DefaultSshCertificate), Check: resource.ComposeTestCheckFunc( testAccCheckClbServerAttachmentExists("tencentcloud_clb_attachment.clb_attachment_http"), resource.TestCheckResourceAttrSet("tencentcloud_clb_attachment.clb_attachment_http", "clb_id"), @@ -66,7 +71,7 @@ func TestAccTencentCloudClbAttachmentResource_http(t *testing.T) { ), }, { - Config: fmt.Sprintf(testAccClbServerAttachment_httpUpdate, defaultSshCertificate), + Config: fmt.Sprintf(testAccClbServerAttachment_httpUpdate, tcacctest.DefaultSshCertificate), Check: resource.ComposeTestCheckFunc( testAccCheckClbServerAttachmentExists("tencentcloud_clb_attachment.clb_attachment_http"), resource.TestCheckResourceAttrSet("tencentcloud_clb_attachment.clb_attachment_http", "clb_id"), @@ -85,12 +90,10 @@ func TestAccTencentCloudClbAttachmentResource_http(t *testing.T) { } func testAccCheckClbServerAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_clb_attachment" { continue @@ -114,20 +117,20 @@ func testAccCheckClbServerAttachmentDestroy(s *terraform.State) error { func TestAccTencentCloudClbAttachmentResource_argetGroups(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbServerAttachmentDestroy, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccClbServerAttachment_multiple, defaultSshCertificate), + Config: fmt.Sprintf(testAccClbServerAttachment_multiple, tcacctest.DefaultSshCertificate), Check: resource.ComposeTestCheckFunc( testAccCheckClbServerAttachmentExists("tencentcloud_clb_attachment.foo"), resource.TestCheckResourceAttr("tencentcloud_clb_attachment.foo", "targets.#", "2"), ), }, { - Config: fmt.Sprintf(testAccClbServerAttachment_multiple_update, defaultSshCertificate), + Config: fmt.Sprintf(testAccClbServerAttachment_multiple_update, tcacctest.DefaultSshCertificate), Check: resource.ComposeTestCheckFunc( testAccCheckClbServerAttachmentExists("tencentcloud_clb_attachment.foo"), resource.TestCheckResourceAttr("tencentcloud_clb_attachment.foo", "targets.#", "1"), @@ -139,8 +142,8 @@ func TestAccTencentCloudClbAttachmentResource_argetGroups(t *testing.T) { func testAccCheckClbServerAttachmentExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -149,9 +152,7 @@ func testAccCheckClbServerAttachmentExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLB attachment][Exists] check: CLB Attachment id is not set") } - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) items := strings.Split(rs.Primary.ID, "#") if len(items) != 3 { return fmt.Errorf("[CHECK][CLB attachment][Exists] check: id %s of resource.tencentcloud_clb_attachment is not match loc-xxx#lbl-xxx#lb-xxx", rs.Primary.ID) @@ -170,7 +171,7 @@ func testAccCheckClbServerAttachmentExists(n string) resource.TestCheckFunc { } } -const testAccClbServerAttachment_tcp = clbTargetEniTestCase + ` +const testAccClbServerAttachment_tcp = tcacctest.ClbTargetEniTestCase + ` resource "tencentcloud_clb_instance" "clb_instance_tcp" { network_type = "OPEN" clb_name = "tf-clb-attach-tcp-test" @@ -203,7 +204,7 @@ resource "tencentcloud_clb_attachment" "clb_attachment_tcp" { } ` -const testAccClbServerAttachment_tcp_update = clbTargetEniTestCase + presetCVM + ` +const testAccClbServerAttachment_tcp_update = tcacctest.ClbTargetEniTestCase + tcacctest.PresetCVM + ` resource "tencentcloud_clb_instance" "clb_instance_tcp" { network_type = "OPEN" clb_name = "tf-clb-attach-tcp-test" @@ -237,7 +238,7 @@ resource "tencentcloud_clb_attachment" "clb_attachment_tcp" { } ` -const testAccClbServerAttachment_tcp_update_ssl = clbTargetEniTestCase + presetCVM + ` +const testAccClbServerAttachment_tcp_update_ssl = tcacctest.ClbTargetEniTestCase + tcacctest.PresetCVM + ` data "tencentcloud_ssl_certificates" "foo" { name = "keep-svr-ca" } @@ -274,7 +275,7 @@ resource "tencentcloud_clb_attachment" "clb_attachment_tcp" { } ` -const testAccClbServerAttachment_http = instanceCommonTestCase + presetCVM + ` +const testAccClbServerAttachment_http = tcacctest.InstanceCommonTestCase + tcacctest.PresetCVM + ` resource "tencentcloud_clb_instance" "clb_instance_http" { network_type = "OPEN" clb_name = "tf-clb-attach-http-test" @@ -317,7 +318,7 @@ resource "tencentcloud_clb_attachment" "clb_attachment_http" { } ` -const testAccClbServerAttachment_httpUpdate = instanceCommonTestCase + presetCVM + ` +const testAccClbServerAttachment_httpUpdate = tcacctest.InstanceCommonTestCase + tcacctest.PresetCVM + ` resource "tencentcloud_clb_instance" "clb_instance_http" { network_type = "OPEN" clb_name = "tf-clb-attach-http-test" @@ -355,7 +356,7 @@ resource "tencentcloud_clb_attachment" "clb_attachment_http" { } ` -const testAccClbServerAttachment_multiple = instanceCommonTestCase + ` +const testAccClbServerAttachment_multiple = tcacctest.InstanceCommonTestCase + ` resource "tencentcloud_instance" "update" { instance_name = var.instance_name_update availability_zone = var.availability_cvm_zone @@ -411,7 +412,7 @@ resource "tencentcloud_clb_attachment" "foo" { } ` -const testAccClbServerAttachment_multiple_update = instanceCommonTestCase + ` +const testAccClbServerAttachment_multiple_update = tcacctest.InstanceCommonTestCase + ` resource "tencentcloud_clb_instance" "foo" { network_type = "OPEN" diff --git a/tencentcloud/resource_tc_clb_customized_config.go b/tencentcloud/services/clb/resource_tc_clb_customized_config.go similarity index 71% rename from tencentcloud/resource_tc_clb_customized_config.go rename to tencentcloud/services/clb/resource_tc_clb_customized_config.go index c1ed280ed8..24678610a5 100644 --- a/tencentcloud/resource_tc_clb_customized_config.go +++ b/tencentcloud/services/clb/resource_tc_clb_customized_config.go @@ -1,17 +1,20 @@ -package tencentcloud +package clb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClbCustomizedConfig() *schema.Resource { +func ResourceTencentCloudClbCustomizedConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbCustomizedConfigCreate, Read: resourceTencentCloudClbCustomizedConfigRead, @@ -54,9 +57,9 @@ func resourceTencentCloudClbCustomizedConfig() *schema.Resource { } func resourceTencentCloudClbCustomizedConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_customized_config.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_clb_customized_config.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) configName := d.Get("config_name").(string) configContent := d.Get("config_content").(string) @@ -67,17 +70,17 @@ func resourceTencentCloudClbCustomizedConfigCreate(d *schema.ResourceData, meta request.ConfigContent = helper.String(configContent) var response *clb.SetCustomizedConfigForLoadBalancerResponse - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().SetCustomizedConfigForLoadBalancer(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().SetCustomizedConfigForLoadBalancer(request) if e != nil { - return retryError(e) + 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()) requestId := *result.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { - return retryError(errors.WithStack(retryErr)) + return tccommon.RetryError(errors.WithStack(retryErr)) } } response = result @@ -92,7 +95,7 @@ func resourceTencentCloudClbCustomizedConfigCreate(d *schema.ResourceData, meta if v, ok := d.GetOk("load_balancer_ids"); ok { loadBalancerIds := v.(*schema.Set).List() clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } err := clbService.BindOrUnBindCustomizedConfigWithLbId(ctx, "BIND", *response.Response.ConfigId, loadBalancerIds) @@ -105,21 +108,21 @@ func resourceTencentCloudClbCustomizedConfigCreate(d *schema.ResourceData, meta } func resourceTencentCloudClbCustomizedConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_customized_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_customized_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) configId := d.Id() clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var config *clb.ConfigListItem - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := clbService.DescribeLbCustomizedConfigById(ctx, configId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } config = result return nil @@ -141,10 +144,10 @@ func resourceTencentCloudClbCustomizedConfigRead(d *schema.ResourceData, meta in request := clb.NewDescribeCustomizedConfigAssociateListRequest() request.UconfigId = &configId var response *clb.DescribeCustomizedConfigAssociateListResponse - assErr := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().DescribeCustomizedConfigAssociateList(request) + assErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().DescribeCustomizedConfigAssociateList(request) if e != nil { - return retryError(e) + 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()) @@ -162,9 +165,9 @@ func resourceTencentCloudClbCustomizedConfigRead(d *schema.ResourceData, meta in } func resourceTencentCloudClbCustomizedConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_customized_config.update")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_customized_config.update")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) d.Partial(true) @@ -183,17 +186,17 @@ func resourceTencentCloudClbCustomizedConfigUpdate(d *schema.ResourceData, meta request.ConfigContent = &configContent } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().SetCustomizedConfigForLoadBalancer(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().SetCustomizedConfigForLoadBalancer(request) if e != nil { - return retryError(e) + 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()) requestId := *result.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { - return retryError(errors.WithStack(retryErr)) + return tccommon.RetryError(errors.WithStack(retryErr)) } } return nil @@ -204,9 +207,9 @@ func resourceTencentCloudClbCustomizedConfigUpdate(d *schema.ResourceData, meta } if d.HasChange("load_balancer_ids") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } old, new := d.GetChange("load_balancer_ids") olds := old.(*schema.Set) @@ -234,20 +237,20 @@ func resourceTencentCloudClbCustomizedConfigUpdate(d *schema.ResourceData, meta } func resourceTencentCloudClbCustomizedConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_customized_config.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_customized_config.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) configId := d.Id() clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := clbService.DeleteLbCustomizedConfigById(ctx, configId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_clb_function_targets_attachment.go b/tencentcloud/services/clb/resource_tc_clb_function_targets_attachment.go similarity index 84% rename from tencentcloud/resource_tc_clb_function_targets_attachment.go rename to tencentcloud/services/clb/resource_tc_clb_function_targets_attachment.go index 15bd870f63..d3664b5344 100644 --- a/tencentcloud/resource_tc_clb_function_targets_attachment.go +++ b/tencentcloud/services/clb/resource_tc_clb_function_targets_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package clb import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClbFunctionTargetsAttachment() *schema.Resource { +func ResourceTencentCloudClbFunctionTargetsAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbFunctionTargetsAttachmentCreate, Read: resourceTencentCloudClbFunctionTargetsAttachmentRead, @@ -115,10 +118,10 @@ func resourceTencentCloudClbFunctionTargetsAttachment() *schema.Resource { } func resourceTencentCloudClbFunctionTargetsAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_function_targets_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_function_targets_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = clb.NewRegisterFunctionTargetsRequest() @@ -180,14 +183,14 @@ func resourceTencentCloudClbFunctionTargetsAttachmentCreate(d *schema.ResourceDa request.Url = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().RegisterFunctionTargets(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().RegisterFunctionTargets(request) if e != nil { - return retryError(e) + 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()) requestId := *result.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } @@ -200,25 +203,25 @@ func resourceTencentCloudClbFunctionTargetsAttachmentCreate(d *schema.ResourceDa } if locationId != "" { - d.SetId(loadBalancerId + FILED_SP + listenerId + FILED_SP + locationId) + d.SetId(loadBalancerId + tccommon.FILED_SP + listenerId + tccommon.FILED_SP + locationId) } else { - d.SetId(loadBalancerId + FILED_SP + listenerId + FILED_SP + domain + FILED_SP + url) + d.SetId(loadBalancerId + tccommon.FILED_SP + listenerId + tccommon.FILED_SP + domain + tccommon.FILED_SP + url) } return resourceTencentCloudClbFunctionTargetsAttachmentRead(d, meta) } func resourceTencentCloudClbFunctionTargetsAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_function_targets_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_function_targets_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) var ( loadBalancerId string @@ -309,12 +312,12 @@ func resourceTencentCloudClbFunctionTargetsAttachmentRead(d *schema.ResourceData } func resourceTencentCloudClbFunctionTargetsAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_function_targets_attachment.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_function_targets_attachment.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) var ( request = clb.NewModifyFunctionTargetsRequest() loadBalancerId string @@ -377,14 +380,14 @@ func resourceTencentCloudClbFunctionTargetsAttachmentUpdate(d *schema.ResourceDa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().ModifyFunctionTargets(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ModifyFunctionTargets(request) if e != nil { - return retryError(e) + 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()) requestId := *result.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } @@ -400,12 +403,12 @@ func resourceTencentCloudClbFunctionTargetsAttachmentUpdate(d *schema.ResourceDa } func resourceTencentCloudClbFunctionTargetsAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_function_targets_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_function_targets_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) var ( request = clb.NewDeregisterFunctionTargetsRequest() loadBalancerId string @@ -465,14 +468,14 @@ func resourceTencentCloudClbFunctionTargetsAttachmentDelete(d *schema.ResourceDa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().DeregisterFunctionTargets(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().DeregisterFunctionTargets(request) if e != nil { - return retryError(e) + 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()) requestId := *result.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } diff --git a/tencentcloud/resource_tc_clb_function_targets_attachment_test.go b/tencentcloud/services/clb/resource_tc_clb_function_targets_attachment_test.go similarity index 92% rename from tencentcloud/resource_tc_clb_function_targets_attachment_test.go rename to tencentcloud/services/clb/resource_tc_clb_function_targets_attachment_test.go index 016372aa82..77fe9ce598 100644 --- a/tencentcloud/resource_tc_clb_function_targets_attachment_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_function_targets_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudClbFunctionTargetsAttachmentResource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbFunctionTargetsAttachment, diff --git a/tencentcloud/resource_tc_clb_instance.go b/tencentcloud/services/clb/resource_tc_clb_instance.go similarity index 82% rename from tencentcloud/resource_tc_clb_instance.go rename to tencentcloud/services/clb/resource_tc_clb_instance.go index 5b39bad207..06fe31a881 100644 --- a/tencentcloud/resource_tc_clb_instance.go +++ b/tencentcloud/services/clb/resource_tc_clb_instance.go @@ -1,4 +1,4 @@ -package tencentcloud +package clb import ( "context" @@ -6,16 +6,19 @@ import ( "log" "sync" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) var clbActionMu = &sync.Mutex{} -func resourceTencentCloudClbInstance() *schema.Resource { +func ResourceTencentCloudClbInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbInstanceCreate, Read: resourceTencentCloudClbInstanceRead, @@ -30,13 +33,13 @@ func resourceTencentCloudClbInstance() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue(CLB_NETWORK_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CLB_NETWORK_TYPE), Description: "Type of CLB instance. Valid values: `OPEN` and `INTERNAL`.", }, "clb_name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of the CLB. The name can only contain Chinese characters, English letters, numbers, underscore and hyphen '-'.", }, "clb_vips": { @@ -63,7 +66,7 @@ func resourceTencentCloudClbInstance() *schema.Resource { Type: schema.TypeString, Optional: true, ForceNew: true, - ValidateFunc: validateStringLengthInRange(2, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(2, 60), Description: "Subnet ID of the CLB. Effective only for CLB within the VPC. Only supports `INTERNAL` CLBs. Default is `ipv4`.", }, "address_ip_version": { @@ -209,12 +212,12 @@ func resourceTencentCloudClbInstance() *schema.Resource { } func resourceTencentCloudClbInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_instance.create")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_instance.create")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) networkType := d.Get("network_type").(string) clbName := d.Get("clb_name").(string) @@ -367,17 +370,17 @@ func resourceTencentCloudClbInstanceCreate(d *schema.ResourceData, meta interfac clbId := "" var response *clb.CreateLoadBalancerResponse - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().CreateLoadBalancer(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().CreateLoadBalancer(request) if e != nil { - return retryError(e) + 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()) requestId := *result.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { - return retryError(errors.WithStack(retryErr)) + return tccommon.RetryError(errors.WithStack(retryErr)) } } response = result @@ -404,18 +407,18 @@ func resourceTencentCloudClbInstanceCreate(d *schema.ResourceData, meta interfac sgRequest.SecurityGroups = append(sgRequest.SecurityGroups, &securityGroup) } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - sgResponse, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().SetLoadBalancerSecurityGroups(sgRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + sgResponse, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().SetLoadBalancerSecurityGroups(sgRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, sgRequest.GetAction(), sgRequest.ToJsonString(), sgResponse.ToJsonString()) requestId := *sgResponse.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { - return retryError(errors.WithStack(retryErr)) + return tccommon.RetryError(errors.WithStack(retryErr)) } } return nil @@ -432,18 +435,18 @@ func resourceTencentCloudClbInstanceCreate(d *schema.ResourceData, meta interfac logRequest.LoadBalancerId = helper.String(clbId) logRequest.LogSetId = helper.String(v.(string)) logRequest.LogTopicId = helper.String(u.(string)) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - logResponse, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().SetLoadBalancerClsLog(logRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + logResponse, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().SetLoadBalancerClsLog(logRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, logRequest.GetAction(), logRequest.ToJsonString(), logResponse.ToJsonString()) requestId := *logResponse.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { - return retryError(errors.WithStack(retryErr)) + return tccommon.RetryError(errors.WithStack(retryErr)) } } return nil @@ -468,17 +471,17 @@ func resourceTencentCloudClbInstanceCreate(d *schema.ResourceData, meta interfac mRequest.LoadBalancerId = helper.String(clbId) mRequest.TargetRegionInfo = &targetRegionInfo mRequest.LoadBalancerPassToTarget = &isLoadBalancePassToTgt - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - mResponse, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().ModifyLoadBalancerAttributes(mRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + mResponse, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ModifyLoadBalancerAttributes(mRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, mRequest.GetAction(), mRequest.ToJsonString(), mResponse.ToJsonString()) requestId := *mResponse.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { - return retryError(errors.WithStack(retryErr)) + return tccommon.RetryError(errors.WithStack(retryErr)) } } return nil @@ -494,17 +497,17 @@ func resourceTencentCloudClbInstanceCreate(d *schema.ResourceData, meta interfac mRequest := clb.NewModifyLoadBalancerAttributesRequest() mRequest.LoadBalancerId = helper.String(clbId) mRequest.DeleteProtect = &isDeleteProect - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - mResponse, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().ModifyLoadBalancerAttributes(mRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + mResponse, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ModifyLoadBalancerAttributes(mRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, mRequest.GetAction(), mRequest.ToJsonString(), mResponse.ToJsonString()) requestId := *mResponse.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { - return retryError(errors.WithStack(retryErr)) + return tccommon.RetryError(errors.WithStack(retryErr)) } } return nil @@ -519,21 +522,21 @@ func resourceTencentCloudClbInstanceCreate(d *schema.ResourceData, meta interfac } func resourceTencentCloudClbInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) clbId := d.Id() clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *clb.LoadBalancer - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := clbService.DescribeLoadBalancerById(ctx, clbId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -584,7 +587,7 @@ func resourceTencentCloudClbInstanceRead(d *schema.ResourceData, meta interface{ _ = d.Set("snat_pro", instance.SnatPro) } - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "clb", "clb", tcClient.Region, d.Id()) if err != nil { @@ -596,13 +599,13 @@ func resourceTencentCloudClbInstanceRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudClbInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_instance.update")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_instance.update")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) d.Partial(true) @@ -685,17 +688,17 @@ func resourceTencentCloudClbInstanceUpdate(d *schema.ResourceData, meta interfac } if changed { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().ModifyLoadBalancerAttributes(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ModifyLoadBalancerAttributes(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) requestId := *response.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { - return retryError(retryErr) + return tccommon.RetryError(retryErr) } } return nil @@ -715,10 +718,10 @@ func resourceTencentCloudClbInstanceUpdate(d *schema.ResourceData, meta interfac slaRequest.LoadBalancerSla = []*clb.SlaUpdateParam{¶m} var taskId string - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().ModifyLoadBalancerSla(slaRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ModifyLoadBalancerSla(slaRequest) if e != nil { - return retryError(e) + 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()) } @@ -730,7 +733,7 @@ func resourceTencentCloudClbInstanceUpdate(d *schema.ResourceData, meta interfac return err } - retryErr := waitForTaskFinish(taskId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(taskId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return retryErr } @@ -746,17 +749,17 @@ func resourceTencentCloudClbInstanceUpdate(d *schema.ResourceData, meta interfac securityGroup := securityGroups[i].(string) sgRequest.SecurityGroups = append(sgRequest.SecurityGroups, &securityGroup) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - sgResponse, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().SetLoadBalancerSecurityGroups(sgRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + sgResponse, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().SetLoadBalancerSecurityGroups(sgRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, sgRequest.GetAction(), sgRequest.ToJsonString(), sgResponse.ToJsonString()) requestId := *sgResponse.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { - return retryError(errors.WithStack(retryErr)) + return tccommon.RetryError(errors.WithStack(retryErr)) } } return nil @@ -775,18 +778,18 @@ func resourceTencentCloudClbInstanceUpdate(d *schema.ResourceData, meta interfac logRequest.LoadBalancerId = helper.String(clbId) logRequest.LogSetId = helper.String(logSetId.(string)) logRequest.LogTopicId = helper.String(logTopicId.(string)) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - logResponse, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().SetLoadBalancerClsLog(logRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + logResponse, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().SetLoadBalancerClsLog(logRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, logRequest.GetAction(), logRequest.ToJsonString(), logResponse.ToJsonString()) requestId := *logResponse.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { - return retryError(errors.WithStack(retryErr)) + return tccommon.RetryError(errors.WithStack(retryErr)) } } return nil @@ -802,9 +805,9 @@ func resourceTencentCloudClbInstanceUpdate(d *schema.ResourceData, meta interfac oldValue, newValue := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("clb", "clb", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("clb", "clb", tcClient.Region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -817,23 +820,23 @@ func resourceTencentCloudClbInstanceUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCloudClbInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_instance.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_instance.delete")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) clbId := d.Id() clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := clbService.DeleteLoadBalancerById(ctx, clbId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -846,18 +849,18 @@ func resourceTencentCloudClbInstanceDelete(d *schema.ResourceData, meta interfac } func checkSameName(name string, meta interface{}) (flag bool, errRet error) { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) flag = false clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } params := make(map[string]interface{}) params["clb_name"] = name - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { clbs, e := clbService.DescribeLoadBalancerByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if len(clbs) > 0 { //this describe function is a fuzzy query diff --git a/tencentcloud/resource_tc_clb_instance_mix_ip_target_config.go b/tencentcloud/services/clb/resource_tc_clb_instance_mix_ip_target_config.go similarity index 68% rename from tencentcloud/resource_tc_clb_instance_mix_ip_target_config.go rename to tencentcloud/services/clb/resource_tc_clb_instance_mix_ip_target_config.go index 9c875d3475..ffc1270ead 100644 --- a/tencentcloud/resource_tc_clb_instance_mix_ip_target_config.go +++ b/tencentcloud/services/clb/resource_tc_clb_instance_mix_ip_target_config.go @@ -1,16 +1,19 @@ -package tencentcloud +package clb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClbInstanceMixIpTargetConfig() *schema.Resource { +func ResourceTencentCloudClbInstanceMixIpTargetConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbInstanceMixIpTargetConfigCreate, Read: resourceTencentCloudClbInstanceMixIpTargetConfigRead, @@ -37,8 +40,8 @@ func resourceTencentCloudClbInstanceMixIpTargetConfig() *schema.Resource { } func resourceTencentCloudClbInstanceMixIpTargetConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_instance_mix_ip_target_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_instance_mix_ip_target_config.create")() + defer tccommon.InconsistentCheck(d, meta)() lbId := d.Get("load_balancer_id").(string) @@ -48,14 +51,14 @@ func resourceTencentCloudClbInstanceMixIpTargetConfigCreate(d *schema.ResourceDa } func resourceTencentCloudClbInstanceMixIpTargetConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_instance_mix_ip_target_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_instance_mix_ip_target_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} lbId := d.Id() @@ -82,10 +85,10 @@ func resourceTencentCloudClbInstanceMixIpTargetConfigRead(d *schema.ResourceData } func resourceTencentCloudClbInstanceMixIpTargetConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_instance_mix_ip_target_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_instance_mix_ip_target_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := clb.NewModifyLoadBalancerMixIpTargetRequest() @@ -98,10 +101,10 @@ func resourceTencentCloudClbInstanceMixIpTargetConfigUpdate(d *schema.ResourceDa } var taskId string - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().ModifyLoadBalancerMixIpTarget(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ModifyLoadBalancerMixIpTarget(request) if e != nil { - return retryError(e) + 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()) } @@ -113,7 +116,7 @@ func resourceTencentCloudClbInstanceMixIpTargetConfigUpdate(d *schema.ResourceDa return err } - retryErr := waitForTaskFinish(taskId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(taskId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return retryErr } @@ -122,8 +125,8 @@ func resourceTencentCloudClbInstanceMixIpTargetConfigUpdate(d *schema.ResourceDa } func resourceTencentCloudClbInstanceMixIpTargetConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_instance_mix_ip_target_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_instance_mix_ip_target_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_clb_instance_mix_ip_target_config_test.go b/tencentcloud/services/clb/resource_tc_clb_instance_mix_ip_target_config_test.go similarity index 83% rename from tencentcloud/resource_tc_clb_instance_mix_ip_target_config_test.go rename to tencentcloud/services/clb/resource_tc_clb_instance_mix_ip_target_config_test.go index 081096bd31..59ab237703 100644 --- a/tencentcloud/resource_tc_clb_instance_mix_ip_target_config_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_instance_mix_ip_target_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixClbInstanceMixIpTargetConfigResource_basic(t *tes t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbInstanceMixIpTargetConfig, diff --git a/tencentcloud/resource_tc_clb_instance_sla_config.go b/tencentcloud/services/clb/resource_tc_clb_instance_sla_config.go similarity index 72% rename from tencentcloud/resource_tc_clb_instance_sla_config.go rename to tencentcloud/services/clb/resource_tc_clb_instance_sla_config.go index f4b8134852..f9aca47ce0 100644 --- a/tencentcloud/resource_tc_clb_instance_sla_config.go +++ b/tencentcloud/services/clb/resource_tc_clb_instance_sla_config.go @@ -1,16 +1,19 @@ -package tencentcloud +package clb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClbInstanceSlaConfig() *schema.Resource { +func ResourceTencentCloudClbInstanceSlaConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbInstanceSlaConfigCreate, Read: resourceTencentCloudClbInstanceSlaConfigRead, @@ -44,8 +47,8 @@ func resourceTencentCloudClbInstanceSlaConfig() *schema.Resource { } func resourceTencentCloudClbInstanceSlaConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_instance_sla_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_instance_sla_config.create")() + defer tccommon.InconsistentCheck(d, meta)() lbId := d.Get("load_balancer_id").(string) d.SetId(lbId) @@ -54,14 +57,14 @@ func resourceTencentCloudClbInstanceSlaConfigCreate(d *schema.ResourceData, meta } func resourceTencentCloudClbInstanceSlaConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_instance_sla_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_instance_sla_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} lbId := d.Id() @@ -88,10 +91,10 @@ func resourceTencentCloudClbInstanceSlaConfigRead(d *schema.ResourceData, meta i } func resourceTencentCloudClbInstanceSlaConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_instance_sla_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_instance_sla_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := clb.NewModifyLoadBalancerSlaRequest() @@ -104,10 +107,10 @@ func resourceTencentCloudClbInstanceSlaConfigUpdate(d *schema.ResourceData, meta request.LoadBalancerSla = []*clb.SlaUpdateParam{¶m} var taskId string - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().ModifyLoadBalancerSla(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ModifyLoadBalancerSla(request) if e != nil { - return retryError(e) + 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()) } @@ -119,7 +122,7 @@ func resourceTencentCloudClbInstanceSlaConfigUpdate(d *schema.ResourceData, meta return err } - retryErr := waitForTaskFinish(taskId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(taskId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return retryErr } @@ -128,8 +131,8 @@ func resourceTencentCloudClbInstanceSlaConfigUpdate(d *schema.ResourceData, meta } func resourceTencentCloudClbInstanceSlaConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_instance_sla_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_instance_sla_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_clb_instance_sla_config_test.go b/tencentcloud/services/clb/resource_tc_clb_instance_sla_config_test.go similarity index 82% rename from tencentcloud/resource_tc_clb_instance_sla_config_test.go rename to tencentcloud/services/clb/resource_tc_clb_instance_sla_config_test.go index 77f4f03eb6..4fee5bb81f 100644 --- a/tencentcloud/resource_tc_clb_instance_sla_config_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_instance_sla_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixClbInstanceSlaConfigResource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbInstanceSlaConfig, diff --git a/tencentcloud/resource_tc_clb_instance_test.go b/tencentcloud/services/clb/resource_tc_clb_instance_test.go similarity index 92% rename from tencentcloud/resource_tc_clb_instance_test.go rename to tencentcloud/services/clb/resource_tc_clb_instance_test.go index b5bf6d7d0e..d1f513136c 100644 --- a/tencentcloud/resource_tc_clb_instance_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_instance_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package clb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localclb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" + "context" "fmt" "log" @@ -30,14 +34,14 @@ func init() { } func testSweepClbInstance(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, err := sharedClientForRegion(region) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, err := tcacctest.SharedClientForRegion(region) if err != nil { return err } - client := cli.(*TencentCloudClient).apiV3Conn - service := ClbService{client: client} + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := localclb.NewClbService(client) res, err := service.DescribeLoadBalancerByFilter(ctx, map[string]interface{}{}) if err != nil { @@ -48,16 +52,16 @@ func testSweepClbInstance(region string) error { for _, v := range res { id := *v.LoadBalancerId instanceName := *v.LoadBalancerName - createTime := stringTotime(*v.CreateTime) + createTime := tccommon.StringToTime(*v.CreateTime) now := time.Now() interval := now.Sub(createTime).Minutes() // keep not delete - if strings.HasPrefix(instanceName, keepResource) || strings.HasPrefix(instanceName, defaultResource) { + if strings.HasPrefix(instanceName, tcacctest.KeepResource) || strings.HasPrefix(instanceName, tcacctest.DefaultResource) { continue } // less than 30 minute, not delete - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } if err := service.DeleteLoadBalancerById(ctx, id); err != nil { @@ -73,8 +77,8 @@ func TestAccTencentCloudClbInstanceResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbInstanceDestroy, Steps: []resource.TestStep{ { @@ -101,8 +105,8 @@ func TestAccTencentCloudClbInstanceResource_open(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbInstanceDestroy, Steps: []resource.TestStep{ { @@ -142,8 +146,8 @@ func TestAccTencentCloudClbInstanceResource_snat(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbInstanceDestroy, Steps: []resource.TestStep{ { @@ -163,8 +167,8 @@ func TestAccTencentCloudClbInstanceResource_internal(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbInstanceDestroy, Steps: []resource.TestStep{ { @@ -218,8 +222,8 @@ func TestAccTencentCloudClbInstanceResource_default_enable(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbInstanceDestroy, Steps: []resource.TestStep{ { @@ -260,8 +264,8 @@ func TestAccTencentCloudClbInstanceResource_multiple_instance(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbInstanceDestroy, Steps: []resource.TestStep{ { @@ -291,12 +295,10 @@ func TestAccTencentCloudClbInstanceResource_multiple_instance(t *testing.T) { } func testAccCheckClbInstanceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_clb_instance" { continue @@ -312,8 +314,8 @@ func testAccCheckClbInstanceDestroy(s *terraform.State) error { func testAccCheckClbInstanceExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -322,9 +324,7 @@ func testAccCheckClbInstanceExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLB instance][Exists] check: CLB instance id is not set") } - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := clbService.DescribeLoadBalancerById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_clb_instance_testing_test.go b/tencentcloud/services/clb/resource_tc_clb_instance_testing_test.go similarity index 94% rename from tencentcloud/resource_tc_clb_instance_testing_test.go rename to tencentcloud/services/clb/resource_tc_clb_instance_testing_test.go index 98bb3442bf..6fe1d576c5 100644 --- a/tencentcloud/resource_tc_clb_instance_testing_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_instance_testing_test.go @@ -1,17 +1,19 @@ -package tencentcloud +package clb_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudTestingClbInstanceResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbInstanceDestroy, Steps: []resource.TestStep{ { @@ -36,8 +38,8 @@ func TestAccTencentCloudTestingClbInstanceResource_open(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbInstanceDestroy, Steps: []resource.TestStep{ { @@ -75,8 +77,8 @@ func TestAccTencentCloudClbTestingInstanceResource_multiple_instance(t *testing. t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbInstanceDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/resource_tc_clb_listener.go b/tencentcloud/services/clb/resource_tc_clb_listener.go similarity index 86% rename from tencentcloud/resource_tc_clb_listener.go rename to tencentcloud/services/clb/resource_tc_clb_listener.go index 790f189bd6..b4470a534a 100644 --- a/tencentcloud/resource_tc_clb_listener.go +++ b/tencentcloud/services/clb/resource_tc_clb_listener.go @@ -1,4 +1,4 @@ -package tencentcloud +package clb import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClbListener() *schema.Resource { +func ResourceTencentCloudClbListener() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbListenerCreate, Read: resourceTencentCloudClbListenerRead, @@ -29,27 +32,27 @@ func resourceTencentCloudClbListener() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "ID of the CLB.", }, "listener_name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of the CLB listener, and available values can only be Chinese characters, English letters, numbers, underscore and hyphen '-'.", }, "port": { Type: schema.TypeInt, Optional: true, ForceNew: true, - ValidateFunc: validateIntegerInRange(1, 65535), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 65535), Description: "Port of the CLB listener.", }, "protocol": { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue(CLB_LISTENER_PROTOCOL), + ValidateFunc: tccommon.ValidateAllowedStringValue(CLB_LISTENER_PROTOCOL), Description: "Type of protocol within the listener. Valid values: `TCP`, `UDP`, `HTTP`, `HTTPS`, `TCP_SSL` and `QUIC`.", }, "health_check_switch": { @@ -62,28 +65,28 @@ func resourceTencentCloudClbListener() *schema.Resource { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateIntegerInRange(2, 60), + ValidateFunc: tccommon.ValidateIntegerInRange(2, 60), Description: "Response timeout of health check. Valid value ranges: [2~60] sec. Default is 2 sec. Response timeout needs to be less than check interval. NOTES: Only supports listeners of `TCP`,`UDP`,`TCP_SSL` protocol.", }, "health_check_interval_time": { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateIntegerInRange(2, 300), + ValidateFunc: tccommon.ValidateIntegerInRange(2, 300), Description: "Interval time of health check. Valid value ranges: [2~300] sec. and the default is 5 sec. NOTES: TCP/UDP/TCP_SSL listener allows direct configuration, HTTP/HTTPS listener needs to be configured in `tencentcloud_clb_listener_rule`.", }, "health_check_health_num": { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateIntegerInRange(2, 10), + ValidateFunc: tccommon.ValidateIntegerInRange(2, 10), Description: "Health threshold of health check, and the default is `3`. If a success result is returned for the health check for 3 consecutive times, the backend CVM is identified as healthy. The value range is 2-10. NOTES: TCP/UDP/TCP_SSL listener allows direct configuration, HTTP/HTTPS listener needs to be configured in tencentcloud_clb_listener_rule.", }, "health_check_unhealth_num": { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateIntegerInRange(2, 10), + ValidateFunc: tccommon.ValidateIntegerInRange(2, 10), Description: "Unhealthy threshold of health check, and the default is `3`. " + "If a success result is returned for the health check 3 consecutive times, " + "the CVM is identified as unhealthy. The value range is [2-10]. " + @@ -94,13 +97,13 @@ func resourceTencentCloudClbListener() *schema.Resource { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateAllowedStringValue(HEALTH_CHECK_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(HEALTH_CHECK_TYPE), Description: "Protocol used for health check. Valid values: `CUSTOM`, `TCP`, `HTTP`.", }, "health_check_port": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerInRange(1, 65535), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 65535), Description: "The health check port is the port of the backend service by default. " + "Unless you want to specify a specific port, it is recommended to leave it blank. " + "Only applicable to TCP/UDP listener.", @@ -108,7 +111,7 @@ func resourceTencentCloudClbListener() *schema.Resource { "health_check_http_version": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(HTTP_VERSION), + ValidateFunc: tccommon.ValidateAllowedStringValue(HTTP_VERSION), Description: "The HTTP version of the backend service. When the value of `health_check_type` of " + "the health check protocol is `HTTP`, this field is required. " + "Valid values: `HTTP/1.0`, `HTTP/1.1`.", @@ -116,7 +119,7 @@ func resourceTencentCloudClbListener() *schema.Resource { "health_check_http_code": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerInRange(1, 31), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 31), Description: "HTTP health check code of TCP listener, Valid value ranges: [1~31]. When the value of `health_check_type` of " + "the health check protocol is `HTTP`, this field is required. Valid values: `1`, `2`, `4`, `8`, `16`. " + "`1` means http_1xx, `2` means http_2xx, `4` means http_3xx, `8` means http_4xx, `16` means http_5xx." + @@ -136,13 +139,13 @@ func resourceTencentCloudClbListener() *schema.Resource { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateAllowedStringValue(CLB_HTTP_METHOD), + ValidateFunc: tccommon.ValidateAllowedStringValue(CLB_HTTP_METHOD), Description: "HTTP health check method of TCP listener. Valid values: `HEAD`, `GET`.", }, "health_check_context_type": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CONTEX_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CONTEX_TYPE), Description: "Health check protocol. When the value of `health_check_type` of the health check protocol is `CUSTOM`, " + "this field is required, which represents the input format of the health check. " + "Valid values: `HEX`, `TEXT`.", @@ -150,7 +153,7 @@ func resourceTencentCloudClbListener() *schema.Resource { "health_check_send_context": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(0, 500), + ValidateFunc: tccommon.ValidateStringLengthInRange(0, 500), Description: "It represents the content of the request sent by the health check. " + "When the value of `health_check_type` of the health check protocol is `CUSTOM`, " + "this field is required. Only visible ASCII characters are allowed and the maximum length is 500. " + @@ -161,7 +164,7 @@ func resourceTencentCloudClbListener() *schema.Resource { "health_check_recv_context": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(0, 500), + ValidateFunc: tccommon.ValidateStringLengthInRange(0, 500), Description: "It represents the result returned by the health check. " + "When the value of `health_check_type` of the health check protocol is `CUSTOM`, " + "this field is required. Only ASCII visible characters are allowed and the maximum length is 500. " + @@ -173,13 +176,13 @@ func resourceTencentCloudClbListener() *schema.Resource { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}), Description: "Specifies the type of health check source IP. `0` (default): CLB VIP. `1`: 100.64 IP range.", }, "certificate_ssl_mode": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CERT_SSL_MODE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CERT_SSL_MODE), Description: "Type of certificate. Valid values: `UNIDIRECTIONAL`, `MUTUAL`. NOTES: Only supports listeners of `HTTPS` and `TCP_SSL` protocol and must be set when it is available.", }, "certificate_id": { @@ -195,14 +198,14 @@ func resourceTencentCloudClbListener() *schema.Resource { "session_expire_time": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerInRange(30, 3600), + ValidateFunc: tccommon.ValidateIntegerInRange(30, 3600), Description: "Time of session persistence within the CLB listener. NOTES: Available when scheduler is specified as `WRR`, and not available when listener protocol is `TCP_SSL`. NOTES: TCP/UDP/TCP_SSL listener allows direct configuration, HTTP/HTTPS listener needs to be configured in `tencentcloud_clb_listener_rule`.", }, "scheduler": { Type: schema.TypeString, Default: CLB_LISTENER_SCHEDULER_WRR, Optional: true, - ValidateFunc: validateAllowedStringValue(CLB_LISTENER_SCHEDULER), + ValidateFunc: tccommon.ValidateAllowedStringValue(CLB_LISTENER_SCHEDULER), Description: "Scheduling method of the CLB listener, and available values are 'WRR' and 'LEAST_CONN'. The default is 'WRR'. NOTES: The listener of `HTTP` and `HTTPS` protocol additionally supports the `IP Hash` method. NOTES: TCP/UDP/TCP_SSL listener allows direct configuration, HTTP/HTTPS listener needs to be configured in `tencentcloud_clb_listener_rule`.", }, "sni_switch": { @@ -215,14 +218,14 @@ func resourceTencentCloudClbListener() *schema.Resource { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateAllowedStringValue([]string{CLB_TARGET_TYPE_NODE, CLB_TARGET_TYPE_TARGETGROUP}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{CLB_TARGET_TYPE_NODE, CLB_TARGET_TYPE_TARGETGROUP}), Description: "Backend target type. Valid values: `NODE`, `TARGETGROUP`. `NODE` means to bind ordinary nodes, `TARGETGROUP` means to bind target group. NOTES: TCP/UDP/TCP_SSL listener must configuration, HTTP/HTTPS listener needs to be configured in tencentcloud_clb_listener_rule.", }, "session_type": { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateAllowedStringValue([]string{CLB_SESSION_TYPE_NORMAL, CLB_SESSION_TYPE_QUIC}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{CLB_SESSION_TYPE_NORMAL, CLB_SESSION_TYPE_QUIC}), Description: "Session persistence type. Valid values: `NORMAL`: the default session persistence type; `QUIC_CID`: session persistence by QUIC connection ID. The `QUIC_CID` value can only be configured in UDP listeners. If this field is not specified, the default session persistence type will be used.", }, "keepalive_enable": { @@ -249,13 +252,13 @@ func resourceTencentCloudClbListener() *schema.Resource { } func resourceTencentCloudClbListenerCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_listener.create")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_listener.create")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) clbId := d.Get("clb_id").(string) listenerName := d.Get("listener_name").(string) @@ -347,15 +350,15 @@ func resourceTencentCloudClbListenerCreate(d *schema.ResourceData, meta interfac } var response *clb.CreateListenerResponse - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().CreateListener(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().CreateListener(request) if e != nil { - return retryError(e) + 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()) requestId := *result.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } @@ -373,22 +376,22 @@ func resourceTencentCloudClbListenerCreate(d *schema.ResourceData, meta interfac listenerId := *response.Response.ListenerIds[0] //this ID style changes since terraform 1.47.0 - d.SetId(clbId + FILED_SP + listenerId) + d.SetId(clbId + tccommon.FILED_SP + listenerId) return resourceTencentCloudClbListenerRead(d, meta) } func resourceTencentCloudClbListenerRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_listener.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_listener.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } resourceId := d.Id() var listenerId = resourceId - items := strings.Split(resourceId, FILED_SP) + items := strings.Split(resourceId, tccommon.FILED_SP) itemLength := len(items) clbId := d.Get("clb_id").(string) @@ -404,10 +407,10 @@ func resourceTencentCloudClbListenerRead(d *schema.ResourceData, meta interface{ } var instance *clb.Listener - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := clbService.DescribeListenerById(ctx, listenerId, clbId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -518,15 +521,15 @@ func resourceTencentCloudClbListenerRead(d *schema.ResourceData, meta interface{ } func resourceTencentCloudClbListenerUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_listener.update")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_listener.update")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) resourceId := d.Id() - items := strings.Split(resourceId, FILED_SP) + items := strings.Split(resourceId, tccommon.FILED_SP) itemLength := len(items) listenerId := items[itemLength-1] clbId := d.Get("clb_id").(string) @@ -608,15 +611,15 @@ func resourceTencentCloudClbListenerUpdate(d *schema.ResourceData, meta interfac } if changed { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().ModifyListener(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ModifyListener(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) requestId := *response.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } @@ -633,25 +636,25 @@ func resourceTencentCloudClbListenerUpdate(d *schema.ResourceData, meta interfac } func resourceTencentCloudClbListenerDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_listener.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_listener.delete")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) resourceId := d.Id() - items := strings.Split(resourceId, FILED_SP) + items := strings.Split(resourceId, tccommon.FILED_SP) itemLength := len(items) listenerId := items[itemLength-1] clbId := d.Get("clb_id").(string) clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := clbService.DeleteListenerById(ctx, clbId, listenerId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_clb_listener_rule.go b/tencentcloud/services/clb/resource_tc_clb_listener_rule.go similarity index 83% rename from tencentcloud/resource_tc_clb_listener_rule.go rename to tencentcloud/services/clb/resource_tc_clb_listener_rule.go index 1fb88570ea..917197c364 100644 --- a/tencentcloud/resource_tc_clb_listener_rule.go +++ b/tencentcloud/services/clb/resource_tc_clb_listener_rule.go @@ -1,4 +1,4 @@ -package tencentcloud +package clb import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClbListenerRule() *schema.Resource { +func ResourceTencentCloudClbListenerRule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbListenerRuleCreate, Read: resourceTencentCloudClbListenerRuleRead, @@ -55,42 +58,42 @@ func resourceTencentCloudClbListenerRule() *schema.Resource { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateIntegerInRange(2, 300), + ValidateFunc: tccommon.ValidateIntegerInRange(2, 300), Description: "Interval time of health check. Valid value ranges: (2~300) sec. and the default is `5` sec. NOTES: TCP/UDP/TCP_SSL listener allows direct configuration, HTTP/HTTPS listener needs to be configured in `tencentcloud_clb_listener_rule`.", }, "health_check_health_num": { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateIntegerInRange(2, 10), + ValidateFunc: tccommon.ValidateIntegerInRange(2, 10), Description: "Health threshold of health check, and the default is `3`. If a success result is returned for the health check 3 consecutive times, indicates that the forwarding is normal. The value range is [2-10]. NOTES: TCP/UDP/TCP_SSL listener allows direct configuration, HTTP/HTTPS listener needs to be configured in `tencentcloud_clb_listener_rule`.", }, "health_check_unhealth_num": { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateIntegerInRange(2, 10), + ValidateFunc: tccommon.ValidateIntegerInRange(2, 10), Description: "Unhealthy threshold of health check, and the default is `3`. If the unhealthy result is returned 3 consecutive times, indicates that the forwarding is abnormal. The value range is [2-10]. NOTES: TCP/UDP/TCP_SSL listener allows direct configuration, HTTP/HTTPS listener needs to be configured in `tencentcloud_clb_listener_rule`.", }, "health_check_type": { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateAllowedStringValue(HEALTH_CHECK_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(HEALTH_CHECK_TYPE), Description: "Type of health check. Valid value is `CUSTOM`, `TCP`, `HTTP`.", }, "health_check_time_out": { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateIntegerInRange(2, 60), + ValidateFunc: tccommon.ValidateIntegerInRange(2, 60), Description: "Time out of health check. The value range is [2-60](SEC).", }, "health_check_http_code": { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateIntegerInRange(1, 31), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 31), Description: "HTTP Status Code. The default is 31. Valid value ranges: [1~31]. `1 means the return value '1xx' is health. `2` means the return value '2xx' is health. `4` means the return value '3xx' is health. `8` means the return value '4xx' is health. 16 means the return value '5xx' is health. If you want multiple return codes to indicate health, need to add the corresponding values. NOTES: The 'HTTP' health check of the 'TCP' listener only supports specifying one health check status code. NOTES: Only supports listeners of 'HTTP' and 'HTTPS' protocol.", }, "health_check_http_path": { @@ -109,14 +112,14 @@ func resourceTencentCloudClbListenerRule() *schema.Resource { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateAllowedStringValue(CLB_HTTP_METHOD), + ValidateFunc: tccommon.ValidateAllowedStringValue(CLB_HTTP_METHOD), Description: "Methods of health check. NOTES: Only supports listeners of `HTTP` and `HTTPS` protocol. The default is `HEAD`, the available value are `HEAD` and `GET`.", }, "certificate_ssl_mode": { Type: schema.TypeString, Optional: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue(CERT_SSL_MODE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CERT_SSL_MODE), Description: "Type of certificate. Valid values: `UNIDIRECTIONAL`, `MUTUAL`. NOTES: Only supports listeners of HTTPS protocol.", }, "certificate_id": { @@ -132,7 +135,7 @@ func resourceTencentCloudClbListenerRule() *schema.Resource { "session_expire_time": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerInRange(30, 3600), + ValidateFunc: tccommon.ValidateIntegerInRange(30, 3600), Description: "Time of session persistence within the CLB listener. NOTES: Available when scheduler is specified as `WRR`, and not available when listener protocol is `TCP_SSL`. NOTES: TCP/UDP/TCP_SSL listener allows direct configuration, HTTP/HTTPS listener needs to be configured in `tencentcloud_clb_listener_rule`.", }, "http2_switch": { @@ -145,7 +148,7 @@ func resourceTencentCloudClbListenerRule() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CLB_LISTENER_SCHEDULER_WRR, - ValidateFunc: validateAllowedStringValue(CLB_LISTENER_SCHEDULER), + ValidateFunc: tccommon.ValidateAllowedStringValue(CLB_LISTENER_SCHEDULER), Description: "Scheduling method of the CLB listener rules. Valid values: `WRR`, `IP HASH`, `LEAST_CONN`. The default is `WRR`. NOTES: TCP/UDP/TCP_SSL listener allows direct configuration, HTTP/HTTPS listener needs to be configured in `tencentcloud_clb_listener_rule`.", }, "target_type": { @@ -153,14 +156,14 @@ func resourceTencentCloudClbListenerRule() *schema.Resource { Optional: true, ForceNew: true, Default: CLB_TARGET_TYPE_NODE, - ValidateFunc: validateAllowedStringValue([]string{CLB_TARGET_TYPE_NODE, CLB_TARGET_TYPE_TARGETGROUP}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{CLB_TARGET_TYPE_NODE, CLB_TARGET_TYPE_TARGETGROUP}), Description: "Backend target type. Valid values: `NODE`, `TARGETGROUP`. `NODE` means to bind ordinary nodes, `TARGETGROUP` means to bind target group.", }, "forward_type": { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateAllowedStringValue([]string{"HTTP", "HTTPS", "TRPC"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"HTTP", "HTTPS", "TRPC"}), Description: "Forwarding protocol between the CLB instance and real server. Valid values: `HTTP`, `HTTPS`, `TRPC`. The default is `HTTP`.", }, "quic": { @@ -180,13 +183,13 @@ func resourceTencentCloudClbListenerRule() *schema.Resource { } func resourceTencentCloudClbListenerRuleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_listener_rule.create")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_listener_rule.create")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) listenerId := d.Get("listener_id").(string) checkErr := ListenerIdCheck(listenerId) if checkErr != nil { @@ -196,12 +199,12 @@ func resourceTencentCloudClbListenerRuleCreate(d *schema.ResourceData, meta inte protocol := "" //get listener protocol clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, e := clbService.DescribeListenerById(ctx, listenerId, clbId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if instance != nil { protocol = *(instance.Protocol) @@ -276,16 +279,16 @@ func resourceTencentCloudClbListenerRuleCreate(d *schema.ResourceData, meta inte request.Rules = []*clb.RuleInput{&rule} - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { requestId := "" - response, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().CreateRule(request) + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().CreateRule(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) requestId = *response.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } @@ -298,10 +301,10 @@ func resourceTencentCloudClbListenerRuleCreate(d *schema.ResourceData, meta inte } locationId := "" - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ruleInstance, ruleErr := clbService.DescribeRuleByPara(ctx, clbId, listenerId, domain, url) if ruleErr != nil { - return retryError(errors.WithStack(ruleErr)) + return tccommon.RetryError(errors.WithStack(ruleErr)) } locationId = *ruleInstance.LocationId return nil @@ -312,7 +315,7 @@ func resourceTencentCloudClbListenerRuleCreate(d *schema.ResourceData, meta inte } //this ID style changes since terraform 1.47.0 - d.SetId(clbId + FILED_SP + listenerId + FILED_SP + locationId) + d.SetId(clbId + tccommon.FILED_SP + listenerId + tccommon.FILED_SP + locationId) // set http2 if v, ok := d.GetOkExists("http2_switch"); ok { @@ -322,15 +325,15 @@ func resourceTencentCloudClbListenerRuleCreate(d *schema.ResourceData, meta inte domainRequest.LoadBalancerId = &clbId domainRequest.ListenerId = &listenerId domainRequest.Domain = &domain - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().ModifyDomainAttributes(domainRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ModifyDomainAttributes(domainRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) requestId := *response.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } @@ -346,15 +349,15 @@ func resourceTencentCloudClbListenerRuleCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudClbListenerRuleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_listener_rule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_listener_rule.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) resourceId := d.Id() var locationId = resourceId - items := strings.Split(resourceId, FILED_SP) + items := strings.Split(resourceId, tccommon.FILED_SP) itemLength := len(items) clbId := d.Get("clb_id").(string) listenerId := d.Get("listener_id").(string) @@ -376,15 +379,15 @@ func resourceTencentCloudClbListenerRuleRead(d *schema.ResourceData, meta interf } clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } //this function is not supported by api, need to be travelled filter := map[string]string{"rule_id": locationId, "listener_id": listenerId, "clb_id": clbId} var instances []*clb.RuleOutput - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := clbService.DescribeRulesByFilter(ctx, filter) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instances = results return nil @@ -449,15 +452,15 @@ func resourceTencentCloudClbListenerRuleRead(d *schema.ResourceData, meta interf } func resourceTencentCloudClbListenerRuleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_listener_rule.update")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_listener_rule.update")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) resourceId := d.Id() - items := strings.Split(resourceId, FILED_SP) + items := strings.Split(resourceId, tccommon.FILED_SP) itemLength := len(items) locationId := items[itemLength-1] listenerId := d.Get("listener_id").(string) @@ -469,12 +472,12 @@ func resourceTencentCloudClbListenerRuleUpdate(d *schema.ResourceData, meta inte protocol := "" //get listener protocol clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { instance, e := clbService.DescribeListenerById(ctx, listenerId, clbId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } protocol = *(instance.Protocol) return nil @@ -537,15 +540,15 @@ func resourceTencentCloudClbListenerRuleUpdate(d *schema.ResourceData, meta inte } if changed { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().ModifyRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ModifyRule(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) requestId := *response.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } @@ -604,15 +607,15 @@ func resourceTencentCloudClbListenerRuleUpdate(d *schema.ResourceData, meta inte if domainChanged { domainRequest.ListenerId = &listenerId domainRequest.LoadBalancerId = &clbId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().ModifyDomainAttributes(domainRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ModifyDomainAttributes(domainRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) requestId := *response.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } @@ -629,15 +632,15 @@ func resourceTencentCloudClbListenerRuleUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudClbListenerRuleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_listener_rule.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_listener_rule.delete")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) resourceId := d.Id() - items := strings.Split(resourceId, FILED_SP) + items := strings.Split(resourceId, tccommon.FILED_SP) itemLength := len(items) locationId := items[itemLength-1] listenerId := d.Get("listener_id").(string) @@ -648,12 +651,12 @@ func resourceTencentCloudClbListenerRuleDelete(d *schema.ResourceData, meta inte clbId := d.Get("clb_id").(string) clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := clbService.DeleteRuleById(ctx, clbId, listenerId, locationId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_clb_listener_rule_test.go b/tencentcloud/services/clb/resource_tc_clb_listener_rule_test.go similarity index 89% rename from tencentcloud/resource_tc_clb_listener_rule_test.go rename to tencentcloud/services/clb/resource_tc_clb_listener_rule_test.go index 5a8ee77de5..794d576511 100644 --- a/tencentcloud/resource_tc_clb_listener_rule_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_listener_rule_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package clb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localclb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" + "context" "fmt" "strings" @@ -14,8 +18,8 @@ func TestAccTencentCloudClbListenerRuleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbListenerRuleDestroy, Steps: []resource.TestStep{ { @@ -58,12 +62,12 @@ func TestAccTencentCloudClbListenerRuleResource_full(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbListenerRuleDestroy, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccClbListenerRule_full, defaultSshCertificate, defaultSshCertificateB), + Config: fmt.Sprintf(testAccClbListenerRule_full, tcacctest.DefaultSshCertificate, tcacctest.DefaultSshCertificateB), Check: resource.ComposeTestCheckFunc( testAccCheckClbListenerRuleExists("tencentcloud_clb_listener_rule.rule_full"), resource.TestCheckResourceAttrSet("tencentcloud_clb_listener_rule.rule_full", "clb_id"), @@ -81,10 +85,10 @@ func TestAccTencentCloudClbListenerRuleResource_full(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_clb_listener_rule.rule_full", "health_check_http_domain", "abc.com"), resource.TestCheckResourceAttr("tencentcloud_clb_listener_rule.rule_full", "health_check_http_path", "/"), resource.TestCheckResourceAttr("tencentcloud_clb_listener_rule.rule_full", "certificate_ssl_mode", "UNIDIRECTIONAL"), - resource.TestCheckResourceAttr("tencentcloud_clb_listener_rule.rule_full", "certificate_id", defaultSshCertificateB), + resource.TestCheckResourceAttr("tencentcloud_clb_listener_rule.rule_full", "certificate_id", tcacctest.DefaultSshCertificateB), ), }, { - Config: fmt.Sprintf(testAccClbListenerRule_update, defaultSshCertificate, defaultSshCertificateB), + Config: fmt.Sprintf(testAccClbListenerRule_update, tcacctest.DefaultSshCertificate, tcacctest.DefaultSshCertificateB), Check: resource.ComposeTestCheckFunc( testAccCheckClbListenerRuleExists("tencentcloud_clb_listener_rule.rule_full"), resource.TestCheckResourceAttrSet("tencentcloud_clb_listener_rule.rule_full", "clb_id"), @@ -102,7 +106,7 @@ func TestAccTencentCloudClbListenerRuleResource_full(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_clb_listener_rule.rule_full", "health_check_http_domain", "abcd.com"), resource.TestCheckResourceAttr("tencentcloud_clb_listener_rule.rule_full", "health_check_http_path", "/"), resource.TestCheckResourceAttr("tencentcloud_clb_listener_rule.rule_full", "certificate_ssl_mode", "UNIDIRECTIONAL"), - resource.TestCheckResourceAttr("tencentcloud_clb_listener_rule.rule_full", "certificate_id", defaultSshCertificateB), + resource.TestCheckResourceAttr("tencentcloud_clb_listener_rule.rule_full", "certificate_id", tcacctest.DefaultSshCertificateB), ), }, { @@ -115,18 +119,16 @@ func TestAccTencentCloudClbListenerRuleResource_full(t *testing.T) { } func testAccCheckClbListenerRuleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_clb_listener_rule" { continue } resourceId := rs.Primary.ID - items := strings.Split(resourceId, FILED_SP) + items := strings.Split(resourceId, tccommon.FILED_SP) itemLength := len(items) locationId := items[itemLength-1] listenerId := rs.Primary.Attributes["listener_id"] @@ -143,8 +145,8 @@ func testAccCheckClbListenerRuleDestroy(s *terraform.State) error { func testAccCheckClbListenerRuleExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -153,11 +155,9 @@ func testAccCheckClbListenerRuleExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLB listener rule][Exists] check: CLB listener rule id is not set") } - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) resourceId := rs.Primary.ID - items := strings.Split(resourceId, FILED_SP) + items := strings.Split(resourceId, tccommon.FILED_SP) itemLength := len(items) locationId := items[itemLength-1] listenerId := rs.Primary.Attributes["listener_id"] diff --git a/tencentcloud/resource_tc_clb_listener_test.go b/tencentcloud/services/clb/resource_tc_clb_listener_test.go similarity index 93% rename from tencentcloud/resource_tc_clb_listener_test.go rename to tencentcloud/services/clb/resource_tc_clb_listener_test.go index 12a948b9c9..bbd24eb685 100644 --- a/tencentcloud/resource_tc_clb_listener_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_listener_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package clb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localclb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" + "context" "fmt" "strings" @@ -15,8 +19,8 @@ func TestAccTencentCloudClbListener_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbListenerDestroy, Steps: []resource.TestStep{ { @@ -44,8 +48,8 @@ func TestAccTencentCloudClbListenerResource_PortRange(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbListenerDestroy, Steps: []resource.TestStep{ { @@ -74,8 +78,8 @@ func TestAccTencentCloudClbListener_tcp_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbListenerDestroy, Steps: []resource.TestStep{ { @@ -126,8 +130,8 @@ func TestAccTencentCloudClbListener_tcp_basic(t *testing.T) { func TestAccTencentCloudClbListenerTCPWithTCP(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbListenerDestroy, Steps: []resource.TestStep{ { @@ -179,8 +183,8 @@ func TestAccTencentCloudClbListenerTCPWithTCP(t *testing.T) { func TestAccTencentCloudClbListenerTCPWithHTTP(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbListenerDestroy, Steps: []resource.TestStep{ { @@ -242,8 +246,8 @@ func TestAccTencentCloudClbListenerTCPWithHTTP(t *testing.T) { func TestAccTencentCloudClbListenerTCPWithCustomer(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbListenerDestroy, Steps: []resource.TestStep{ { @@ -301,12 +305,12 @@ func TestAccTencentCloudClbListener_https(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbListenerDestroy, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccClbListener_https, defaultSshCertificate), + Config: fmt.Sprintf(testAccClbListener_https, tcacctest.DefaultSshCertificate), Check: resource.ComposeTestCheckFunc( testAccCheckClbListenerExists("tencentcloud_clb_listener.listener_https"), resource.TestCheckResourceAttrSet("tencentcloud_clb_listener.listener_https", "clb_id"), @@ -314,11 +318,11 @@ func TestAccTencentCloudClbListener_https(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_https", "listener_name", "listener_https"), resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_https", "port", "77"), resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_https", "certificate_ssl_mode", "UNIDIRECTIONAL"), - resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_https", "certificate_id", defaultSshCertificate), + resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_https", "certificate_id", tcacctest.DefaultSshCertificate), ), }, { - Config: fmt.Sprintf(testAccClbListener_https_update, defaultSshCertificateB), + Config: fmt.Sprintf(testAccClbListener_https_update, tcacctest.DefaultSshCertificateB), Check: resource.ComposeTestCheckFunc( testAccCheckClbListenerExists("tencentcloud_clb_listener.listener_https"), resource.TestCheckResourceAttrSet("tencentcloud_clb_listener.listener_https", "clb_id"), @@ -326,7 +330,7 @@ func TestAccTencentCloudClbListener_https(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_https", "listener_name", "listener_https_update"), resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_https", "port", "33"), resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_https", "certificate_ssl_mode", "UNIDIRECTIONAL"), - resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_https", "certificate_id", defaultSshCertificateB), + resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_https", "certificate_id", tcacctest.DefaultSshCertificateB), ), }, { @@ -342,12 +346,12 @@ func TestAccTencentCloudClbListener_tcpssl(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbListenerDestroy, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccClbListener_tcpssl, defaultSshCertificate), + Config: fmt.Sprintf(testAccClbListener_tcpssl, tcacctest.DefaultSshCertificate), Check: resource.ComposeTestCheckFunc( testAccCheckClbListenerExists("tencentcloud_clb_listener.listener_tcpssl"), resource.TestCheckResourceAttrSet("tencentcloud_clb_listener.listener_tcpssl", "clb_id"), @@ -355,7 +359,7 @@ func TestAccTencentCloudClbListener_tcpssl(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "listener_name", "listener_tcpssl"), resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "port", "44"), resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "certificate_ssl_mode", "UNIDIRECTIONAL"), - resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "certificate_id", defaultSshCertificate), + resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "certificate_id", tcacctest.DefaultSshCertificate), resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "port", "44"), resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "scheduler", "WRR"), resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "health_check_switch", "true"), @@ -366,7 +370,7 @@ func TestAccTencentCloudClbListener_tcpssl(t *testing.T) { ), }, { - Config: fmt.Sprintf(testAccClbListener_tcpssl_update, defaultSshCertificateB), + Config: fmt.Sprintf(testAccClbListener_tcpssl_update, tcacctest.DefaultSshCertificateB), Check: resource.ComposeTestCheckFunc( testAccCheckClbListenerExists("tencentcloud_clb_listener.listener_tcpssl"), resource.TestCheckResourceAttrSet("tencentcloud_clb_listener.listener_tcpssl", "clb_id"), @@ -374,7 +378,7 @@ func TestAccTencentCloudClbListener_tcpssl(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "listener_name", "listener_tcpssl_update"), resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "port", "44"), resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "certificate_ssl_mode", "UNIDIRECTIONAL"), - resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "certificate_id", defaultSshCertificateB), + resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "certificate_id", tcacctest.DefaultSshCertificateB), resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "port", "44"), resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "scheduler", "WRR"), resource.TestCheckResourceAttr("tencentcloud_clb_listener.listener_tcpssl", "health_check_switch", "true"), @@ -394,19 +398,17 @@ func TestAccTencentCloudClbListener_tcpssl(t *testing.T) { } func testAccCheckClbListenerDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_clb_listener" { continue } time.Sleep(5 * time.Second) resourceId := rs.Primary.ID - items := strings.Split(resourceId, FILED_SP) + items := strings.Split(resourceId, tccommon.FILED_SP) itemLength := len(items) listenerId := items[itemLength-1] clbId := rs.Primary.Attributes["clb_id"] @@ -423,8 +425,8 @@ func testAccCheckClbListenerDestroy(s *terraform.State) error { func testAccCheckClbListenerExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -433,11 +435,9 @@ func testAccCheckClbListenerExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLB listener][Exists] check: CLB listener id is not set") } - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) resourceId := rs.Primary.ID - items := strings.Split(resourceId, FILED_SP) + items := strings.Split(resourceId, tccommon.FILED_SP) itemLength := len(items) listenerId := items[itemLength-1] clbId := rs.Primary.Attributes["clb_id"] diff --git a/tencentcloud/resource_tc_clb_listener_testing_test.go b/tencentcloud/services/clb/resource_tc_clb_listener_testing_test.go similarity index 93% rename from tencentcloud/resource_tc_clb_listener_testing_test.go rename to tencentcloud/services/clb/resource_tc_clb_listener_testing_test.go index 5f3b95400d..d250511f5a 100644 --- a/tencentcloud/resource_tc_clb_listener_testing_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_listener_testing_test.go @@ -1,17 +1,19 @@ -package tencentcloud +package clb_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudTestingClbListener_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbListenerDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/resource_tc_clb_log_set.go b/tencentcloud/services/clb/resource_tc_clb_log_set.go similarity index 70% rename from tencentcloud/resource_tc_clb_log_set.go rename to tencentcloud/services/clb/resource_tc_clb_log_set.go index 81d7a29a3b..404b9d14f8 100644 --- a/tencentcloud/resource_tc_clb_log_set.go +++ b/tencentcloud/services/clb/resource_tc_clb_log_set.go @@ -1,16 +1,18 @@ -package tencentcloud +package clb import ( "context" "fmt" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudClbLogSet() *schema.Resource { +func ResourceTencentCloudClbLogSet() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbLogSetCreate, Read: resourceTencentCloudClbLogSetRead, @@ -45,12 +47,12 @@ func resourceTencentCloudClbLogSet() *schema.Resource { } func resourceTencentCloudClbLogSetRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_logset.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_logset.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() @@ -74,13 +76,13 @@ func resourceTencentCloudClbLogSetRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudClbLogSetCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_logset.create")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_logset.create")() defer clbActionMu.Unlock() clbActionMu.Lock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} _, _, err := service.DescribeClbLogSet(ctx) if err != nil { @@ -105,14 +107,14 @@ func resourceTencentCloudClbLogSetCreate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudClbLogSetDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_logset.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_logset.delete")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() if err := service.DeleteClsLogsetById(ctx, id); err != nil { diff --git a/tencentcloud/resource_tc_clb_log_set_test.go b/tencentcloud/services/clb/resource_tc_clb_log_set_test.go similarity index 70% rename from tencentcloud/resource_tc_clb_log_set_test.go rename to tencentcloud/services/clb/resource_tc_clb_log_set_test.go index 1a9f4aef5c..ec0df8c838 100644 --- a/tencentcloud/resource_tc_clb_log_set_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_log_set_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package clb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localclb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" + "context" "fmt" "testing" @@ -14,8 +18,8 @@ func TestAccTencentCloudClbLogset_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbLogsetDestroy, Steps: []resource.TestStep{ { @@ -36,12 +40,10 @@ func TestAccTencentCloudClbLogset_basic(t *testing.T) { } func testAccCheckClbLogsetDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - clsService := ClsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clsService := localclb.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_clb_logset" { continue @@ -58,8 +60,8 @@ func testAccCheckClbLogsetDestroy(s *terraform.State) error { func testAccCheckClbLogsetExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -68,9 +70,7 @@ func testAccCheckClbLogsetExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLB logset][Exists] check: CLB logset id is not set") } - service := ClsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + service := localclb.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) resourceId := rs.Primary.ID instance, err := service.DescribeClsLogset(ctx, resourceId) if err != nil { diff --git a/tencentcloud/resource_tc_clb_log_topic.go b/tencentcloud/services/clb/resource_tc_clb_log_topic.go similarity index 78% rename from tencentcloud/resource_tc_clb_log_topic.go rename to tencentcloud/services/clb/resource_tc_clb_log_topic.go index cc7ce34f2e..6c61b45117 100644 --- a/tencentcloud/resource_tc_clb_log_topic.go +++ b/tencentcloud/services/clb/resource_tc_clb_log_topic.go @@ -1,4 +1,4 @@ -package tencentcloud +package clb import ( "context" @@ -6,12 +6,14 @@ import ( "log" "sync" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) var clsActionMu = &sync.Mutex{} -func resourceTencentCloudClbLogTopic() *schema.Resource { +func ResourceTencentCloudClbLogTopic() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbInstanceTopicCreate, Read: resourceTencentCloudClbInstanceTopicRead, @@ -36,7 +38,7 @@ func resourceTencentCloudClbLogTopic() *schema.Resource { //"partition_count": { // Type: schema.TypeInt, // Optional: true, - // ValidateFunc: validateIntegerInRange(1, 10), + // ValidateFunc: tccommon.ValidateIntegerInRange(1, 10), // Description: "Topic partition count of CLB instance.(Default 1).", //}, //compute @@ -55,11 +57,11 @@ func resourceTencentCloudClbLogTopic() *schema.Resource { } func resourceTencentCloudClbInstanceTopicCreate(d *schema.ResourceData, meta interface{}) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) clsService := ClsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if v, ok := d.GetOk("log_set_id"); ok { @@ -73,7 +75,7 @@ func resourceTencentCloudClbInstanceTopicCreate(d *schema.ResourceData, meta int } clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } params := make(map[string]interface{}) if topicName, ok := d.GetOk("topic_name"); ok { @@ -94,12 +96,12 @@ func resourceTencentCloudClbInstanceTopicCreate(d *schema.ResourceData, meta int func resourceTencentCloudClbInstanceTopicRead(d *schema.ResourceData, meta interface{}) error { clsActionMu.Lock() defer clsActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() clsService := ClsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } res, err := clsService.DescribeClsTopicById(ctx, id) if err != nil { @@ -120,12 +122,12 @@ func resourceTencentCloudClbInstanceTopicRead(d *schema.ResourceData, meta inter func resourceTencentCloudClbInstanceTopicDelete(d *schema.ResourceData, meta interface{}) error { clsActionMu.Lock() defer clsActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() clsService := ClsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } err := clsService.DeleteClsTopic(ctx, id) if err != nil { diff --git a/tencentcloud/resource_tc_clb_log_topic_test.go b/tencentcloud/services/clb/resource_tc_clb_log_topic_test.go similarity index 70% rename from tencentcloud/resource_tc_clb_log_topic_test.go rename to tencentcloud/services/clb/resource_tc_clb_log_topic_test.go index d673bb8806..80936f8d1b 100644 --- a/tencentcloud/resource_tc_clb_log_topic_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_log_topic_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package clb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localclb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" + "context" "fmt" "testing" @@ -12,8 +16,8 @@ import ( func TestAccTencentCloudClbInstanceTopic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbListenerRuleDestroy, Steps: []resource.TestStep{ { @@ -29,8 +33,8 @@ func TestAccTencentCloudClbInstanceTopic(t *testing.T) { func testAccCheckClbInstanceTopicExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -39,9 +43,7 @@ func testAccCheckClbInstanceTopicExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLB topic][Exists] check: CLB topic id is not set") } - clsService := ClsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clsService := localclb.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := clsService.DescribeClsTopicById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_clb_redirection.go b/tencentcloud/services/clb/resource_tc_clb_redirection.go similarity index 77% rename from tencentcloud/resource_tc_clb_redirection.go rename to tencentcloud/services/clb/resource_tc_clb_redirection.go index 4ccb75b1da..b8e826535a 100644 --- a/tencentcloud/resource_tc_clb_redirection.go +++ b/tencentcloud/services/clb/resource_tc_clb_redirection.go @@ -1,18 +1,21 @@ -package tencentcloud +package clb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClbRedirection() *schema.Resource { +func ResourceTencentCloudClbRedirection() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbRedirectionCreate, Read: resourceTencentCloudClbRedirectionRead, @@ -74,13 +77,13 @@ func resourceTencentCloudClbRedirection() *schema.Resource { } func resourceTencentCloudClbRedirectionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_redirection.create")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_redirection.create")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) clbId := d.Get("clb_id").(string) targetListenerId := d.Get("target_listener_id").(string) @@ -124,14 +127,14 @@ func resourceTencentCloudClbRedirectionCreate(d *schema.ResourceData, meta inter //check target listener is https:443 clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } protocol := "" port := -1 - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, e := clbService.DescribeListenerById(ctx, targetListenerId, clbId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } protocol = *(instance.Protocol) port = int(*(instance.Port)) @@ -149,10 +152,10 @@ func resourceTencentCloudClbRedirectionCreate(d *schema.ResourceData, meta inter //get host array from location filter := map[string]string{"rule_id": targetLocId, "listener_id": targetListenerId, "clb_id": clbId} var instances []*clb.RuleOutput - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := clbService.DescribeRulesByFilter(ctx, filter) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instances = results return nil @@ -174,15 +177,15 @@ func resourceTencentCloudClbRedirectionCreate(d *schema.ResourceData, meta inter if sourceListenerId != "" || sourceLocId != "" { return fmt.Errorf("[CHECK][CLB redirection][Create] check: auto rewrite cannot specify source") } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().AutoRewrite(request) + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().AutoRewrite(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) requestId := *response.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } @@ -199,10 +202,10 @@ func resourceTencentCloudClbRedirectionCreate(d *schema.ResourceData, meta inter params["port"] = AUTO_SOURCE_PORT params["protocol"] = CLB_LISTENER_PROTOCOL_HTTP var listeners []*clb.Listener - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := clbService.DescribeListenersByFilter(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } listeners = results return nil @@ -223,10 +226,10 @@ func resourceTencentCloudClbRedirectionCreate(d *schema.ResourceData, meta inter rparams["listener_id"] = sourceListenerId rparams["url"] = *url var rules []*clb.RuleOutput - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := clbService.DescribeRulesByFilter(ctx, rparams) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } rules = results return nil @@ -253,15 +256,15 @@ func resourceTencentCloudClbRedirectionCreate(d *schema.ResourceData, meta inter rewriteInfo.SourceLocationId = helper.String(sourceLocId) rewriteInfo.TargetLocationId = helper.String(targetLocId) request.RewriteInfos = []*clb.RewriteLocationMap{&rewriteInfo} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().ManualRewrite(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ManualRewrite(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) requestId := *response.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } @@ -281,11 +284,11 @@ func resourceTencentCloudClbRedirectionCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudClbRedirectionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_redirection.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_redirection.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rewriteId := d.Id() isAutoRewrite := false @@ -294,13 +297,13 @@ func resourceTencentCloudClbRedirectionRead(d *schema.ResourceData, meta interfa _ = d.Set("is_auto_rewrite", isAutoRewrite) } clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *map[string]string - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := clbService.DescribeRedirectionById(ctx, rewriteId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -325,24 +328,24 @@ func resourceTencentCloudClbRedirectionRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudClbRedirectionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_redirection.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_redirection.update")() + defer tccommon.InconsistentCheck(d, meta)() // this nil update method works for the only filed `delete_all_auto_rewrite` return resourceTencentCloudClbRedirectionRead(d, meta) } func resourceTencentCloudClbRedirectionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_redirection.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_redirection.delete")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } deleteAll := d.Get("delete_all_auto_rewrite").(bool) @@ -350,10 +353,10 @@ func resourceTencentCloudClbRedirectionDelete(d *schema.ResourceData, meta inter if deleteAll && isAutoRewrite { //delete all the auto rewrite var rewrites []*map[string]string - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, inErr := clbService.DescribeAllAutoRedirections(ctx, id) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } rewrites = result return nil @@ -367,11 +370,11 @@ func resourceTencentCloudClbRedirectionDelete(d *schema.ResourceData, meta inter if rewrite == nil { continue } - rewriteId := (*rewrite)["source_rule_id"] + FILED_SP + (*rewrite)["target_rule_id"] + FILED_SP + (*rewrite)["source_listener_id"] + FILED_SP + (*rewrite)["target_listener_id"] + FILED_SP + (*rewrite)["clb_id"] - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + rewriteId := (*rewrite)["source_rule_id"] + tccommon.FILED_SP + (*rewrite)["target_rule_id"] + tccommon.FILED_SP + (*rewrite)["source_listener_id"] + tccommon.FILED_SP + (*rewrite)["target_listener_id"] + tccommon.FILED_SP + (*rewrite)["clb_id"] + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := clbService.DeleteRedirectionById(ctx, rewriteId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -381,10 +384,10 @@ func resourceTencentCloudClbRedirectionDelete(d *schema.ResourceData, meta inter } } } else { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := clbService.DeleteRedirectionById(ctx, id) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_clb_redirection_test.go b/tencentcloud/services/clb/resource_tc_clb_redirection_test.go similarity index 84% rename from tencentcloud/resource_tc_clb_redirection_test.go rename to tencentcloud/services/clb/resource_tc_clb_redirection_test.go index cca54a1a71..8998aa3c07 100644 --- a/tencentcloud/resource_tc_clb_redirection_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_redirection_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package clb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localclb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" + "context" "fmt" "testing" @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudClbRedirection_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbRedirectionDestroy, Steps: []resource.TestStep{ { @@ -35,12 +39,12 @@ func TestAccTencentCloudClbRedirection_basic(t *testing.T) { func TestAccTencentCloudClbRedirection_auto(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbRedirectionDestroy, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccClbRedirection_auto, defaultSshCertificate), + Config: fmt.Sprintf(testAccClbRedirection_auto, tcacctest.DefaultSshCertificate), Check: resource.ComposeTestCheckFunc( testAccCheckClbRedirectionExists("tencentcloud_clb_redirection.redirection_basic"), resource.TestCheckResourceAttrSet("tencentcloud_clb_redirection.redirection_basic", "clb_id"), @@ -54,12 +58,10 @@ func TestAccTencentCloudClbRedirection_auto(t *testing.T) { } func testAccCheckClbRedirectionDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_clb_redirection" { continue @@ -75,8 +77,8 @@ func testAccCheckClbRedirectionDestroy(s *terraform.State) error { func testAccCheckClbRedirectionExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -85,9 +87,7 @@ func testAccCheckClbRedirectionExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLB redirection][Create] check: CLB redirection id is not set") } - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := clbService.DescribeRedirectionById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_clb_replace_cert_for_lbs.go b/tencentcloud/services/clb/resource_tc_clb_replace_cert_for_lbs.go similarity index 85% rename from tencentcloud/resource_tc_clb_replace_cert_for_lbs.go rename to tencentcloud/services/clb/resource_tc_clb_replace_cert_for_lbs.go index f2abd89c95..d4067771d1 100644 --- a/tencentcloud/resource_tc_clb_replace_cert_for_lbs.go +++ b/tencentcloud/services/clb/resource_tc_clb_replace_cert_for_lbs.go @@ -1,15 +1,18 @@ -package tencentcloud +package clb import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClbReplaceCertForLbs() *schema.Resource { +func ResourceTencentCloudClbReplaceCertForLbs() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbReplaceCertForLbsCreate, Read: resourceTencentCloudClbReplaceCertForLbsRead, @@ -78,10 +81,10 @@ func resourceTencentCloudClbReplaceCertForLbs() *schema.Resource { } func resourceTencentCloudClbReplaceCertForLbsCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_replace_cert_for_lbs.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_replace_cert_for_lbs.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = clb.NewReplaceCertForLoadBalancersRequest() @@ -121,10 +124,10 @@ func resourceTencentCloudClbReplaceCertForLbsCreate(d *schema.ResourceData, meta request.Certificate = &certificateInput } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().ReplaceCertForLoadBalancers(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ReplaceCertForLoadBalancers(request) if e != nil { - return retryError(e) + 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()) } @@ -141,15 +144,15 @@ func resourceTencentCloudClbReplaceCertForLbsCreate(d *schema.ResourceData, meta } func resourceTencentCloudClbReplaceCertForLbsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_replace_cert_for_lbs.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_replace_cert_for_lbs.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudClbReplaceCertForLbsDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_replace_cert_for_lbs.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_replace_cert_for_lbs.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/services/clb/resource_tc_clb_replace_cert_for_lbs_test.go b/tencentcloud/services/clb/resource_tc_clb_replace_cert_for_lbs_test.go new file mode 100644 index 0000000000..1e0cfc01f4 --- /dev/null +++ b/tencentcloud/services/clb/resource_tc_clb_replace_cert_for_lbs_test.go @@ -0,0 +1,60 @@ +package clb_test + +import ( + "fmt" + "testing" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccTencentCloudNeedFixClbReplaceCertForLbsResource_basic(t *testing.T) { + t.Parallel() + resource.Test(t, resource.TestCase{ + PreCheck: func() { + tcacctest.AccPreCheck(t) + }, + Providers: tcacctest.AccProviders, + Steps: []resource.TestStep{ + { + Config: testAccClbReplaceCertForLbs, + Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_clb_replace_cert_for_lbs.replace_cert_for_lbs", "id")), + }, + }, + }) +} + +var testAccClbReplaceCertForLbs = fmt.Sprintf(` + +resource "tencentcloud_clb_replace_cert_for_lbs" "replace_cert_for_lbs" { + old_certificate_id = "zjUMifFK" + certificate { + cert_ca_name = "test" + cert_ca_content = "%s" + } +} +`, testAccSslCertificateCA) + +const testAccSslCertificateCA = "-----BEGIN CERTIFICATE-----\\nMIIERzCCAq+gAwIBAgIBAjANBgkqhkiG9w0BAQsF" + + "ADAoMQ0wCwYDVQQDEwR0ZXN0\\nMRcwFQYDVQQKEw50ZXJyYWZvcm0gdGVzdDAeFw0xOTA4MTM" + + "wMzE5MzlaFw0yOTA4\\nMTAwMzE5MzlaMC4xEzARBgNVBAMTCnNlcnZlciBzc2wxFzAVBgNVBA" + + "oTDnRlcnJh\\nZm9ybS10ZXN0MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA1Ryp+" + + "DKK\\nSNFKZsPtwfR+jzOnQ8YFieIKYgakV688d8YgpolenbmeEPrzT87tunFD7G9f6ALG\\nND" + + "8rj7npj0AowxhOL/h/v1D9u0UsIaj5i2GWJrqNAhGLaxWiEB/hy5WOiwxDrGei\\ngQqJkFM52" + + "Ep7G1Yx7PHJmKFGwN9FhIsFi1cNZfVRopZuCe/RMPNusNVZaIi+qcEf\\nfsE1cmfmuSlG3Ap0" + + "RKOIyR0ajDEzqZn9/0R7VwWCF97qy8TNYk94K/1tq3zyhVzR\\nZ83xOSfrTqEfb3so3AU2jyK" + + "gYdwr/FZS72VCHS8IslgnqJW4izIXZqgIKmHaRZtM\\nN4jUloi6l/6lktt6Lsgh9xECecxziS" + + "JtPMaog88aC8HnMqJJ3kScGCL36GYG+Kaw\\n5PnDlWXBaeiDe8z/eWK9+Rr2M+rhTNxosAVGf" + + "DJyxAXyiX49LQ0v7f9qzwc/0JiD\\nbvsUv1cm6OgpoEMP9SXqqBdwGqeKbD2/2jlP48xlYP6l" + + "1SoJG3GgZ8dbAgMBAAGj\\ndjB0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwE" + + "wDwYDVR0PAQH/\\nBAUDAweAADAdBgNVHQ4EFgQULwWKBQNLL9s3cb3tTnyPVg+mpCMwHwYDVR" + + "0jBBgw\\nFoAUKwfrmq791mY831S6UHARHtgYnlgwDQYJKoZIhvcNAQELBQADggGBAMo5RglS\\nA" + + "HdPgaicWJvmvjjexjF/42b7Rz4pPfMjYw6uYO8He/f4UZWv5CZLrbEe7MywaK3y\\n0OsfH8Ah" + + "yN29pv2x8g9wbmq7omZIOZ0oCAGduEXs/A/qY/hFaCohdkz/IN8qi6JW\\nVXreGli3SrpcHFc" + + "hSwHTyJEXgkutcGAsOvdsOuVSmplOyrkLHc8uUe8SG4j8kGyg\\nEzaszFjHkR7g1dVyDVUedc" + + "588mjkQxYeAamJgfkgIhljWKMa2XzkVMcVfQHfNpM1\\nn+bu8SmqRt9Wma2bMijKRG/Blm756" + + "LoI+skY+WRZmlDnq8zj95TT0vceGP0FUWh5\\nhKyiocABmpQs9OK9HMi8vgSWISP+fYgkm/bK" + + "tKup2NbZBoO5/VL2vCEPInYzUhBO\\njCbLMjNjtM5KriCaR7wDARgHiG0gBEPOEW1PIjZ9UOH" + + "+LtIxbNZ4eEIIINLHnBHf\\nL+doVeZtS/gJc4G4Adr5HYuaS9ZxJ0W2uy0eQlOHzjyxR6Mf/r" + + "pnilJlcQ==\\n-----END CERTIFICATE-----" diff --git a/tencentcloud/resource_tc_clb_security_group_attachment.go b/tencentcloud/services/clb/resource_tc_clb_security_group_attachment.go similarity index 70% rename from tencentcloud/resource_tc_clb_security_group_attachment.go rename to tencentcloud/services/clb/resource_tc_clb_security_group_attachment.go index 99778a0d4d..ef1938bf8c 100644 --- a/tencentcloud/resource_tc_clb_security_group_attachment.go +++ b/tencentcloud/services/clb/resource_tc_clb_security_group_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package clb import ( "context" @@ -6,12 +6,15 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClbSecurityGroupAttachment() *schema.Resource { +func ResourceTencentCloudClbSecurityGroupAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbSecurityGroupAttachmentCreate, Read: resourceTencentCloudClbSecurityGroupAttachmentRead, @@ -42,10 +45,10 @@ func resourceTencentCloudClbSecurityGroupAttachment() *schema.Resource { } func resourceTencentCloudClbSecurityGroupAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_security_group_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_security_group_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = clb.NewSetSecurityGroupForLoadbalancersRequest() @@ -65,31 +68,31 @@ func resourceTencentCloudClbSecurityGroupAttachmentCreate(d *schema.ResourceData } } - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} err := service.SetClbSecurityGroup(ctx, securityGroup, loadBalancerId, "ADD") if err != nil { return err } - d.SetId(securityGroup + FILED_SP + loadBalancerId) + d.SetId(securityGroup + tccommon.FILED_SP + loadBalancerId) return resourceTencentCloudClbSecurityGroupAttachmentRead(d, meta) } func resourceTencentCloudClbSecurityGroupAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_security_group_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_security_group_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -128,14 +131,14 @@ func resourceTencentCloudClbSecurityGroupAttachmentRead(d *schema.ResourceData, } func resourceTencentCloudClbSecurityGroupAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_security_group_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_security_group_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_clb_security_group_attachment_test.go b/tencentcloud/services/clb/resource_tc_clb_security_group_attachment_test.go similarity index 83% rename from tencentcloud/resource_tc_clb_security_group_attachment_test.go rename to tencentcloud/services/clb/resource_tc_clb_security_group_attachment_test.go index 583395e45e..e12e26f896 100644 --- a/tencentcloud/resource_tc_clb_security_group_attachment_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_security_group_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package clb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudClbSecurityGroupAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbSecurityGroupAttachment, diff --git a/tencentcloud/resource_tc_clb_security_group_attachment_testing_test.go b/tencentcloud/services/clb/resource_tc_clb_security_group_attachment_testing_test.go similarity index 83% rename from tencentcloud/resource_tc_clb_security_group_attachment_testing_test.go rename to tencentcloud/services/clb/resource_tc_clb_security_group_attachment_testing_test.go index 37c77bb604..06f5ca193c 100644 --- a/tencentcloud/resource_tc_clb_security_group_attachment_testing_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_security_group_attachment_testing_test.go @@ -1,18 +1,20 @@ -package tencentcloud +package clb_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudTestingClbSecurityGroupAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTestingClbSecurityGroupAttachment, diff --git a/tencentcloud/resource_tc_clb_snat_ip.go b/tencentcloud/services/clb/resource_tc_clb_snat_ip.go similarity index 74% rename from tencentcloud/resource_tc_clb_snat_ip.go rename to tencentcloud/services/clb/resource_tc_clb_snat_ip.go index 00122016eb..a51b56c518 100644 --- a/tencentcloud/resource_tc_clb_snat_ip.go +++ b/tencentcloud/services/clb/resource_tc_clb_snat_ip.go @@ -1,14 +1,16 @@ -package tencentcloud +package clb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" ) -func resourceTencentCloudClbSnatIp() *schema.Resource { +func ResourceTencentCloudClbSnatIp() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudClbSnatIpRead, Create: resourceTencentCloudClbSnatIpCreate, @@ -47,12 +49,12 @@ func resourceTencentCloudClbSnatIp() *schema.Resource { } func resourceTencentCloudClbSnatIpRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_snat_ip.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_snat_ip.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := ClbService{client} clbId := d.Id() @@ -62,10 +64,10 @@ func resourceTencentCloudClbSnatIpRead(d *schema.ResourceData, meta interface{}) err error ) - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, err = service.DescribeLoadBalancerById(ctx, clbId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -95,11 +97,11 @@ func resourceTencentCloudClbSnatIpRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudClbSnatIpCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_snat_ip.create")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_snat_ip.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := ClbService{client} clbId := d.Get("clb_id").(string) @@ -117,10 +119,10 @@ func resourceTencentCloudClbSnatIpCreate(d *schema.ResourceData, meta interface{ } var taskId string - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { reqId, err := service.CreateLoadBalancerSnatIps(ctx, clbId, snatIps) if err != nil { - return retryError(err, clb.FAILEDOPERATION) + return tccommon.RetryError(err, clb.FAILEDOPERATION) } taskId = reqId return nil @@ -140,11 +142,11 @@ func resourceTencentCloudClbSnatIpCreate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudClbSnatIpUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_snat_ip.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_clb_snat_ip.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) clbId := d.Id() - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := ClbService{client} //instanceSnatIps := make([]interface{}, 0) @@ -185,10 +187,10 @@ func resourceTencentCloudClbSnatIpUpdate(d *schema.ResourceData, meta interface{ SubnetId: &subnet, Ip: &ip, }) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { taskId, err = service.CreateLoadBalancerSnatIps(ctx, clbId, addIps) if err != nil { - return retryError(err, clb.FAILEDOPERATION) + return tccommon.RetryError(err, clb.FAILEDOPERATION) } return nil }) @@ -215,10 +217,10 @@ func resourceTencentCloudClbSnatIpUpdate(d *schema.ResourceData, meta interface{ removeIps = append(removeIps, &ip) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { taskId, err = service.DeleteLoadBalancerSnatIps(ctx, clbId, removeIps) if err != nil { - return retryError(err, clb.FAILEDOPERATION) + return tccommon.RetryError(err, clb.FAILEDOPERATION) } return nil }) @@ -238,11 +240,11 @@ func resourceTencentCloudClbSnatIpUpdate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudClbSnatIpDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_snat_ip.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_snat_ip.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := ClbService{client} clbId := d.Id() @@ -261,10 +263,10 @@ func resourceTencentCloudClbSnatIpDelete(d *schema.ResourceData, meta interface{ } var taskId string - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { reqId, err := service.DeleteLoadBalancerSnatIps(ctx, clbId, instanceSnatIps) if err != nil { - return retryError(err, clb.FAILEDOPERATION) + return tccommon.RetryError(err, clb.FAILEDOPERATION) } taskId = reqId return nil diff --git a/tencentcloud/resource_tc_clb_snat_ip_test.go b/tencentcloud/services/clb/resource_tc_clb_snat_ip_test.go similarity index 95% rename from tencentcloud/resource_tc_clb_snat_ip_test.go rename to tencentcloud/services/clb/resource_tc_clb_snat_ip_test.go index 1a4a54e3c8..8135f8f9be 100644 --- a/tencentcloud/resource_tc_clb_snat_ip_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_snat_ip_test.go @@ -1,17 +1,19 @@ -package tencentcloud +package clb_test import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudClbSnatIp(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbSnatIpBasic, diff --git a/tencentcloud/resource_tc_clb_target_group.go b/tencentcloud/services/clb/resource_tc_clb_target_group.go similarity index 73% rename from tencentcloud/resource_tc_clb_target_group.go rename to tencentcloud/services/clb/resource_tc_clb_target_group.go index 2a0bd85e5c..27bdf1e826 100644 --- a/tencentcloud/resource_tc_clb_target_group.go +++ b/tencentcloud/services/clb/resource_tc_clb_target_group.go @@ -1,13 +1,15 @@ -package tencentcloud +package clb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" ) -func resourceTencentCloudClbTargetGroup() *schema.Resource { +func ResourceTencentCloudClbTargetGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbTargetCreate, Read: resourceTencentCloudClbTargetRead, @@ -33,7 +35,7 @@ func resourceTencentCloudClbTargetGroup() *schema.Resource { "port": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validatePort, + ValidateFunc: tccommon.ValidatePort, Description: "The default port of target group, add server after can use it.", }, "target_group_instances": { @@ -47,13 +49,13 @@ func resourceTencentCloudClbTargetGroup() *schema.Resource { "bind_ip": { Type: schema.TypeString, Required: true, - ValidateFunc: validateIp, + ValidateFunc: tccommon.ValidateIp, Description: "The internal ip of target group instance.", }, "port": { Type: schema.TypeInt, Required: true, - ValidateFunc: validatePort, + ValidateFunc: tccommon.ValidatePort, Description: "The port of target group instance.", }, "weight": { @@ -64,7 +66,7 @@ func resourceTencentCloudClbTargetGroup() *schema.Resource { "new_port": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validatePort, + ValidateFunc: tccommon.ValidatePort, Description: "The new port of target group instance.", }, }, @@ -75,12 +77,12 @@ func resourceTencentCloudClbTargetGroup() *schema.Resource { } func resourceTencentCloudClbTargetCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group.create")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - clbService = ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + clbService = ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} vpcId = d.Get("vpc_id").(string) targetGroupName = d.Get("target_group_name").(string) port = uint64(d.Get("port").(int)) @@ -118,13 +120,13 @@ func resourceTencentCloudClbTargetCreate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudClbTargetRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - clbService = ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + clbService = ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() ) filters := make(map[string]string) @@ -144,12 +146,12 @@ func resourceTencentCloudClbTargetRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudClbTargetUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group.update")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - clbService = ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + clbService = ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} targetGroupId = d.Id() port uint64 tgtGroupName string @@ -173,12 +175,12 @@ func resourceTencentCloudClbTargetUpdate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudClbTargetDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - clbService = ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + clbService = ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} targetGroupId = d.Id() ) diff --git a/tencentcloud/resource_tc_clb_target_group_attachment.go b/tencentcloud/services/clb/resource_tc_clb_target_group_attachment.go similarity index 78% rename from tencentcloud/resource_tc_clb_target_group_attachment.go rename to tencentcloud/services/clb/resource_tc_clb_target_group_attachment.go index f626acb44b..d0e7beb3b9 100644 --- a/tencentcloud/resource_tc_clb_target_group_attachment.go +++ b/tencentcloud/services/clb/resource_tc_clb_target_group_attachment.go @@ -1,16 +1,18 @@ -package tencentcloud +package clb import ( "context" "fmt" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" ) -func resourceTencentCloudClbTargetGroupAttachment() *schema.Resource { +func ResourceTencentCloudClbTargetGroupAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbTargetGroupAttachmentCreate, Read: resourceTencentCloudClbTargetGroupAttachmentRead, @@ -54,14 +56,14 @@ func resourceTencentCloudClbTargetGroupAttachment() *schema.Resource { } } func resourceTencentCloudClbTargetGroupAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group_attachment.create")() var ( clbService = ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) locationId string listenerId = d.Get("listener_id").(string) clbId = d.Get("clb_id").(string) @@ -101,20 +103,20 @@ func resourceTencentCloudClbTargetGroupAttachmentCreate(d *schema.ResourceData, } //check target group - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, err = clbService.DescribeLoadBalancerById(ctx, clbId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) if err != nil { return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { targetInfos, err = clbService.DescribeTargetGroups(ctx, targetGroupId, nil) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -140,26 +142,26 @@ func resourceTencentCloudClbTargetGroupAttachmentCreate(d *schema.ResourceData, targetGroupId, listenerId, clbId, locationId) } - d.SetId(strings.Join([]string{targetGroupId, listenerId, clbId, locationId}, FILED_SP)) + d.SetId(strings.Join([]string{targetGroupId, listenerId, clbId, locationId}, tccommon.FILED_SP)) return resourceTencentCloudClbTargetGroupAttachmentRead(d, meta) } func resourceTencentCloudClbTargetGroupAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( clbService = ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id = d.Id() has bool ) - ids := strings.Split(id, FILED_SP) + ids := strings.Split(id, tccommon.FILED_SP) if len(ids) != 4 { return fmt.Errorf("CLB target group attachment id is clb_id#listener_id#target_group_id#rule_id(only required for 7 layer CLB)") } @@ -184,25 +186,25 @@ func resourceTencentCloudClbTargetGroupAttachmentRead(d *schema.ResourceData, me } func resourceTencentCloudClbTargetGroupAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group_attachment.update")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group_attachment.update")() return resourceTencentCloudClbTargetGroupAttachmentRead(d, meta) } func resourceTencentCloudClbTargetGroupAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group_attachment.delete")() var ( clbService = ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id = d.Id() targetInfos []*clb.TargetGroupInfo err error ) - ids := strings.Split(id, FILED_SP) + ids := strings.Split(id, tccommon.FILED_SP) if len(ids) != 4 { return fmt.Errorf("CLB target group attachment id is clb_id#listener_id#target_group_id#rule_id(only required for 7 layer CLB)") } @@ -212,10 +214,10 @@ func resourceTencentCloudClbTargetGroupAttachmentDelete(d *schema.ResourceData, } // check status - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { targetInfos, err = clbService.DescribeTargetGroups(ctx, ids[0], nil) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } for _, info := range targetInfos { for _, rule := range info.AssociatedRule { diff --git a/tencentcloud/resource_tc_clb_target_group_attachment_test.go b/tencentcloud/services/clb/resource_tc_clb_target_group_attachment_test.go similarity index 85% rename from tencentcloud/resource_tc_clb_target_group_attachment_test.go rename to tencentcloud/services/clb/resource_tc_clb_target_group_attachment_test.go index 4906a25f6d..0de3babf64 100644 --- a/tencentcloud/resource_tc_clb_target_group_attachment_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_target_group_attachment_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package clb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localclb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" + "context" "fmt" "strings" @@ -16,8 +20,8 @@ const clbTargetGroupAttachment = "tencentcloud_clb_target_group_attachment.group func TestAccTencentClbTargetGroupAttachmentResource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbTargetGroupAttachmentDestroy, Steps: []resource.TestStep{ { @@ -41,8 +45,8 @@ func TestAccTencentClbTargetGroupAttachmentResource(t *testing.T) { func TestAccTencentClbTargetGroupAttachmentHttpResource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbTargetGroupAttachmentDestroy, Steps: []resource.TestStep{ { @@ -60,11 +64,9 @@ func TestAccTencentClbTargetGroupAttachmentHttpResource(t *testing.T) { func testAccCheckClbTargetGroupAttachmentDestroy(s *terraform.State) error { var ( - clbService = ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + clbService = localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) targetInfos []*clb.TargetGroupInfo err error ) @@ -74,7 +76,7 @@ func testAccCheckClbTargetGroupAttachmentDestroy(s *terraform.State) error { continue } - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(ids) != 4 { return fmt.Errorf("CLB target group attachment id is clb_id#listener_id#target_group_id#rule_id(only required for 7 layer CLB)") } @@ -105,8 +107,8 @@ func testAccCheckClbTargetGroupAttachmentDestroy(s *terraform.State) error { func testAccCheckClbTargetGroupAttachmentExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) ) rs, ok := s.RootModule().Resources[n] @@ -116,11 +118,9 @@ func testAccCheckClbTargetGroupAttachmentExists(n string) resource.TestCheckFunc if rs.Primary.ID == "" { return fmt.Errorf("CLB target group attachment id is not set") } - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(ids) != 4 { return fmt.Errorf("CLB target group attachment id is clb_id#listener_id#target_group_id#rule_id(only required for 7 layer CLB)") } diff --git a/tencentcloud/resource_tc_clb_target_group_attachments.go b/tencentcloud/services/clb/resource_tc_clb_target_group_attachments.go similarity index 77% rename from tencentcloud/resource_tc_clb_target_group_attachments.go rename to tencentcloud/services/clb/resource_tc_clb_target_group_attachments.go index a5167cfb04..77eda5098e 100644 --- a/tencentcloud/resource_tc_clb_target_group_attachments.go +++ b/tencentcloud/services/clb/resource_tc_clb_target_group_attachments.go @@ -1,4 +1,4 @@ -package tencentcloud +package clb import ( "context" @@ -10,11 +10,13 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudClbTargetGroupAttachments() *schema.Resource { +func ResourceTencentCloudClbTargetGroupAttachments() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbTargetGroupAttachmentsCreate, Read: resourceTencentCloudClbTargetGroupAttachmentsRead, @@ -60,10 +62,10 @@ func resourceTencentCloudClbTargetGroupAttachments() *schema.Resource { } func resourceTencentCloudClbTargetGroupAttachmentsCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group_attachments.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group_attachments.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = clb.NewAssociateTargetGroupsRequest() @@ -90,15 +92,15 @@ func resourceTencentCloudClbTargetGroupAttachmentsCreate(d *schema.ResourceData, } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().AssociateTargetGroups(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().AssociateTargetGroups(request) if e != nil { - return retryError(e, InternalError) + return tccommon.RetryError(e, tccommon.InternalError) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), result.ToJsonString(), result.ToJsonString()) requestId := *result.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } @@ -116,14 +118,14 @@ func resourceTencentCloudClbTargetGroupAttachmentsCreate(d *schema.ResourceData, } func resourceTencentCloudClbTargetGroupAttachmentsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group_attachments.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group_attachments.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} loadBalancerId := d.Id() associationsSet := make(map[string]struct{}, 0) @@ -153,7 +155,7 @@ func resourceTencentCloudClbTargetGroupAttachmentsRead(d *schema.ResourceData, m ids = append(ids, "null") } - associationsSet[strings.Join(ids, FILED_SP)] = struct{}{} + associationsSet[strings.Join(ids, tccommon.FILED_SP)] = struct{}{} } } @@ -170,7 +172,7 @@ func resourceTencentCloudClbTargetGroupAttachmentsRead(d *schema.ResourceData, m var associationsList []interface{} for _, attachment := range targetGroupAttachments { - info := strings.Split(attachment, FILED_SP) + info := strings.Split(attachment, tccommon.FILED_SP) if len(info) != 4 { return fmt.Errorf("id is broken,%s", info) } @@ -192,17 +194,17 @@ func resourceTencentCloudClbTargetGroupAttachmentsRead(d *schema.ResourceData, m } func resourceTencentCloudClbTargetGroupAttachmentsUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group_attachments.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group_attachments.update")() + defer tccommon.InconsistentCheck(d, meta)() return resourceTencentCloudClbTargetGroupAttachmentsRead(d, meta) } func resourceTencentCloudClbTargetGroupAttachmentsDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group_attachments.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group_attachments.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := clb.NewDisassociateTargetGroupsRequest() loadBalancerId := d.Id() @@ -223,16 +225,16 @@ func resourceTencentCloudClbTargetGroupAttachmentsDelete(d *schema.ResourceData, request.Associations = append(request.Associations, &targetGroupAssociation) } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - result, err := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().DisassociateTargetGroups(request) + result, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().DisassociateTargetGroups(request) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), result.ToJsonString(), result.ToJsonString()) requestId := *result.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { return resource.NonRetryableError(errors.WithStack(retryErr)) } diff --git a/tencentcloud/resource_tc_clb_target_group_attachments_test.go b/tencentcloud/services/clb/resource_tc_clb_target_group_attachments_test.go similarity index 95% rename from tencentcloud/resource_tc_clb_target_group_attachments_test.go rename to tencentcloud/services/clb/resource_tc_clb_target_group_attachments_test.go index 3720571115..52008e8983 100644 --- a/tencentcloud/resource_tc_clb_target_group_attachments_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_target_group_attachments_test.go @@ -1,18 +1,20 @@ -package tencentcloud +package clb_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudClbTargetGroupAttachmentsResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClbTargetGroupAttachments, diff --git a/tencentcloud/resource_tc_clb_target_group_instance_attachment.go b/tencentcloud/services/clb/resource_tc_clb_target_group_instance_attachment.go similarity index 69% rename from tencentcloud/resource_tc_clb_target_group_instance_attachment.go rename to tencentcloud/services/clb/resource_tc_clb_target_group_instance_attachment.go index ffbab08cbf..82a36ceb08 100644 --- a/tencentcloud/resource_tc_clb_target_group_instance_attachment.go +++ b/tencentcloud/services/clb/resource_tc_clb_target_group_instance_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package clb import ( "context" @@ -7,6 +7,8 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -14,7 +16,7 @@ import ( clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" ) -func resourceTencentCloudClbTGAttachmentInstance() *schema.Resource { +func ResourceTencentCloudClbTGAttachmentInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClbTGAttachmentInstanceCreate, Read: resourceTencentCloudClbTGAttachmentInstanceRead, @@ -27,14 +29,14 @@ func resourceTencentCloudClbTGAttachmentInstance() *schema.Resource { "target_group_id": { Type: schema.TypeString, Required: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, ForceNew: true, Description: "Target group ID.", }, "bind_ip": { Type: schema.TypeString, Required: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, ForceNew: true, Description: "The Intranet IP of the target group instance.", }, @@ -54,12 +56,12 @@ func resourceTencentCloudClbTGAttachmentInstance() *schema.Resource { } func resourceTencentCloudClbTGAttachmentInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group_instance_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group_instance_attachment.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - clbService = ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + clbService = ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} targetGroupId = d.Get("target_group_id").(string) bindIp = d.Get("bind_ip").(string) port = d.Get("port").(int) @@ -74,22 +76,22 @@ func resourceTencentCloudClbTGAttachmentInstanceCreate(d *schema.ResourceData, m } time.Sleep(time.Duration(3) * time.Second) - d.SetId(strings.Join([]string{targetGroupId, bindIp, strconv.Itoa(port)}, FILED_SP)) + d.SetId(strings.Join([]string{targetGroupId, bindIp, strconv.Itoa(port)}, tccommon.FILED_SP)) return resourceTencentCloudClbTGAttachmentInstanceRead(d, meta) } func resourceTencentCloudClbTGAttachmentInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group_instance_attachment.read")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group_instance_attachment.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - clbService = ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + clbService = ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() targetGroupInstances []*clb.TargetGroupBackend ) - idSplit := strings.Split(id, FILED_SP) + idSplit := strings.Split(id, tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("target group instance attachment id is not set") } @@ -103,10 +105,10 @@ func resourceTencentCloudClbTGAttachmentInstanceRead(d *schema.ResourceData, met filters := make(map[string]string) filters["TargetGroupId"] = targetGroupId filters["BindIP"] = bindIp - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { targetGroupInstances, err = clbService.DescribeTargetGroupInstances(ctx, filters) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -126,18 +128,18 @@ func resourceTencentCloudClbTGAttachmentInstanceRead(d *schema.ResourceData, met } func resourceTencentCloudClbTGAttachmentInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group_instance_attachment.update")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group_instance_attachment.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - clbService = ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + clbService = ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() port int bindIp, targetGroupId string err error ) - idSplit := strings.Split(id, FILED_SP) + idSplit := strings.Split(id, tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("target group instance attachment id is not set") } @@ -159,15 +161,15 @@ func resourceTencentCloudClbTGAttachmentInstanceUpdate(d *schema.ResourceData, m } func resourceTencentCloudClbTGAttachmentInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb_target_group_instance_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_clb_target_group_instance_attachment.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - clbService = ClbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + clbService = ClbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() ) - idSplit := strings.Split(id, FILED_SP) + idSplit := strings.Split(id, tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("target group instance attachment id is not set") } diff --git a/tencentcloud/resource_tc_clb_target_group_instance_attachment_test.go b/tencentcloud/services/clb/resource_tc_clb_target_group_instance_attachment_test.go similarity index 80% rename from tencentcloud/resource_tc_clb_target_group_instance_attachment_test.go rename to tencentcloud/services/clb/resource_tc_clb_target_group_instance_attachment_test.go index 24ec594af5..ba6f44db07 100644 --- a/tencentcloud/resource_tc_clb_target_group_instance_attachment_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_target_group_instance_attachment_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package clb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localclb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" + "context" "fmt" "strconv" @@ -15,8 +19,8 @@ import ( func TestAccTencentCloudClbTGAttachmentInstance_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbTGAttachmentInstanceDestroy, Steps: []resource.TestStep{ { @@ -44,18 +48,16 @@ func TestAccTencentCloudClbTGAttachmentInstance_basic(t *testing.T) { } func testAccCheckClbTGAttachmentInstanceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_clb_target_group_instance_attachment" { continue } time.Sleep(5 * time.Second) - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("target group instance attachment id is not set") } @@ -84,8 +86,8 @@ func testAccCheckClbTGAttachmentInstanceDestroy(s *terraform.State) error { func testAccCheckClbTGAttachmentInstanceExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -94,10 +96,8 @@ func testAccCheckClbTGAttachmentInstanceExists(n string) resource.TestCheckFunc if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLB target group instance attachment][Exists] check: CLB target group id is not set") } - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("target group instance attachment id is not set") } @@ -124,7 +124,7 @@ func testAccCheckClbTGAttachmentInstanceExists(n string) resource.TestCheckFunc } } -const testAccClbTGAttachmentInstance_basic = instanceCommonTestCase + ` +const testAccClbTGAttachmentInstance_basic = tcacctest.InstanceCommonTestCase + ` data "tencentcloud_instances" "foo" { instance_id = tencentcloud_instance.default.id @@ -143,7 +143,7 @@ resource "tencentcloud_clb_target_group_instance_attachment" "test"{ } ` -const testAccClbTGAttachmentInstance_update = instanceCommonTestCase + ` +const testAccClbTGAttachmentInstance_update = tcacctest.InstanceCommonTestCase + ` data "tencentcloud_instances" "foo" { instance_id = tencentcloud_instance.default.id diff --git a/tencentcloud/resource_tc_clb_target_group_instance_attachment_testing_test.go b/tencentcloud/services/clb/resource_tc_clb_target_group_instance_attachment_testing_test.go similarity index 92% rename from tencentcloud/resource_tc_clb_target_group_instance_attachment_testing_test.go rename to tencentcloud/services/clb/resource_tc_clb_target_group_instance_attachment_testing_test.go index 5a643c83b7..5efbbe0b67 100644 --- a/tencentcloud/resource_tc_clb_target_group_instance_attachment_testing_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_target_group_instance_attachment_testing_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package clb_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudTestingClbTGAttachmentInstance_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbTGAttachmentInstanceDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/resource_tc_clb_target_group_test.go b/tencentcloud/services/clb/resource_tc_clb_target_group_test.go similarity index 78% rename from tencentcloud/resource_tc_clb_target_group_test.go rename to tencentcloud/services/clb/resource_tc_clb_target_group_test.go index b9271096a6..b11b571ae9 100644 --- a/tencentcloud/resource_tc_clb_target_group_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_target_group_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package clb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localclb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" + "context" "fmt" "log" @@ -16,11 +20,11 @@ func init() { resource.AddTestSweepers("tencentcloud_clb_target_group", &resource.Sweeper{ Name: "tencentcloud_clb_target_group", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := ClbService{client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := localclb.NewClbService(client) tgs, err := service.DescribeTargetGroups(ctx, "", nil) if err != nil { @@ -29,8 +33,8 @@ func init() { for i := range tgs { tg := tgs[i] - created := parseTimeFromCommonLayout(tg.CreatedTime) - if isResourcePersist(*tg.TargetGroupName, &created) { + created := tccommon.ParseTimeFromCommonLayout(tg.CreatedTime) + if tcacctest.IsResourcePersist(*tg.TargetGroupName, &created) { continue } log.Printf("%s will be remvoed", *tg.TargetGroupName) @@ -48,8 +52,8 @@ func init() { func TestAccTencentCloudClbTargetGroup_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbTargetGroupDestroy, Steps: []resource.TestStep{ { @@ -68,8 +72,8 @@ func TestAccTencentCloudClbInstanceTargetGroup(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbInstanceDestroy, Steps: []resource.TestStep{ { @@ -97,12 +101,10 @@ func TestAccTencentCloudClbInstanceTargetGroup(t *testing.T) { } func testAccCheckClbTargetGroupDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_clb_target_group" { continue @@ -119,8 +121,8 @@ func testAccCheckClbTargetGroupDestroy(s *terraform.State) error { func testAccCheckClbTargetGroupExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -129,9 +131,7 @@ func testAccCheckClbTargetGroupExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLB target group][Exists] check: CLB target group id is not set") } - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) filters := map[string]string{} targetGroupInfos, err := clbService.DescribeTargetGroups(ctx, rs.Primary.ID, filters) if err != nil { diff --git a/tencentcloud/resource_tc_clb_target_group_testing_test.go b/tencentcloud/services/clb/resource_tc_clb_target_group_testing_test.go similarity index 89% rename from tencentcloud/resource_tc_clb_target_group_testing_test.go rename to tencentcloud/services/clb/resource_tc_clb_target_group_testing_test.go index 0bbf1c6402..5d6e8a778e 100644 --- a/tencentcloud/resource_tc_clb_target_group_testing_test.go +++ b/tencentcloud/services/clb/resource_tc_clb_target_group_testing_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package clb_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudTestingClbTargetGroup_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbTargetGroupDestroy, Steps: []resource.TestStep{ { @@ -28,8 +30,8 @@ func TestAccTencentCloudTestingClbInstanceTargetGroup(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClbInstanceDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/resource_tc_lb.go b/tencentcloud/services/clb/resource_tc_lb.go similarity index 73% rename from tencentcloud/resource_tc_lb.go rename to tencentcloud/services/clb/resource_tc_lb.go index 58191471fb..bd5a682a7e 100644 --- a/tencentcloud/resource_tc_lb.go +++ b/tencentcloud/services/clb/resource_tc_lb.go @@ -1,13 +1,16 @@ -package tencentcloud +package clb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -18,7 +21,7 @@ const ( lbForwardTypeApplication = "APPLICATION" ) -func resourceTencentCloudLB() *schema.Resource { +func ResourceTencentCloudLB() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This resource has been deprecated in Terraform TencentCloud provider version 1.15.0. Please use 'tencentcloud_clb_instance' instead.", Create: resourceTencentCloudLBCreate, @@ -31,7 +34,7 @@ func resourceTencentCloudLB() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue([]string{lbNetworkTypeOpen, lbNetworkTypeInternal}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{lbNetworkTypeOpen, lbNetworkTypeInternal}), Description: "The network type of the LB. Valid value: 'OPEN', 'INTERNAL'.", }, "forward": { @@ -39,7 +42,7 @@ func resourceTencentCloudLB() *schema.Resource { Optional: true, ForceNew: true, Computed: true, - ValidateFunc: validateAllowedStringValue([]string{lbForwardTypeClassic, lbForwardTypeApplication}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{lbForwardTypeClassic, lbForwardTypeApplication}), Description: "The type of the LB. Valid value: 'CLASSIC', 'APPLICATION'.", }, "name": { @@ -72,12 +75,12 @@ func resourceTencentCloudLB() *schema.Resource { } func resourceTencentCloudLBCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb.create")() + defer tccommon.LogElapsed("resource.tencentcloud_clb.create")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := clb.NewCreateLoadBalancerRequest() networkType := d.Get("type").(string) @@ -105,20 +108,20 @@ func resourceTencentCloudLBCreate(d *schema.ResourceData, meta interface{}) erro } var response *clb.CreateLoadBalancerResponse - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().CreateLoadBalancer(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().CreateLoadBalancer(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + 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()) requestId := *result.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { - return retryError(retryErr) + return tccommon.RetryError(retryErr) } } response = result @@ -137,21 +140,21 @@ func resourceTencentCloudLBCreate(d *schema.ResourceData, meta interface{}) erro } func resourceTencentCloudLBRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_clb.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) clbId := d.Id() clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instance *clb.LoadBalancer - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := clbService.DescribeLoadBalancerById(ctx, clbId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instance = result return nil @@ -182,12 +185,12 @@ func resourceTencentCloudLBRead(d *schema.ResourceData, meta interface{}) error } func resourceTencentCloudLBUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb.update")() + defer tccommon.LogElapsed("resource.tencentcloud_clb.update")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) clbId := d.Id() if !d.HasChange("name") { @@ -200,21 +203,21 @@ func resourceTencentCloudLBUpdate(d *schema.ResourceData, meta interface{}) erro request.LoadBalancerId = helper.String(clbId) request.LoadBalancerName = helper.String(d.Get("name").(string)) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseClbClient().ModifyLoadBalancerAttributes(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ModifyLoadBalancerAttributes(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) requestId := *response.Response.RequestId - retryErr := waitForTaskFinish(requestId, meta.(*TencentCloudClient).apiV3Conn.UseClbClient()) + retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient()) if retryErr != nil { - return retryError(retryErr) + return tccommon.RetryError(retryErr) } } return nil @@ -230,23 +233,23 @@ func resourceTencentCloudLBUpdate(d *schema.ResourceData, meta interface{}) erro } func resourceTencentCloudLBDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_clb.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_clb.delete")() clbActionMu.Lock() defer clbActionMu.Unlock() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) clbId := d.Id() clbService := ClbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := clbService.DeleteLoadBalancerById(ctx, clbId) if e != nil { log.Printf("[CRITAL]%s reason[%s]\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_lb_test.go b/tencentcloud/services/clb/resource_tc_lb_test.go similarity index 71% rename from tencentcloud/resource_tc_lb_test.go rename to tencentcloud/services/clb/resource_tc_lb_test.go index 81d2fb84cd..fffe11834a 100644 --- a/tencentcloud/resource_tc_lb_test.go +++ b/tencentcloud/services/clb/resource_tc_lb_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package clb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localclb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" + "context" "fmt" "testing" @@ -12,14 +16,14 @@ import ( func TestAccTencentCloudLB_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckLBDestroy, Steps: []resource.TestStep{ { Config: testAccLbBasic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("tencentcloud_lb.classic"), + tcacctest.AccCheckTencentCloudDataSourceID("tencentcloud_lb.classic"), resource.TestCheckResourceAttr("tencentcloud_lb.classic", "name", "tf-ci-test"), resource.TestCheckResourceAttr("tencentcloud_lb.classic", "type", "OPEN"), resource.TestCheckResourceAttrSet("tencentcloud_lb.classic", "forward"), @@ -30,7 +34,7 @@ func TestAccTencentCloudLB_basic(t *testing.T) { { Config: testAccLbBasicUpdate, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("tencentcloud_lb.classic"), + tcacctest.AccCheckTencentCloudDataSourceID("tencentcloud_lb.classic"), resource.TestCheckResourceAttr("tencentcloud_lb.classic", "name", "tf-ci-test-update"), resource.TestCheckResourceAttr("tencentcloud_lb.classic", "type", "OPEN"), resource.TestCheckResourceAttrSet("tencentcloud_lb.classic", "forward"), @@ -43,12 +47,10 @@ func TestAccTencentCloudLB_basic(t *testing.T) { } func testAccCheckLBDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - clbService := ClbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clbService := localclb.NewClbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_lb" { continue diff --git a/tencentcloud/services/clb/service_tencent_ssl_certificate.go b/tencentcloud/services/clb/service_tencent_ssl_certificate.go new file mode 100644 index 0000000000..19c6e5acf0 --- /dev/null +++ b/tencentcloud/services/clb/service_tencent_ssl_certificate.go @@ -0,0 +1,1489 @@ +package clb + +import ( + "context" + "fmt" + "log" + "math" + + ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +type SSLService struct { + client *connectivity.TencentCloudClient +} + +func (me *SSLService) ApplyCertificate(ctx context.Context, request *ssl.ApplyCertificateRequest) (id string, errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseSSLCertificateClient().ApplyCertificate(request) + + if err != nil { + errRet = err + return + } + + if response.Response.CertificateId != nil { + id = *response.Response.CertificateId + } else { + errRet = fmt.Errorf("[%s] error, no certificate id response: %s", request.GetAction(), response.ToJsonString()) + } + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *SSLService) CreateCertificate(ctx context.Context, request *ssl.CreateCertificateRequest) (certificateId, dealId string, errRet error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseSSLCertificateClient() + ratelimit.Check(request.GetAction()) + + response, err := client.CreateCertificate(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()) + + if response != nil && response.Response != nil { + if len(response.Response.CertificateIds) > 0 { + certificateId = *response.Response.CertificateIds[0] + } + if len(response.Response.DealIds) > 0 { + dealId = *response.Response.DealIds[0] + } + return + } + errRet = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) + return +} + +func (me *SSLService) CommitCertificateInformation(ctx context.Context, request *ssl.CommitCertificateInformationRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseSSLCertificateClient() + ratelimit.Check(request.GetAction()) + + response, err := client.CommitCertificateInformation(request) + if err != nil { + errRet = err + return + } + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return +} + +func (me *SSLService) DescribeCertificateDetail(ctx context.Context, request *ssl.DescribeCertificateDetailRequest) (response *ssl.DescribeCertificateDetailResponse, err error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseSSLCertificateClient() + ratelimit.Check(request.GetAction()) + + response, err = client.DescribeCertificateDetail(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } + return +} + +func (me *SSLService) ModifyCertificateAlias(ctx context.Context, request *ssl.ModifyCertificateAliasRequest) (err error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseSSLCertificateClient() + ratelimit.Check(request.GetAction()) + + var response *ssl.ModifyCertificateAliasResponse + + response, err = client.ModifyCertificateAlias(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } + if response == nil || response.Response == nil { + err = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) + return + } + return +} + +func (me *SSLService) ModifyCertificateProject(ctx context.Context, request *ssl.ModifyCertificateProjectRequest) (err error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseSSLCertificateClient() + ratelimit.Check(request.GetAction()) + + var response *ssl.ModifyCertificateProjectResponse + + response, err = client.ModifyCertificateProject(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } + if response == nil || response.Response == nil { + err = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) + return + } + + for _, v := range response.Response.FailCertificates { + if *v == *request.CertificateIdList[0] { + err = fmt.Errorf("failed to modify the project. certificateId=%s", *request.CertificateIdList[0]) + return + } + } + return +} + +func (me *SSLService) DeleteCertificate(ctx context.Context, request *ssl.DeleteCertificateRequest) (deleteResult bool, err error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseSSLCertificateClient() + ratelimit.Check(request.GetAction()) + + var response *ssl.DeleteCertificateResponse + + response, err = client.DeleteCertificate(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } + if response == nil || response.Response == nil { + err = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) + return + } + deleteResult = *response.Response.DeleteResult + return +} + +func (me *SSLService) CancelCertificateOrder(ctx context.Context, request *ssl.CancelCertificateOrderRequest) (err error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseSSLCertificateClient() + ratelimit.Check(request.GetAction()) + + var response *ssl.CancelCertificateOrderResponse + + response, err = client.CancelCertificateOrder(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } + if response == nil || response.Response == nil { + err = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) + return + } + return +} + +func (me *SSLService) SubmitCertificateInformation(ctx context.Context, request *ssl.SubmitCertificateInformationRequest) (err error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseSSLCertificateClient() + ratelimit.Check(request.GetAction()) + + var response *ssl.SubmitCertificateInformationResponse + + response, err = client.SubmitCertificateInformation(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } + if response == nil || response.Response == nil { + err = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) + return + } + return +} + +func (me *SSLService) UploadConfirmLetter(ctx context.Context, request *ssl.UploadConfirmLetterRequest) (err error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseSSLCertificateClient() + ratelimit.Check(request.GetAction()) + + var response *ssl.UploadConfirmLetterResponse + + response, err = client.UploadConfirmLetter(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } + if response == nil || response.Response == nil { + err = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) + return + } + return +} + +func (me *SSLService) UploadCertificate(ctx context.Context, request *ssl.UploadCertificateRequest) (id string, err error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseSSLCertificateClient() + ratelimit.Check(request.GetAction()) + + var response *ssl.UploadCertificateResponse + response, err = client.UploadCertificate(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return + } + + if response == nil || response.Response == nil { + err = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) + return + } + + if response.Response.CertificateId == nil { + err = fmt.Errorf("api[%s] return id is nil", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return + } + + id = *response.Response.CertificateId + return +} + +func (me *SSLService) DescribeCertificates(ctx context.Context, request *ssl.DescribeCertificatesRequest) (certificateList []*ssl.Certificates, err error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseSSLCertificateClient() + + offset := 0 + pageSize := 100 + certificateList = make([]*ssl.Certificates, 0) + var response *ssl.DescribeCertificatesResponse + for { + request.Offset = helper.IntUint64(offset) + request.Limit = helper.IntUint64(pageSize) + ratelimit.Check(request.GetAction()) + response, err = client.DescribeCertificates(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || response.Response == nil || len(response.Response.Certificates) == 0 { + break + } + certificateList = append(certificateList, response.Response.Certificates...) + if len(response.Response.Certificates) < pageSize { + break + } + offset += pageSize + } + + return +} + +func (me *SSLService) checkCertificateType(ctx context.Context, certId string, checkType string) (bool, error) { + + //get certificate by id + + request := ssl.NewDescribeCertificateDetailRequest() + request.CertificateId = helper.String(certId) + certificate, err := me.DescribeCertificateDetail(ctx, request) + if err != nil { + return false, err + } + + if certificate != nil && certificate.Response != nil && *certificate.Response.CertificateType == checkType { + return true, nil + } else { + if certificate == nil || certificate.Response == nil || certificate.Response.CertificateId == nil { + return false, fmt.Errorf("certificate id %s is not found", certId) + } + return false, nil + } + +} +func (me *SSLService) ModifyCertificateResubmit(ctx context.Context, request *ssl.ModifyCertificateResubmitRequest) (err error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseSSLCertificateClient() + ratelimit.Check(request.GetAction()) + + response, err := client.ModifyCertificateResubmit(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } + if response == nil || response.Response == nil || response.Response.CertificateId == nil { + err = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) + return + } + if *response.Response.CertificateId != *request.CertificateId { + err = fmt.Errorf("TencentCloud SDK %s eertificates are inconsistent, request[%s], response[%s]", + request.GetAction(), *request.CertificateId, *response.Response.CertificateId) + return + } + return +} +func (me *SSLService) CancelAuditCertificate(ctx context.Context, request *ssl.CancelAuditCertificateRequest) (err error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseSSLCertificateClient() + + response, err := client.CancelAuditCertificate(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return + } + if response == nil || response.Response == nil || response.Response.Result == nil { + err = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) + return + } + if !*response.Response.Result { + err = fmt.Errorf("TencentCloud SDK %s CancelAudit failed", request.GetAction()) + return err + } + + return +} +func (me *SSLService) getCertificateStatus(ctx context.Context, certificateId string) (uint64, error) { + describeRequest := ssl.NewDescribeCertificateDetailRequest() + describeRequest.CertificateId = &certificateId + + describeResponse, err := me.DescribeCertificateDetail(ctx, describeRequest) + if err != nil { + return math.MaxUint64, err + } + if describeResponse == nil || describeResponse.Response == nil { + err := fmt.Errorf("TencentCloud SDK %s return empty response", describeRequest.GetAction()) + return math.MaxUint64, err + } + if describeResponse.Response.Status == nil { + err := fmt.Errorf("api[%s] certificate status is nil", describeRequest.GetAction()) + return math.MaxUint64, err + } + + return *describeResponse.Response.Status, nil +} +func (me *SslService) DescribeSslDescribeCertificateByID(ctx context.Context, certificateId string) (describeCertificate *ssl.DescribeCertificateResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeCertificateRequest() + ) + request.CertificateId = &certificateId + 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.UseSSLCertificateClient().DescribeCertificate(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()) + + if response == nil || response.Response == nil { + return + } + + describeCertificate = response.Response + return +} +func (me *SslService) DescribeSslDescribeCertificateBindResourceTaskDetailByFilter(ctx context.Context, param map[string]interface{}) (describeCertificateBindResourceTaskDetail *ssl.DescribeCertificateBindResourceTaskDetailResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeCertificateBindResourceTaskDetailRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "TaskId" { + request.TaskId = v.(*string) + } + if k == "ResourceTypes" { + request.ResourceTypes = v.([]*string) + } + if k == "Regions" { + request.Regions = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + var offset, limit = 0, 20 + + for { + request.Offset = helper.String(helper.IntToStr(offset)) + request.Limit = helper.String(helper.IntToStr(limit)) + response, err := me.client.UseSSLCertificateClient().DescribeCertificateBindResourceTaskDetail(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()) + + if response == nil || response.Response == nil || checkResult(1, response.Response) { + break + } + + describeCertificateBindResourceTaskDetail.CLB = append(describeCertificateBindResourceTaskDetail.CLB, response.Response.CLB...) + describeCertificateBindResourceTaskDetail.CDN = append(describeCertificateBindResourceTaskDetail.CDN, response.Response.CDN...) + describeCertificateBindResourceTaskDetail.WAF = append(describeCertificateBindResourceTaskDetail.WAF, response.Response.WAF...) + describeCertificateBindResourceTaskDetail.DDOS = append(describeCertificateBindResourceTaskDetail.DDOS, response.Response.DDOS...) + describeCertificateBindResourceTaskDetail.LIVE = append(describeCertificateBindResourceTaskDetail.LIVE, response.Response.LIVE...) + describeCertificateBindResourceTaskDetail.VOD = append(describeCertificateBindResourceTaskDetail.VOD, response.Response.VOD...) + describeCertificateBindResourceTaskDetail.TKE = append(describeCertificateBindResourceTaskDetail.TKE, response.Response.TKE...) + describeCertificateBindResourceTaskDetail.APIGATEWAY = append(describeCertificateBindResourceTaskDetail.APIGATEWAY, response.Response.APIGATEWAY...) + describeCertificateBindResourceTaskDetail.TCB = append(describeCertificateBindResourceTaskDetail.TCB, response.Response.TCB...) + describeCertificateBindResourceTaskDetail.TEO = append(describeCertificateBindResourceTaskDetail.TEO, response.Response.TEO...) + + if checkResult(limit, response.Response) { + break + } + + offset += limit + } + return +} +func checkResult(num int, result *ssl.DescribeCertificateBindResourceTaskDetailResponseParams) bool { + return len(result.CLB) < num && len(result.CDN) < num && + len(result.WAF) < num && len(result.DDOS) < num && + len(result.LIVE) < num && len(result.VOD) < num && + len(result.TKE) < num && len(result.APIGATEWAY) < num && + len(result.TCB) < num && len(result.TEO) < num +} + +func (me *SslService) DescribeSslDescribeCompaniesByFilter(ctx context.Context, param map[string]interface{}) (describeCompanies []*ssl.CompanyInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeCompaniesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "CompanyId" { + request.CompanyId = v.(*int64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseSSLCertificateClient().DescribeCompanies(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()) + + if response == nil || response.Response == nil || len(response.Response.Companies) < 1 { + break + } + describeCompanies = append(describeCompanies, response.Response.Companies...) + if len(response.Response.Companies) < int(limit) { + break + } + + offset += limit + } + + return +} +func (me *SslService) DescribeSslDescribeHostApiGatewayInstanceListByFilter(ctx context.Context, param map[string]interface{}) (describeHostApiGatewayInstanceList []*ssl.ApiGatewayInstanceDetail, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeHostApiGatewayInstanceListRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "CertificateId" { + request.CertificateId = v.(*string) + } + if k == "ResourceType" { + request.ResourceType = v.(*string) + } + if k == "IsCache" { + request.IsCache = v.(*uint64) + } + if k == "Filters" { + request.Filters = v.([]*ssl.Filter) + } + if k == "OldCertificateId" { + request.OldCertificateId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseSSLCertificateClient().DescribeHostApiGatewayInstanceList(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()) + + if response == nil || len(response.Response.InstanceList) < 1 { + return + } + + describeHostApiGatewayInstanceList = response.Response.InstanceList + return +} +func (me *SslService) DescribeSslDescribeHostCdnInstanceListByFilter(ctx context.Context, param map[string]interface{}) (describeHostCdnInstanceList *ssl.DescribeHostCdnInstanceListResponseParams, err error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeHostCdnInstanceListRequest() + response = ssl.NewDescribeHostCdnInstanceListResponse() + ) + + defer func() { + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) + } + }() + + for k, v := range param { + if k == "CertificateId" { + request.CertificateId = v.(*string) + } + if k == "ResourceType" { + request.ResourceType = v.(*string) + } + if k == "IsCache" { + request.IsCache = v.(*uint64) + } + if k == "Filters" { + request.Filters = v.([]*ssl.Filter) + } + if k == "OldCertificateId" { + request.OldCertificateId = v.(*string) + } + if k == "AsyncCache" { + request.AsyncCache = v.(*int64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + list []*ssl.CdnInstanceDetail + ) + + for { + request.Offset = &offset + request.Limit = &limit + response, err = me.client.UseSSLCertificateClient().DescribeHostCdnInstanceList(request) + if err != nil { + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.InstanceList) < 1 { + break + } + list = append(list, response.Response.InstanceList...) + if len(response.Response.InstanceList) < int(limit) { + break + } + offset += limit + } + + if response == nil || response.Response == nil || response.Response.InstanceList == nil { + return + } + + describeHostCdnInstanceList = &ssl.DescribeHostCdnInstanceListResponseParams{ + InstanceList: list, + } + if response.Response.AsyncOffset != nil { + describeHostCdnInstanceList.AsyncOffset = response.Response.AsyncOffset + } + if response.Response.AsyncCacheTime != nil { + describeHostCdnInstanceList.AsyncCacheTime = response.Response.AsyncCacheTime + } + if response.Response.AsyncTotalNum != nil { + describeHostCdnInstanceList.AsyncOffset = response.Response.AsyncTotalNum + } + + return +} +func (me *SslService) DescribeSslDescribeHostClbInstanceListByFilter(ctx context.Context, param map[string]interface{}) (describeHostClbInstanceList *ssl.DescribeHostClbInstanceListResponseParams, err error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeHostClbInstanceListRequest() + response = ssl.NewDescribeHostClbInstanceListResponse() + ) + + defer func() { + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) + } + }() + + for k, v := range param { + if k == "CertificateId" { + request.CertificateId = v.(*string) + } + if k == "IsCache" { + request.IsCache = v.(*uint64) + } + if k == "Filters" { + request.Filters = v.([]*ssl.Filter) + } + if k == "AsyncCache" { + request.AsyncCache = v.(*int64) + } + if k == "OldCertificateId" { + request.OldCertificateId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + list []*ssl.ClbInstanceDetail + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err = me.client.UseSSLCertificateClient().DescribeHostClbInstanceList(request) + if err != nil { + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.InstanceList) < 1 { + break + } + list = append(list, response.Response.InstanceList...) + if len(response.Response.InstanceList) < int(limit) { + break + } + + offset += limit + } + if response == nil || response.Response == nil || response.Response.InstanceList == nil { + return + } + + describeHostClbInstanceList = &ssl.DescribeHostClbInstanceListResponseParams{ + InstanceList: list, + } + if response.Response.AsyncOffset != nil { + describeHostClbInstanceList.AsyncOffset = response.Response.AsyncOffset + } + if response.Response.AsyncCacheTime != nil { + describeHostClbInstanceList.AsyncCacheTime = response.Response.AsyncCacheTime + } + if response.Response.AsyncTotalNum != nil { + describeHostClbInstanceList.AsyncOffset = response.Response.AsyncTotalNum + } + + return +} +func (me *SslService) DescribeSslDescribeHostCosInstanceListByFilter(ctx context.Context, param map[string]interface{}) (describeHostCosInstanceList *ssl.DescribeHostCosInstanceListResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeHostCosInstanceListRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "CertificateId" { + request.CertificateId = v.(*string) + } + if k == "ResourceType" { + request.ResourceType = v.(*string) + } + if k == "IsCache" { + request.IsCache = v.(*uint64) + } + if k == "Filters" { + request.Filters = v.([]*ssl.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseSSLCertificateClient().DescribeHostCosInstanceList(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()) + + if response == nil || len(response.Response.InstanceList) < 1 { + return + } + + describeHostCosInstanceList = &ssl.DescribeHostCosInstanceListResponseParams{ + InstanceList: response.Response.InstanceList, + } + if response.Response.AsyncOffset != nil { + describeHostCosInstanceList.AsyncOffset = response.Response.AsyncOffset + } + if response.Response.AsyncCacheTime != nil { + describeHostCosInstanceList.AsyncCacheTime = response.Response.AsyncCacheTime + } + if response.Response.AsyncTotalNum != nil { + describeHostCosInstanceList.AsyncOffset = response.Response.AsyncTotalNum + } + return +} +func (me *SslService) DescribeSslDescribeHostDdosInstanceListByFilter(ctx context.Context, param map[string]interface{}) (describeHostDdosInstanceList []*ssl.DdosInstanceDetail, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeHostDdosInstanceListRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "CertificateId" { + request.CertificateId = v.(*string) + } + if k == "ResourceType" { + request.ResourceType = v.(*string) + } + if k == "IsCache" { + request.IsCache = v.(*uint64) + } + if k == "Filters" { + request.Filters = v.([]*ssl.Filter) + } + if k == "OldCertificateId" { + request.OldCertificateId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseSSLCertificateClient().DescribeHostDdosInstanceList(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()) + + if response == nil || len(response.Response.InstanceList) < 1 { + return + } + describeHostDdosInstanceList = response.Response.InstanceList + return +} +func (me *SslService) DescribeSslDescribeHostDeployRecordByFilter(ctx context.Context, param map[string]interface{}) (describeHostDeployRecord []*ssl.DeployRecordInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeHostDeployRecordRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "CertificateId" { + request.CertificateId = v.(*string) + } + if k == "ResourceType" { + request.ResourceType = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseSSLCertificateClient().DescribeHostDeployRecord(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()) + + if response == nil || len(response.Response.DeployRecordList) < 1 { + break + } + describeHostDeployRecord = append(describeHostDeployRecord, response.Response.DeployRecordList...) + if len(response.Response.DeployRecordList) < int(limit) { + break + } + + offset += limit + } + + return +} +func (me *SslService) DescribeSslDescribeHostDeployRecordDetailByFilter( + ctx context.Context, param map[string]interface{}) ( + describeHostDeployRecordDetail []*ssl.DeployRecordDetail, + successTotalCount *int64, failedTotalCount *int64, runningTotalCount *int64, + errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeHostDeployRecordDetailRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "DeployRecordId" { + request.DeployRecordId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseSSLCertificateClient().DescribeHostDeployRecordDetail(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()) + + if response == nil || len(response.Response.DeployRecordDetailList) < 1 { + break + } + describeHostDeployRecordDetail = append(describeHostDeployRecordDetail, response.Response.DeployRecordDetailList...) + if response.Response != nil { + if response.Response.SuccessTotalCount != nil { + successTotalCount = response.Response.SuccessTotalCount + } + if response.Response.SuccessTotalCount != nil { + failedTotalCount = response.Response.FailedTotalCount + } + if response.Response.SuccessTotalCount != nil { + runningTotalCount = response.Response.SuccessTotalCount + } + } + if len(response.Response.DeployRecordDetailList) < int(limit) { + break + } + + offset += limit + } + + return +} +func (me *SslService) DescribeSslDescribeHostLighthouseInstanceListByFilter(ctx context.Context, param map[string]interface{}) (describeHostLighthouseInstanceList []*ssl.LighthouseInstanceDetail, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeHostLighthouseInstanceListRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "CertificateId" { + request.CertificateId = v.(*string) + } + if k == "ResourceType" { + request.ResourceType = v.(*string) + } + if k == "IsCache" { + request.IsCache = v.(*uint64) + } + if k == "Filters" { + request.Filters = v.([]*ssl.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseSSLCertificateClient().DescribeHostLighthouseInstanceList(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()) + + if response == nil || len(response.Response.InstanceList) < 1 { + return + } + describeHostLighthouseInstanceList = response.Response.InstanceList + return +} +func (me *SslService) DescribeSslDescribeHostLiveInstanceListByFilter(ctx context.Context, param map[string]interface{}) (describeHostLiveInstanceList []*ssl.LiveInstanceDetail, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeHostLiveInstanceListRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "CertificateId" { + request.CertificateId = v.(*string) + } + if k == "ResourceType" { + request.ResourceType = v.(*string) + } + if k == "IsCache" { + request.IsCache = v.(*uint64) + } + if k == "Filters" { + request.Filters = v.([]*ssl.Filter) + } + if k == "OldCertificateId" { + request.OldCertificateId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseSSLCertificateClient().DescribeHostLiveInstanceList(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()) + + if response == nil || len(response.Response.InstanceList) < 1 { + return + } + describeHostLiveInstanceList = response.Response.InstanceList + + return +} +func (me *SslService) DescribeSslDescribeHostTeoInstanceListByFilter(ctx context.Context, param map[string]interface{}) (describeHostTeoInstanceList []*ssl.TeoInstanceDetail, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeHostTeoInstanceListRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "CertificateId" { + request.CertificateId = v.(*string) + } + if k == "ResourceType" { + request.ResourceType = v.(*string) + } + if k == "IsCache" { + request.IsCache = v.(*uint64) + } + if k == "Filters" { + request.Filters = v.([]*ssl.Filter) + } + if k == "OldCertificateId" { + request.OldCertificateId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseSSLCertificateClient().DescribeHostTeoInstanceList(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()) + + if response == nil || len(response.Response.InstanceList) < 1 { + break + } + describeHostTeoInstanceList = append(describeHostTeoInstanceList, response.Response.InstanceList...) + if len(response.Response.InstanceList) < int(limit) { + break + } + + offset += limit + } + + return +} +func (me *SslService) DescribeSslDescribeHostTkeInstanceListByFilter( + ctx context.Context, param map[string]interface{}) ( + describeHostTkeInstanceList []*ssl.TkeInstanceDetail, + asyncTotalNum *int64, asyncOffset *int64, asyncCacheTime *string, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeHostTkeInstanceListRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "CertificateId" { + request.CertificateId = v.(*string) + } + if k == "IsCache" { + request.IsCache = v.(*uint64) + } + if k == "Filters" { + request.Filters = v.([]*ssl.Filter) + } + if k == "AsyncCache" { + request.AsyncCache = v.(*int64) + } + if k == "OldCertificateId" { + request.OldCertificateId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseSSLCertificateClient().DescribeHostTkeInstanceList(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()) + + if response == nil || len(response.Response.InstanceList) < 1 { + break + } + describeHostTkeInstanceList = append(describeHostTkeInstanceList, response.Response.InstanceList...) + if response.Response != nil { + if response.Response.AsyncTotalNum != nil { + asyncTotalNum = response.Response.AsyncTotalNum + } + if response.Response.AsyncOffset != nil { + asyncOffset = response.Response.AsyncOffset + } + if response.Response.AsyncCacheTime != nil { + asyncCacheTime = response.Response.AsyncCacheTime + } + } + if len(response.Response.InstanceList) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *SslService) DescribeSslDescribeHostUpdateRecordByFilter(ctx context.Context, param map[string]interface{}) (describeHostUpdateRecord []*ssl.UpdateRecordInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeHostUpdateRecordRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "CertificateId" { + request.CertificateId = v.(*string) + } + if k == "OldCertificateId" { + request.OldCertificateId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseSSLCertificateClient().DescribeHostUpdateRecord(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()) + + if response == nil || len(response.Response.DeployRecordList) < 1 { + break + } + describeHostUpdateRecord = append(describeHostUpdateRecord, response.Response.DeployRecordList...) + if len(response.Response.DeployRecordList) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *SslService) DescribeSslDescribeHostUpdateRecordDetailByFilter( + ctx context.Context, param map[string]interface{}) ( + describeHostUpdateRecordDetail []*ssl.UpdateRecordDetails, + successTotalCount *int64, failedTotalCount *int64, runningTotalCount *int64, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeHostUpdateRecordDetailRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "DeployRecordId" { + request.DeployRecordId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = helper.Int64ToStrPoint(offset) + request.Limit = helper.Int64ToStrPoint(limit) + response, err := me.client.UseSSLCertificateClient().DescribeHostUpdateRecordDetail(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()) + + if response == nil || len(response.Response.RecordDetailList) < 1 { + break + } + describeHostUpdateRecordDetail = append(describeHostUpdateRecordDetail, response.Response.RecordDetailList...) + if response.Response != nil { + if response.Response.SuccessTotalCount != nil { + successTotalCount = response.Response.SuccessTotalCount + } + if response.Response.SuccessTotalCount != nil { + failedTotalCount = response.Response.FailedTotalCount + } + if response.Response.SuccessTotalCount != nil { + runningTotalCount = response.Response.SuccessTotalCount + } + } + if len(response.Response.RecordDetailList) < int(limit) { + break + } + offset += limit + } + + return +} + +func (me *SslService) DescribeSslDescribeHostVodInstanceListByFilter(ctx context.Context, param map[string]interface{}) (describeHostVodInstanceList []*ssl.VodInstanceDetail, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeHostVodInstanceListRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "CertificateId" { + request.CertificateId = v.(*string) + } + if k == "ResourceType" { + request.ResourceType = v.(*string) + } + if k == "IsCache" { + request.IsCache = v.(*uint64) + } + if k == "Filters" { + request.Filters = v.([]*ssl.Filter) + } + if k == "OldCertificateId" { + request.OldCertificateId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseSSLCertificateClient().DescribeHostVodInstanceList(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()) + + if response == nil || len(response.Response.InstanceList) < 1 { + return + } + + describeHostVodInstanceList = response.Response.InstanceList + return +} + +func (me *SslService) DescribeSslDescribeHostWafInstanceListByFilter(ctx context.Context, param map[string]interface{}) (describeHostWafInstanceList []*ssl.LiveInstanceDetail, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeHostWafInstanceListRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "CertificateId" { + request.CertificateId = v.(*string) + } + if k == "ResourceType" { + request.ResourceType = v.(*string) + } + if k == "IsCache" { + request.IsCache = v.(*uint64) + } + if k == "Filters" { + request.Filters = v.([]*ssl.Filter) + } + if k == "OldCertificateId" { + request.OldCertificateId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseSSLCertificateClient().DescribeHostWafInstanceList(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()) + + if response == nil || len(response.Response.InstanceList) < 1 { + return + } + + describeHostWafInstanceList = response.Response.InstanceList + return +} + +func (me *SslService) DescribeSslDescribeManagerDetailByFilter(ctx context.Context, managerId string) (describeManagerDetailResponse *ssl.DescribeManagerDetailResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeManagerDetailRequest() + ) + request.ManagerId = helper.StrToInt64Point(managerId) + + 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.UseSSLCertificateClient().DescribeManagerDetail(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()) + + if response == nil || response.Response == nil { + return + } + + describeManagerDetailResponse = response.Response + return +} + +func (me *SslService) DescribeSslDescribeManagersByFilter(ctx context.Context, param map[string]interface{}) (describeManagers []*ssl.ManagerInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeManagersRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "CompanyId" { + request.CompanyId = v.(*int64) + } + if k == "ManagerName" { + request.ManagerName = v.(*string) + } + if k == "ManagerMail" { + request.ManagerMail = v.(*string) + } + if k == "Status" { + request.Status = v.(*string) + } + if k == "SearchKey" { + request.SearchKey = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseSSLCertificateClient().DescribeManagers(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()) + + if response == nil || len(response.Response.Managers) < 1 { + break + } + describeManagers = append(describeManagers, response.Response.Managers...) + if len(response.Response.Managers) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *SslService) DescribeSslDescribeCertificateBindResourceTaskResultByFilter(ctx context.Context, param map[string]interface{}) (describeCertificateBindResourceTaskResult []*ssl.SyncTaskBindResourceResult, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = ssl.NewDescribeCertificateBindResourceTaskResultRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "TaskIds" { + request.TaskIds = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseSSLCertificateClient().DescribeCertificateBindResourceTaskResult(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()) + + if response == nil || response.Response == nil { + return + } + describeCertificateBindResourceTaskResult = response.Response.SyncTaskBindResourceResult + + return +} diff --git a/tencentcloud/services/clb/service_tencentcloud_clb.go b/tencentcloud/services/clb/service_tencentcloud_clb.go new file mode 100644 index 0000000000..6eee9a5248 --- /dev/null +++ b/tencentcloud/services/clb/service_tencentcloud_clb.go @@ -0,0 +1,2328 @@ +package clb + +import ( + "context" + "fmt" + "log" + "strings" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/pkg/errors" + clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +func NewClbService(client *connectivity.TencentCloudClient) ClbService { + return ClbService{client: client} +} + +type ClbService struct { + client *connectivity.TencentCloudClient +} + +func RuleIdCheck(ruleId string) error { + //check clb listener rule id first + //old example file cause wrong usage of listener.id + items := strings.Split(ruleId, tccommon.FILED_SP) + if len(items) > 1 { + return fmt.Errorf("Unsupported references of rule_id since version 1.47.0, please check your tf content and use `tencentcloud_clb_listener_rule.xxx.rule_id` instead of `tencentcloud_clb_listener_rule.xxx.id`") + } + return nil +} + +func ListenerIdCheck(listenerId string) error { + //check clb listener listener id first + //old example file cause wrong usage of listener.id + items := strings.Split(listenerId, tccommon.FILED_SP) + if len(items) > 1 { + return fmt.Errorf("Unsupported references of listener_id since version 1.47.0, please check your tf content and use `tencentcloud_clb_listener.xxx.listener_id` instead of `tencentcloud_clb_listener.xxx.id`") + } + return nil +} + +func (me *ClbService) DescribeLoadBalancerById(ctx context.Context, clbId string) (clbInstance *clb.LoadBalancer, errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewDescribeLoadBalancersRequest() + request.LoadBalancerIds = []*string{&clbId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeLoadBalancers(request) + if err != nil { + errRet = errors.WithStack(err) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.LoadBalancerSet) < 1 { + return + } + clbInstance = response.Response.LoadBalancerSet[0] + return +} + +func (me *ClbService) DescribeLoadBalancerByFilter(ctx context.Context, params map[string]interface{}) (clbs []*clb.LoadBalancer, errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewDescribeLoadBalancersRequest() + + for k, v := range params { + if k == "clb_id" { + request.LoadBalancerIds = []*string{helper.String(v.(string))} + } + if k == "network_type" { + request.LoadBalancerType = helper.String(v.(string)) + } + if k == "clb_name" { + request.LoadBalancerName = helper.String(v.(string)) + } + if k == "project_id" { + projectId := int64(v.(int)) + request.ProjectId = &projectId + } + if k == "master_zone" { + request.MasterZone = helper.String(v.(string)) + } + } + + offset := int64(0) + pageSize := int64(CLB_PAGE_LIMIT) + clbs = make([]*clb.LoadBalancer, 0) + for { + request.Offset = &(offset) + request.Limit = &(pageSize) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeLoadBalancers(request) + if err != nil { + errRet = errors.WithStack(err) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.LoadBalancerSet) < 1 { + break + } + + clbs = append(clbs, response.Response.LoadBalancerSet...) + + if int64(len(response.Response.LoadBalancerSet)) < pageSize { + break + } + offset += pageSize + } + return +} + +func (me *ClbService) DeleteLoadBalancerById(ctx context.Context, clbId string) error { + logId := tccommon.GetLogId(ctx) + request := clb.NewDeleteLoadBalancerRequest() + request.LoadBalancerIds = []*string{&clbId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DeleteLoadBalancer(request) + if err != nil { + if e, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if e.GetCode() == "InvalidParameter.LBIdNotFound" { + return nil + } + } + return errors.WithStack(err) + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + requestId := *response.Response.RequestId + retryErr := waitForTaskFinish(requestId, me.client.UseClbClient()) + if retryErr != nil { + return retryErr + } + return nil +} + +func (me *ClbService) DescribeListenerById(ctx context.Context, listenerId string, clbId string) (clbListener *clb.Listener, errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewDescribeListenersRequest() + request.ListenerIds = []*string{&listenerId} + request.LoadBalancerId = &clbId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeListeners(request) + if err != nil { + if e, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if e.GetCode() == "InvalidParameter.LBIdNotFound" { + return + } + } + errRet = errors.WithStack(err) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.Listeners) < 1 { + return + } + clbListener = response.Response.Listeners[0] + return +} + +func (me *ClbService) DescribeListenersByFilter(ctx context.Context, params map[string]interface{}) (listeners []*clb.Listener, errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewDescribeListenersRequest() + clbId := "" + for k, v := range params { + if k == "listener_id" { + listenerId := v.(string) + request.ListenerIds = []*string{&listenerId} + request.LoadBalancerId = &clbId + } + if k == "clb_id" { + if clbId == "" { + clbId = v.(string) + request.LoadBalancerId = &clbId + } + } + if k == "protocol" { + request.Protocol = helper.String(v.(string)) + } + if k == "port" { + port := int64(v.(int)) + request.Port = &port + } + } + + listeners = make([]*clb.Listener, 0) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeListeners(request) + if err != nil { + if e, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if e.GetCode() == "InvalidParameter.LBIdNotFound" { + return + } + } + errRet = errors.WithStack(err) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + listeners = append(listeners, response.Response.Listeners...) + + return +} + +func (me *ClbService) DeleteListenerById(ctx context.Context, clbId string, listenerId string) error { + logId := tccommon.GetLogId(ctx) + request := clb.NewDeleteListenerRequest() + request.ListenerId = &listenerId + request.LoadBalancerId = &clbId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DeleteListener(request) + if err != nil { + return errors.WithStack(err) + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + requestId := *response.Response.RequestId + retryErr := waitForTaskFinish(requestId, me.client.UseClbClient()) + if retryErr != nil { + return retryErr + } + return nil +} + +func (me *ClbService) DescribeTaskStatusById(ctx context.Context, taskId string) (status int64, errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewDescribeTaskStatusRequest() + request.TaskId = &taskId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeTaskStatus(request) + if err != nil { + return 0, errors.WithStack(err) + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + status = *response.Response.Status + return +} + +func (me *ClbService) DescribeRulesByFilter(ctx context.Context, params map[string]string) (rules []*clb.RuleOutput, errRet error) { + logId := tccommon.GetLogId(ctx) + //listener filter + clbId := "" + listenerId := "" + //rule filter + domain := "" + url := "" + locationId := "" + scheduler := "" + for k, v := range params { + if k == "listener_id" { + listenerId = v + } + if k == "clb_id" { + clbId = v + } + if k == "domain" { + domain = v + } + if k == "url" { + url = v + } + if k == "rule_id" { + locationId = v + } + if k == "scheduler" { + scheduler = v + } + } + //get listener first + request := clb.NewDescribeListenersRequest() + if listenerId == "" || clbId == "" { + errRet = fmt.Errorf("[CHECK][CLB rule][Describe] check: Listener id and CLB id can not be null") + return + } + request.LoadBalancerId = &clbId + request.ListenerIds = []*string{&listenerId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeListeners(request) + if err != nil { + //in case that the lb is not exist, return empty + if e, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if e.GetCode() == "InvalidParameter.LBIdNotFound" { + return + } + } + errRet = errors.WithStack(err) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + //listener not found, return empty + if len(response.Response.Listeners) < 1 { + return + } + clbListener := response.Response.Listeners[0] + rules = make([]*clb.RuleOutput, 0) + for _, rule := range clbListener.Rules { + if domain != "" { + if *rule.Domain != domain { + continue + } + } + if url != "" { + if *rule.Url != url { + continue + } + } + if locationId != "" { + if *rule.LocationId != locationId { + continue + } + } + if scheduler != "" { + if *rule.Scheduler != scheduler { + continue + } + } + rules = append(rules, rule) + } + + return +} + +func (me *ClbService) DescribeRuleByPara(ctx context.Context, clbId string, listenerId string, domain string, url string) (clbRule *clb.RuleOutput, errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewDescribeListenersRequest() + request.ListenerIds = []*string{&listenerId} + request.LoadBalancerId = &clbId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeListeners(request) + if err != nil { + //in case that the lb is not exist, return empty + if e, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if e.GetCode() == "InvalidParameter.LBIdNotFound" { + return + } + } + errRet = errors.WithStack(err) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + //listener not found, return empty + if len(response.Response.Listeners) < 1 { + return + } + clbListener := response.Response.Listeners[0] + var ruleOutput clb.RuleOutput + findFlag := false + for _, rule := range clbListener.Rules { + if *rule.Domain == domain && *rule.Url == url { + ruleOutput = *rule + findFlag = true + break + } + } + if !findFlag { + errRet = fmt.Errorf("[CHECK][CLB rule][Describe] check: rule not found!") + errRet = errors.WithStack(errRet) + return + } else { + clbRule = &ruleOutput + } + return +} + +func (me *ClbService) DeleteRuleById(ctx context.Context, clbId string, listenerId string, locationId string) error { + logId := tccommon.GetLogId(ctx) + request := clb.NewDeleteRuleRequest() + request.ListenerId = &listenerId + request.LoadBalancerId = &clbId + request.LocationIds = []*string{&locationId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DeleteRule(request) + if err != nil { + return errors.WithStack(err) + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + requestId := *response.Response.RequestId + retryErr := waitForTaskFinish(requestId, me.client.UseClbClient()) + if retryErr != nil { + return retryErr + } + return nil +} + +func (me *ClbService) DescribeAttachmentByPara(ctx context.Context, clbId string, listenerId string, locationId string) (clbAttachment *clb.ListenerBackend, errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewDescribeListenersRequest() + request.ListenerIds = []*string{&listenerId} + request.LoadBalancerId = &clbId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeListeners(request) + if err != nil { + //in case that the lb is not exist, return empty + if e, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if e.GetCode() == "InvalidParameter.LBIdNotFound" { + return + } + } + errRet = errors.WithStack(err) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + //listener not found, return empty + if len(response.Response.Listeners) < 1 { + return + } + clbListener := response.Response.Listeners[0] + protocol := clbListener.Protocol + port := clbListener.Port + + aRequest := clb.NewDescribeTargetsRequest() + aRequest.ListenerIds = []*string{&listenerId} + aRequest.LoadBalancerId = &clbId + aRequest.Protocol = protocol + aRequest.Port = port + ratelimit.Check(request.GetAction()) + aResponse, aErr := me.client.UseClbClient().DescribeTargets(aRequest) + + if aErr != nil { + //in case that the lb is not exist, return empty + if e, ok := aErr.(*sdkErrors.TencentCloudSDKError); ok { + if e.GetCode() == "InvalidParameter.LBIdNotFound" { + return + } + } + errRet = errors.WithStack(aErr) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, aRequest.GetAction(), aRequest.ToJsonString(), aResponse.ToJsonString()) + + if len(aResponse.Response.Listeners) < 1 { + return + } else { + clbAttachment = aResponse.Response.Listeners[0] + } + + return +} + +func (me *ClbService) DescribeAttachmentsByFilter(ctx context.Context, params map[string]string) (clbAttachments []*clb.ListenerBackend, errRet error) { + logId := tccommon.GetLogId(ctx) + //listener filter + clbId := "" + listenerId := "" + //rule filter + + for k, v := range params { + if k == "listener_id" { + listenerId = v + } + if k == "clb_id" { + clbId = v + } + } + //get listener first + request := clb.NewDescribeListenersRequest() + if listenerId == "" || clbId == "" { + errRet = fmt.Errorf("[CHECK][CLB attachment][Describe] check: Listener id and clb id can not be null") + errRet = errors.WithStack(errRet) + return + } + request.LoadBalancerId = &clbId + request.ListenerIds = []*string{&listenerId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeListeners(request) + if err != nil { + //in case that the lb is not exist, return empty + if e, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if e.GetCode() == "InvalidParameter.LBIdNotFound" { + return + } + } + errRet = errors.WithStack(err) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.Listeners) < 1 { + return + } + clbListener := response.Response.Listeners[0] + protocol := clbListener.Protocol + port := clbListener.Port + + aRequest := clb.NewDescribeTargetsRequest() + aRequest.ListenerIds = []*string{&listenerId} + aRequest.LoadBalancerId = &clbId + aRequest.Protocol = protocol + aRequest.Port = port + ratelimit.Check(request.GetAction()) + aResponse, aErr := me.client.UseClbClient().DescribeTargets(aRequest) + + if aErr != nil { + //in case that the lb is not exist, return empty + if e, ok := aErr.(*sdkErrors.TencentCloudSDKError); ok { + if e.GetCode() == "InvalidParameter.LBIdNotFound" { + return + } + } + errRet = errors.WithStack(aErr) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, aRequest.GetAction(), aRequest.ToJsonString(), aResponse.ToJsonString()) + + if len(aResponse.Response.Listeners) < 1 { + return + } else { + clbAttachments = append(clbAttachments, aResponse.Response.Listeners[0]) + } + + return +} + +func (me *ClbService) DeleteAttachmentById(ctx context.Context, clbId string, listenerId string, locationId string, targets []interface{}) error { + logId := tccommon.GetLogId(ctx) + request := clb.NewDeregisterTargetsRequest() + request.ListenerId = &listenerId + request.LoadBalancerId = &clbId + for _, inst_ := range targets { + inst := inst_.(map[string]interface{}) + request.Targets = append(request.Targets, clbNewTarget(inst["instance_id"], inst["eni_ip"], inst["port"], inst["weight"])) + } + if locationId != "" { + request.LocationId = &locationId + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DeregisterTargets(request) + if err != nil { + ee, ok := err.(*sdkErrors.TencentCloudSDKError) + if ok && ee.GetCode() == "InvalidParameter" { + return nil + } + return errors.WithStack(err) + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + requestId := *response.Response.RequestId + retryErr := waitForTaskFinish(requestId, me.client.UseClbClient()) + if retryErr != nil { + return retryErr + } + return nil +} + +func (me *ClbService) DescribeRedirectionById(ctx context.Context, rewriteId string) (rewriteInfo *map[string]string, errRet error) { + logId := tccommon.GetLogId(ctx) + items := strings.Split(rewriteId, "#") + if len(items) != 5 { + errRet = fmt.Errorf("[CHECK][CLB redirection][Describe] check: redirection id %s is not with format loc-xxx#loc-xxx#lbl-xxx#lbl-xxx#lb-xxx", rewriteId) + errRet = errors.WithStack(errRet) + return + } + sourceLocId := items[0] + targetLocId := items[1] + sourceListenerId := items[2] + targetListenerId := items[3] + clbId := items[4] + result := make(map[string]string) + request := clb.NewDescribeRewriteRequest() + request.LoadBalancerId = &clbId + request.SourceListenerIds = []*string{&sourceListenerId} + request.SourceLocationIds = []*string{&sourceLocId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeRewrite(request) + if err != nil { + //in case that the lb is not exist, return empty + if e, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if e.GetCode() == "InvalidParameter.LBIdNotFound" { + return + } + } + errRet = errors.WithStack(err) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.RewriteSet) < 1 { + return + } + + for _, v := range response.Response.RewriteSet { + //sometimes the response returns all the rules under a certain url, so filter again in the code + if v.RewriteTarget != nil { + if *v.RewriteTarget.TargetListenerId == targetListenerId && *v.RewriteTarget.TargetLocationId == targetLocId { + result["source_rule_id"] = sourceLocId + result["target_rule_id"] = targetLocId + result["source_listener_id"] = sourceListenerId + result["target_listener_id"] = targetListenerId + result["clb_id"] = clbId + rewriteInfo = &result + return + } + } + } + + return +} + +func (me *ClbService) DescribeAllAutoRedirections(ctx context.Context, rewriteId string) (rewriteInfos []*map[string]string, errRet error) { + logId := tccommon.GetLogId(ctx) + items := strings.Split(rewriteId, "#") + if len(items) != 5 { + errRet = fmt.Errorf("[CHECK][CLB redirection][Describe] check: redirection id %s is not with format loc-xxx#loc-xxx#lbl-xxx#lbl-xxx#lb-xxx", rewriteId) + errRet = errors.WithStack(errRet) + return + } + sourceLocationId := items[0] + sourceListenerId := items[2] + clbId := items[4] + request := clb.NewDescribeRewriteRequest() + request.LoadBalancerId = &clbId + request.SourceListenerIds = []*string{&sourceListenerId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeRewrite(request) + if err != nil { + //in case that the lb is not exist, return empty + if e, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if e.GetCode() == "InvalidParameter.LBIdNotFound" { + return + } + } + errRet = errors.WithStack(err) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.RewriteSet) < 1 { + return + } + + //get listener id and domain + domain := "" + for _, v := range response.Response.RewriteSet { + if v.RewriteTarget != nil && sourceListenerId == *v.ListenerId && sourceLocationId == *v.LocationId { + domain = *v.Domain + break + } + } + + for _, v := range response.Response.RewriteSet { + //auto rewrite will associate all the url under the domain + if v.RewriteTarget != nil && sourceListenerId == *v.ListenerId && domain == *v.Domain { + result := make(map[string]string) + result["source_rule_id"] = *v.LocationId + result["target_rule_id"] = *v.RewriteTarget.TargetLocationId + result["source_listener_id"] = *v.ListenerId + result["target_listener_id"] = *v.RewriteTarget.TargetListenerId + result["clb_id"] = clbId + rewriteInfos = append(rewriteInfos, &result) + } + } + return +} + +func (me *ClbService) DescribeRedirectionsByFilter(ctx context.Context, params map[string]string) (rewriteInfos []*map[string]string, errRet error) { + logId := tccommon.GetLogId(ctx) + clbId := "" + sourceListenerId := "" + sourceLocId := "" + targetListenerId := "" + targetLocId := "" + for k, v := range params { + if k == "source_listener_id" { + sourceListenerId = v + } + if k == "clb_id" { + clbId = v + } + if k == "source_rule_id" { + sourceLocId = v + } + if k == "target_listener_id" { + targetListenerId = v + } + if k == "target_rule_id" { + targetLocId = v + } + } + request := clb.NewDescribeRewriteRequest() + request.LoadBalancerId = &clbId + request.SourceListenerIds = []*string{&sourceListenerId} + request.SourceLocationIds = []*string{&sourceLocId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeRewrite(request) + if err != nil { + errRet = err + errRet = errors.WithStack(errRet) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.RewriteSet) < 1 { + return + } + ruleOutput := response.Response.RewriteSet[0] + if ruleOutput.RewriteTarget != nil { + if targetListenerId != "" && *ruleOutput.RewriteTarget.TargetListenerId != targetListenerId { + return + } + if targetLocId != "" && *ruleOutput.RewriteTarget.TargetLocationId != targetLocId { + return + } + result := make(map[string]string) + result["source_rule_id"] = sourceLocId + result["target_rule_id"] = *ruleOutput.RewriteTarget.TargetLocationId + result["source_listener_id"] = sourceListenerId + result["target_listener_id"] = *ruleOutput.RewriteTarget.TargetListenerId + result["clb_id"] = clbId + rewriteInfos = append(rewriteInfos, &result) + } + return +} + +func (me *ClbService) DeleteRedirectionById(ctx context.Context, rewriteId string) error { + logId := tccommon.GetLogId(ctx) + items := strings.Split(rewriteId, "#") + if len(items) != 5 { + errRet := fmt.Errorf("[CHECK][CLB redirection][Describe] check: redirection id %s is not with format loc-xxx#loc-xxx#lbl-xxx#lbl-xxx#lb-xxx", rewriteId) + errRet = errors.WithStack(errRet) + return errRet + } + sourceLocId := items[0] + targetLocId := items[1] + sourceListenerId := items[2] + targetListenerId := items[3] + clbId := items[4] + + request := clb.NewDeleteRewriteRequest() + request.LoadBalancerId = &clbId + request.SourceListenerId = &sourceListenerId + request.TargetListenerId = &targetListenerId + var rewriteInfo clb.RewriteLocationMap + rewriteInfo.SourceLocationId = &sourceLocId + rewriteInfo.TargetLocationId = &targetLocId + request.RewriteInfos = []*clb.RewriteLocationMap{&rewriteInfo} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DeleteRewrite(request) + if err != nil { + return errors.WithStack(err) + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + requestId := *response.Response.RequestId + retryErr := waitForTaskFinish(requestId, me.client.UseClbClient()) + if retryErr != nil { + return retryErr + } + return nil +} + +func checkHealthCheckPara(ctx context.Context, d *schema.ResourceData, protocol string, applyType string) (healthSetFlag bool, healthCheckPara *clb.HealthCheck, errRet error) { + var healthCheck clb.HealthCheck + healthSetFlag = false + healthCheckPara = &healthCheck + if v, ok := d.GetOkExists("health_check_switch"); ok { + healthSetFlag = true + vv := v.(bool) + vvv := int64(0) + if vv { + vvv = 1 + } + healthCheck.HealthSwitch = &vvv + } + if v, ok := d.GetOk("health_check_time_out"); ok { + healthSetFlag = true + vv := int64(v.(int)) + healthCheck.TimeOut = &vv + } + if v, ok := d.GetOk("health_check_interval_time"); ok { + healthSetFlag = true + vv := int64(v.(int)) + healthCheck.IntervalTime = &vv + } + if v, ok := d.GetOk("health_check_health_num"); ok { + healthSetFlag = true + vv := int64(v.(int)) + healthCheck.HealthNum = &vv + } + if v, ok := d.GetOk("health_check_unhealth_num"); ok { + healthSetFlag = true + vv := int64(v.(int)) + healthCheck.UnHealthNum = &vv + } + if v, ok := d.GetOk("health_check_port"); ok { + healthSetFlag = true + healthCheck.CheckPort = helper.Int64(int64(v.(int))) + } + var checkType string + if v, ok := d.GetOk("health_check_type"); ok { + healthSetFlag = true + checkType = v.(string) + healthCheck.CheckType = &checkType + } + if v, ok := d.GetOk("health_check_http_code"); ok { + if !(protocol == CLB_LISTENER_PROTOCOL_HTTP || protocol == CLB_LISTENER_PROTOCOL_HTTPS || + (protocol == CLB_LISTENER_PROTOCOL_TCP && checkType == HEALTH_CHECK_TYPE_HTTP)) { + healthSetFlag = false + errRet = fmt.Errorf("health_check_http_code can only be set with protocol HTTP/HTTPS or HTTP of TCP") + errRet = errors.WithStack(errRet) + return + } + healthSetFlag = true + healthCheck.HttpCode = helper.Int64(int64(v.(int))) + } + if v, ok := d.GetOk("health_check_http_path"); ok { + if !(protocol == CLB_LISTENER_PROTOCOL_HTTP || protocol == CLB_LISTENER_PROTOCOL_HTTPS || + (protocol == CLB_LISTENER_PROTOCOL_TCP && checkType == HEALTH_CHECK_TYPE_HTTP)) { + healthSetFlag = false + errRet = fmt.Errorf("health_check_http_path can only be set with protocol HTTP/HTTPS or HTTP of TCP") + errRet = errors.WithStack(errRet) + return + } + healthSetFlag = true + healthCheck.HttpCheckPath = helper.String(v.(string)) + } + if v, ok := d.GetOk("health_check_http_domain"); ok { + if !(protocol == CLB_LISTENER_PROTOCOL_HTTP || protocol == CLB_LISTENER_PROTOCOL_HTTPS || + (protocol == CLB_LISTENER_PROTOCOL_TCP && checkType == HEALTH_CHECK_TYPE_HTTP)) { + healthSetFlag = false + errRet = fmt.Errorf("health_check_http_domain can only be set with protocol HTTP/HTTPS or HTTP of TCP") + errRet = errors.WithStack(errRet) + return + } + healthSetFlag = true + healthCheck.HttpCheckDomain = helper.String(v.(string)) + } + if v, ok := d.GetOk("health_check_http_method"); ok { + if !(protocol == CLB_LISTENER_PROTOCOL_HTTP || protocol == CLB_LISTENER_PROTOCOL_HTTPS || + (protocol == CLB_LISTENER_PROTOCOL_TCP && checkType == HEALTH_CHECK_TYPE_HTTP)) { + healthSetFlag = false + errRet = fmt.Errorf("health_check_http_method can only be set with protocol HTTP/HTTPS or HTTP of TCP") + errRet = errors.WithStack(errRet) + return + } + healthSetFlag = true + healthCheck.HttpCheckMethod = helper.String(v.(string)) + } + if v, ok := d.GetOk("health_check_http_version"); ok { + if !(protocol == CLB_LISTENER_PROTOCOL_TCP && checkType == HEALTH_CHECK_TYPE_HTTP) { + healthSetFlag = false + errRet = fmt.Errorf("health_check_http_version can only be set with protocol HTTP of TCP") + errRet = errors.WithStack(errRet) + return + } + healthSetFlag = true + healthCheck.HttpVersion = helper.String(v.(string)) + } + if v, ok := d.GetOk("health_check_context_type"); ok { + if !(protocol == CLB_LISTENER_PROTOCOL_TCP && checkType == HEALTH_CHECK_TYPE_CUSTOM) { + healthSetFlag = false + errRet = fmt.Errorf("health_check_context_type can only be set with protocol CUSTOM of TCP") + errRet = errors.WithStack(errRet) + return + } + healthSetFlag = true + healthCheck.ContextType = helper.String(v.(string)) + } + if v, ok := d.GetOk("health_check_send_context"); ok { + if !(protocol == CLB_LISTENER_PROTOCOL_TCP && checkType == HEALTH_CHECK_TYPE_CUSTOM) { + healthSetFlag = false + errRet = fmt.Errorf("health_check_send_context can only be set with protocol CUSTOM of TCP") + errRet = errors.WithStack(errRet) + return + } + healthSetFlag = true + healthCheck.SendContext = helper.String(v.(string)) + } + if v, ok := d.GetOk("health_check_recv_context"); ok { + if !(protocol == CLB_LISTENER_PROTOCOL_TCP && checkType == HEALTH_CHECK_TYPE_CUSTOM) { + healthSetFlag = false + errRet = fmt.Errorf("health_check_recv_context can only be set with protocol CUSTOM of TCP") + errRet = errors.WithStack(errRet) + return + } + healthSetFlag = true + healthCheck.RecvContext = helper.String(v.(string)) + } + + if v, ok := d.GetOk("health_source_ip_type"); ok { + healthSetFlag = true + healthCheck.SourceIpType = helper.Int64(int64(v.(int))) + } + + if healthSetFlag { + if !(((protocol == CLB_LISTENER_PROTOCOL_TCP || protocol == CLB_LISTENER_PROTOCOL_UDP || + protocol == CLB_LISTENER_PROTOCOL_TCPSSL || protocol == CLB_LISTENER_PROTOCOL_QUIC) && + applyType == HEALTH_APPLY_TYPE_LISTENER) || + ((protocol == CLB_LISTENER_PROTOCOL_HTTP || protocol == CLB_LISTENER_PROTOCOL_HTTPS) && + applyType == HEALTH_APPLY_TYPE_RULE)) { + healthSetFlag = false + errRet = fmt.Errorf("health para can only be set with TCP/UDP/TCP_SSL listener or rule of HTTP/HTTPS listener") + errRet = errors.WithStack(errRet) + return + } + if protocol == CLB_LISTENER_PROTOCOL_TCP { + if checkType == HEALTH_CHECK_TYPE_HTTP && healthCheck.HttpCheckDomain == nil { + healthCheck.HttpCheckDomain = helper.String("") + } + if healthCheck.CheckPort == nil { + healthCheck.CheckPort = helper.Int64(-1) + } + if healthCheck.HttpCheckPath == nil { + healthCheck.HttpCheckPath = helper.String("") + } + } + healthCheckPara = &healthCheck + } + return + +} + +func checkCertificateInputPara(ctx context.Context, d *schema.ResourceData, meta interface{}) (certificateSetFlag bool, certPara *clb.CertificateInput, errRet error) { + certificateSetFlag = false + var certificateInput clb.CertificateInput + certificateSSLMode := "" + certificateId := "" + certificateCaId := "" + + if v, ok := d.GetOk("certificate_ssl_mode"); ok { + certificateSetFlag = true + certificateSSLMode = v.(string) + certificateInput.SSLMode = helper.String(v.(string)) + } + + if v, ok := d.GetOk("certificate_id"); ok { + certificateSetFlag = true + certificateId = v.(string) + certificateInput.CertId = helper.String(v.(string)) + } + + if v, ok := d.GetOk("certificate_ca_id"); ok { + certificateSetFlag = true + certificateCaId = v.(string) + certificateInput.CertCaId = helper.String(v.(string)) + } + + if certificateSetFlag && certificateId == "" { + certificateSetFlag = false + errRet = fmt.Errorf("certificated Id is null") + errRet = errors.WithStack(errRet) + return + } + + if certificateSetFlag && certificateSSLMode == CERT_SSL_MODE_MUT && certificateCaId == "" { + certificateSetFlag = false + errRet = fmt.Errorf("certificate_ca_key is null and the ssl mode is 'MUTUAL' ") + errRet = errors.WithStack(errRet) + return + } + + certPara = &certificateInput + + //check type valid + sslService := SSLService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + + if certificateInput.CertCaId != nil { + check, err := sslService.checkCertificateType(ctx, *certificateInput.CertCaId, SSL_CERT_TYPE_CA) + if err != nil { + certificateSetFlag = false + errRet = fmt.Errorf("certificated %s check error %s", *certificateInput.CertCaId, err) + errRet = errors.WithStack(errRet) + return + } + if !check { + certificateSetFlag = false + errRet = fmt.Errorf("certificated %s check error cert type is not `%s`", *certificateInput.CertCaId, SSL_CERT_TYPE_CA) + return + } + } + if certificateInput.CertId != nil { + check, err := sslService.checkCertificateType(ctx, *certificateInput.CertId, SSL_CERT_TYPE_SERVER) + if err != nil { + certificateSetFlag = false + errRet = fmt.Errorf("certificated %s check error %s", *certificateInput.CertId, err) + errRet = errors.WithStack(errRet) + return + } + if !check { + certificateSetFlag = false + errRet = fmt.Errorf("certificated %s check error cert type is not `%s`", *certificateInput.CertId, SSL_CERT_TYPE_SERVER) + errRet = errors.WithStack(errRet) + return + } + } + return +} + +func waitForTaskFinish(requestId string, meta *clb.Client) (err error) { + taskQueryRequest := clb.NewDescribeTaskStatusRequest() + taskQueryRequest.TaskId = &requestId + err = resource.Retry(4*tccommon.ReadRetryTimeout, func() *resource.RetryError { + taskResponse, e := meta.DescribeTaskStatus(taskQueryRequest) + if e != nil { + return resource.NonRetryableError(errors.WithStack(e)) + } + if *taskResponse.Response.Status == int64(CLB_TASK_EXPANDING) { + return resource.RetryableError(errors.WithStack(fmt.Errorf("CLB task status is %d(expanding), requestId is %s", *taskResponse.Response.Status, *taskResponse.Response.RequestId))) + } else if *taskResponse.Response.Status == int64(CLB_TASK_FAIL) { + return resource.NonRetryableError(errors.WithStack(fmt.Errorf("CLB task status is %d(failed), requestId is %s", *taskResponse.Response.Status, *taskResponse.Response.RequestId))) + } + return nil + }) + return +} + +func flattenBackendList(list []*clb.Backend) (mapping []map[string]interface{}) { + result := make([]map[string]interface{}, 0, len(list)) + for i := range list { + v := list[i] + target := map[string]interface{}{ + "port": v.Port, + "weight": v.Weight, + } + if *v.Type == "ENI" && len(v.PrivateIpAddresses) > 0 { + target["eni_ip"] = v.PrivateIpAddresses[0] + } else { + target["instance_id"] = v.InstanceId + } + result = append(result, target) + } + return result +} + +func clbNewTarget(instanceId, eniIp, port, weight interface{}) *clb.Target { + p := int64(port.(int)) + target := clb.Target{ + Port: &p, + } + if id, ok := instanceId.(string); ok && id != "" { + target.InstanceId = &id + } + if ip, ok := eniIp.(string); ok && ip != "" { + target.EniIp = &ip + } + if w, ok := weight.(int); ok { + weight64 := int64(w) + target.Weight = &weight64 + } + return &target +} + +func (me *ClbService) CreateTargetGroup(ctx context.Context, targetGroupName string, vpcId string, port uint64, + targetGroupInstances []*clb.TargetGroupInstance) (targetGroupId string, err error) { + var response *clb.CreateTargetGroupResponse + + request := clb.NewCreateTargetGroupRequest() + request.TargetGroupName = &targetGroupName + request.TargetGroupInstances = targetGroupInstances + request.Port = &port + if vpcId != "" { + request.VpcId = &vpcId + } + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + response, err = me.client.UseClbClient().CreateTargetGroup(request) + if err != nil { + return tccommon.RetryError(err) + } + return nil + }) + if err != nil { + return + } + if response.Response.TargetGroupId == nil { + err = fmt.Errorf("TencentCloud SDK %s return empty ", request.GetAction()) + return + } + targetGroupId = *response.Response.TargetGroupId + return +} + +func (me *ClbService) CreateTopic(ctx context.Context, params map[string]interface{}) (response *clb.CreateTopicResponse, err error) { + + request := clb.NewCreateTopicRequest() + + if topicName, ok := params["topic_name"]; ok { + request.TopicName = common.StringPtr(topicName.(string)) + } + + if partitionCount, ok := params["partition_count"]; ok { + request.PartitionCount = common.Uint64Ptr((uint64)(partitionCount.(int))) + } + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + resp, ok := me.client.UseClbClient().CreateTopic(request) + if ok != nil { + err = ok + return tccommon.RetryError(ok) + } + response = resp + return nil + }) + return +} + +func (me *ClbService) ModifyTargetGroup(ctx context.Context, targetGroupId, targetGroupName string, port uint64) (err error) { + request := clb.NewModifyTargetGroupAttributeRequest() + request.TargetGroupId = &targetGroupId + request.TargetGroupName = &targetGroupName + request.Port = &port + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, err := me.client.UseClbClient().ModifyTargetGroupAttribute(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + if err != nil { + return err + } + return nil +} + +func (me *ClbService) RegisterTargetInstances(ctx context.Context, targetGroupId, bindIp string, port, weight uint64) (err error) { + request := clb.NewRegisterTargetGroupInstancesRequest() + request.TargetGroupId = &targetGroupId + request.TargetGroupInstances = []*clb.TargetGroupInstance{ + { + BindIP: &bindIp, + Port: &port, + Weight: &weight, + }, + } + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, err := me.client.UseClbClient().RegisterTargetGroupInstances(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + if err != nil { + return err + } + + return nil +} + +func (me *ClbService) DeregisterTargetInstances(ctx context.Context, targetGroupId, bindIp string, port uint64) (err error) { + request := clb.NewDeregisterTargetGroupInstancesRequest() + request.TargetGroupId = &targetGroupId + request.TargetGroupInstances = []*clb.TargetGroupInstance{ + { + BindIP: &bindIp, + Port: &port, + }, + } + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, err := me.client.UseClbClient().DeregisterTargetGroupInstances(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + if err != nil { + return err + } + + return nil +} + +func (me *ClbService) DeleteTarget(ctx context.Context, targetGroupId string) error { + request := clb.NewDeleteTargetGroupsRequest() + request.TargetGroupIds = []*string{&targetGroupId} + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, err := me.client.UseClbClient().DeleteTargetGroups(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + if err != nil { + return err + } + return nil +} + +func (me *ClbService) DescribeTargetGroups(ctx context.Context, targetGroupId string, filters map[string]string) (targetGroupInfos []*clb.TargetGroupInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewDescribeTargetGroupsRequest() + if targetGroupId != "" { + request.TargetGroupIds = []*string{&targetGroupId} + } + request.Filters = make([]*clb.Filter, 0, len(filters)) + for k, v := range filters { + filter := clb.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset uint64 = 0 + var pageSize = uint64(CLB_PAGE_LIMIT) + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeTargetGroups(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || response.Response == nil || len(response.Response.TargetGroupSet) < 1 { + break + } + targetGroupInfos = append(targetGroupInfos, response.Response.TargetGroupSet...) + if len(response.Response.TargetGroupSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *ClbService) DescribeTargetGroupInstances(ctx context.Context, filters map[string]string) (targetGroupInstances []*clb.TargetGroupBackend, errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewDescribeTargetGroupInstancesRequest() + request.Filters = make([]*clb.Filter, 0, len(filters)) + for k, v := range filters { + filter := clb.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset uint64 = 0 + var pageSize = uint64(CLB_PAGE_LIMIT) + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeTargetGroupInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || response.Response == nil || len(response.Response.TargetGroupInstanceSet) < 1 { + break + } + targetGroupInstances = append(targetGroupInstances, response.Response.TargetGroupInstanceSet...) + if len(response.Response.TargetGroupInstanceSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *ClbService) AssociateTargetGroups(ctx context.Context, listenerId, clbId, targetGroupId, locationId string) (errRet error) { + + var ( + logId = tccommon.GetLogId(ctx) + ) + request := clb.NewAssociateTargetGroupsRequest() + association := clb.TargetGroupAssociation{ + LoadBalancerId: &clbId, + ListenerId: &listenerId, + TargetGroupId: &targetGroupId, + } + if locationId != "" { + association.LocationId = &locationId + } + request.Associations = append(request.Associations, &association) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().AssociateTargetGroups(request) + if err != nil { + if e, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if strings.Contains(e.GetMessage(), "Your task is working (AssociateTargetGroups)") { + return resource.RetryableError(e) + } + } + return tccommon.RetryError(err, tccommon.InternalError) + } else { + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + requestId := *response.Response.RequestId + retryErr := waitForTaskFinish(requestId, me.client.UseClbClient()) + if retryErr != nil { + return resource.NonRetryableError(errors.WithStack(retryErr)) + } + } + return nil + }) + + errRet = err + return +} + +func (me *ClbService) DescribeAssociateTargetGroups(ctx context.Context, ids []string) (has bool, err error) { + var ( + logId = tccommon.GetLogId(ctx) + targetInfos []*clb.TargetGroupInfo + ) + + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + targetInfos, err = me.DescribeTargetGroups(ctx, ids[0], nil) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s DescribeTargetGroups failed, reason:%s ", logId, err.Error()) + return + } + + for _, info := range targetInfos { + for _, rule := range info.AssociatedRule { + var originLocationId string + originClbId := *rule.LoadBalancerId + originListenerId := *rule.ListenerId + if rule.LocationId != nil { + originLocationId = *rule.LocationId + } + + if *rule.Protocol == CLB_LISTENER_PROTOCOL_TCP || *rule.Protocol == CLB_LISTENER_PROTOCOL_UDP || + *rule.Protocol == CLB_LISTENER_PROTOCOL_TCPSSL || *rule.Protocol == CLB_LISTENER_PROTOCOL_QUIC { + if originListenerId == ids[1] && originClbId == ids[2] { + return true, nil + } + } else if originListenerId == ids[1] && originClbId == ids[2] && originLocationId == ids[3] { + return true, nil + } + } + } + + return false, nil +} + +func (me *ClbService) DisassociateTargetGroups(ctx context.Context, targetGroupId, listenerId, clbId, locationId string) (errRet error) { + var ruleId *string + + if locationId != "" { + ruleId = &locationId + } + + request := clb.NewDisassociateTargetGroupsRequest() + request.Associations = []*clb.TargetGroupAssociation{ + { + LoadBalancerId: &clbId, + ListenerId: &listenerId, + TargetGroupId: &targetGroupId, + LocationId: ruleId, + }, + } + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseClbClient().DisassociateTargetGroups(request) + if err != nil { + if e, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if strings.Contains(e.GetMessage(), "Your task is working (DisassociateTargetGroups)") { + return resource.RetryableError(e) + } + } + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + errRet = err + return +} + +func (me *ClbService) ModifyTargetGroupInstancesWeight(ctx context.Context, targetGroupId, bindIp string, port, weight uint64) (errRet error) { + var instance = clb.TargetGroupInstance{ + BindIP: &bindIp, + Port: &port, + Weight: &weight, + } + request := clb.NewModifyTargetGroupInstancesWeightRequest() + request.TargetGroupId = &targetGroupId + request.TargetGroupInstances = []*clb.TargetGroupInstance{&instance} + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseClbClient().ModifyTargetGroupInstancesWeight(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + if err != nil { + return err + } + return nil +} + +func (me *ClbService) ModifyTargetGroupInstancesPort(ctx context.Context, targetGroupId, bindIp string, port, weight uint64) (errRet error) { + var instance = clb.TargetGroupInstance{ + BindIP: &bindIp, + Port: &port, + Weight: &weight, + } + request := clb.NewModifyTargetGroupInstancesPortRequest() + request.TargetGroupId = &targetGroupId + request.TargetGroupInstances = []*clb.TargetGroupInstance{&instance} + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseClbClient().ModifyTargetGroupInstancesPort(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + if err != nil { + return err + } + return nil +} + +// not use +func (me *ClbService) ModifyTargetPort(ctx context.Context, loadBalancerId, listenerId string, target clb.Target, newPort int64) (errRet error) { + request := clb.NewModifyTargetPortRequest() + request.LoadBalancerId = &loadBalancerId + request.ListenerId = &listenerId + request.Targets = []*clb.Target{&target} + request.NewPort = &newPort + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseClbClient().ModifyTargetPort(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + if err != nil { + return err + } + return nil +} + +// not use +func (me *ClbService) ModifyTargetWeight(ctx context.Context, loadBalancerId, listenerId string, target clb.Target, weight int64) (errRet error) { + request := clb.NewModifyTargetWeightRequest() + request.LoadBalancerId = &loadBalancerId + request.ListenerId = &listenerId + request.Targets = []*clb.Target{&target} + request.Weight = &weight + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseClbClient().ModifyTargetWeight(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + if err != nil { + return err + } + return nil +} + +func (me *ClbService) DescribeClbLogSet(ctx context.Context) (logSetId string, healthId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewDescribeClsLogSetRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeClsLogSet(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()) + + logSetId = *response.Response.LogsetId + healthId = *response.Response.HealthLogsetId + return +} + +func (me *ClbService) CreateClbLogSet(ctx context.Context, name string, logsetType string, period int) (id string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewCreateClsLogSetRequest() + request.Period = helper.IntUint64(period) + request.LogsetName = &name + if logsetType != "" { + request.LogsetType = &logsetType + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().CreateClsLogSet(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()) + + if response.Response != nil { + id = *response.Response.LogsetId + } + return +} + +func (me *ClbService) UpdateClsLogSet(ctx context.Context, request *cls.ModifyLogsetRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().ModifyLogset(request) + if err != nil { + errRet = err + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *ClbService) DescribeLbCustomizedConfigById(ctx context.Context, configId string) (customizedConfig *clb.ConfigListItem, errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewDescribeCustomizedConfigListRequest() + request.UconfigIds = []*string{&configId} + request.ConfigType = helper.String("CLB") + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DescribeCustomizedConfigList(request) + if err != nil { + errRet = errors.WithStack(err) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.ConfigList) < 1 { + return + } + customizedConfig = response.Response.ConfigList[0] + return +} + +func (me *ClbService) DeleteLbCustomizedConfigById(ctx context.Context, configId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewSetCustomizedConfigForLoadBalancerRequest() + request.OperationType = helper.String("DELETE") + request.UconfigId = helper.String(configId) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().SetCustomizedConfigForLoadBalancer(request) + if err != nil { + errRet = errors.WithStack(err) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return +} + +func (me *ClbService) BindOrUnBindCustomizedConfigWithLbId(ctx context.Context, action string, + configId string, lbIdsList []interface{}) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewSetCustomizedConfigForLoadBalancerRequest() + request.OperationType = helper.String(action) + request.UconfigId = helper.String(configId) + request.LoadBalancerIds = make([]*string, 0, len(lbIdsList)) + for i := range lbIdsList { + lbId := lbIdsList[i].(string) + request.LoadBalancerIds = append(request.LoadBalancerIds, &lbId) + } + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseClbClient().SetCustomizedConfigForLoadBalancer(request) + if err != nil { + errRet = errors.WithStack(err) + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return +} + +func (me *ClbService) CreateLoadBalancerSnatIps(ctx context.Context, id string, ips []*clb.SnatIp) (taskId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewCreateLoadBalancerSnatIpsRequest() + 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()) + } + }() + + request.LoadBalancerId = &id + request.SnatIps = ips + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().CreateLoadBalancerSnatIps(request) + + if err != nil { + errRet = err + return + } + + taskId = *response.Response.RequestId + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *ClbService) DeleteLoadBalancerSnatIps(ctx context.Context, id string, ips []*string) (taskId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := clb.NewDeleteLoadBalancerSnatIpsRequest() + 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()) + } + }() + + request.LoadBalancerId = &id + request.Ips = ips + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClbClient().DeleteLoadBalancerSnatIps(request) + + if err != nil { + errRet = err + return + } + + taskId = *response.Response.RequestId + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func extractBindClbList(itemlist []*clb.BindDetailItem) (lbList []interface{}) { + result := make([]interface{}, 0, len(itemlist)) + for _, v := range itemlist { + target := v.LoadBalancerId + result = append(result, target) + } + return result +} + +func (me *ClbService) DescribeClbFunctionTargetsAttachmentById(ctx context.Context, loadBalancerId string, listenerId string, + locationId string, domain string, url string) (functionTargets []*clb.FunctionTarget, locationIdTarget, domainTarget, urlTarget string, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := clb.NewDescribeTargetsRequest() + request.LoadBalancerId = &loadBalancerId + request.ListenerIds = []*string{&listenerId} + + 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.UseClbClient().DescribeTargets(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()) + + if len(response.Response.Listeners) < 1 { + return + } + + for _, listener := range response.Response.Listeners { + rules := listener.Rules + for _, rule := range rules { + if *rule.LocationId == locationId || (*rule.Domain == domain && *rule.Url == url) { + locationIdTarget = *rule.LocationId + domainTarget = *rule.Domain + urlTarget = *rule.Url + functionTargets = rule.FunctionTargets + break + } + } + } + return +} + +func (me *ClbService) DeleteClbFunctionTargetsAttachmentById(ctx context.Context, loadBalancerId string, listenerId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := clb.NewDeregisterFunctionTargetsRequest() + request.LoadBalancerId = &loadBalancerId + request.ListenerId = &listenerId + + 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.UseClbClient().DeregisterFunctionTargets(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 +} + +func (me *ClbService) DescribeClbClusterResourcesByFilter(ctx context.Context, param map[string]interface{}) (clusterResources []*clb.ClusterResource, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = clb.NewDescribeClusterResourcesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Filters" { + request.Filters = v.([]*clb.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseClbClient().DescribeClusterResources(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()) + + if response == nil || len(response.Response.ClusterResourceSet) < 1 { + break + } + clusterResources = append(clusterResources, response.Response.ClusterResourceSet...) + if len(response.Response.ClusterResourceSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *ClbService) DescribeClbCrossTargetsByFilter(ctx context.Context, param map[string]interface{}) (crossTargets []*clb.CrossTargets, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = clb.NewDescribeCrossTargetsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Filters" { + request.Filters = v.([]*clb.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseClbClient().DescribeCrossTargets(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()) + + if response == nil || len(response.Response.CrossTargetSet) < 1 { + break + } + crossTargets = append(crossTargets, response.Response.CrossTargetSet...) + if len(response.Response.CrossTargetSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *ClbService) DescribeClbExclusiveClustersByFilter(ctx context.Context, param map[string]interface{}) (exclusiveClusters []*clb.Cluster, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = clb.NewDescribeExclusiveClustersRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Filters" { + request.Filters = v.([]*clb.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseClbClient().DescribeExclusiveClusters(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()) + + if response == nil || len(response.Response.ClusterSet) < 1 { + break + } + exclusiveClusters = append(exclusiveClusters, response.Response.ClusterSet...) + if len(response.Response.ClusterSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *ClbService) DescribeClbIdleInstancesByFilter(ctx context.Context, param map[string]interface{}) (idleLoadbalancers []*clb.IdleLoadBalancer, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = clb.NewDescribeIdleLoadBalancersRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "LoadBalancerRegion" { + request.LoadBalancerRegion = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseClbClient().DescribeIdleLoadBalancers(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()) + + if response == nil || len(response.Response.IdleLoadBalancers) < 1 { + break + } + idleLoadbalancers = append(idleLoadbalancers, response.Response.IdleLoadBalancers...) + if len(response.Response.IdleLoadBalancers) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *ClbService) DescribeClbListenersByTargets(ctx context.Context, param map[string]interface{}) (listenersByTargets []*clb.LBItem, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = clb.NewDescribeLBListenersRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Backends" { + request.Backends = v.([]*clb.LbRsItem) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseClbClient().DescribeLBListeners(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()) + + listenersByTargets = response.Response.LoadBalancers + + return +} + +func (me *ClbService) DescribeClbInstanceByCertId(ctx context.Context, param map[string]interface{}) (instances []*clb.CertIdRelatedWithLoadBalancers, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = clb.NewDescribeLoadBalancerListByCertIdRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "CertIds" { + request.CertIds = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseClbClient().DescribeLoadBalancerListByCertId(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()) + + instances = response.Response.CertSet + + return +} + +func (me *ClbService) DescribeClbInstanceTraffic(ctx context.Context, param map[string]interface{}) (instanceTraffic []*clb.LoadBalancerTraffic, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = clb.NewDescribeLoadBalancerTrafficRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "LoadBalancerRegion" { + request.LoadBalancerRegion = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseClbClient().DescribeLoadBalancerTraffic(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()) + + instanceTraffic = response.Response.LoadBalancerTraffic + + return +} + +func (me *ClbService) DescribeClbInstanceDetailByFilter(ctx context.Context, param map[string]interface{}) (instanceDetail []*clb.LoadBalancerDetail, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = clb.NewDescribeLoadBalancersDetailRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Fields" { + request.Fields = v.([]*string) + } + if k == "TargetType" { + request.TargetType = v.(*string) + } + if k == "Filters" { + request.Filters = v.([]*clb.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseClbClient().DescribeLoadBalancersDetail(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()) + + if response == nil || len(response.Response.LoadBalancerDetailSet) < 1 { + break + } + instanceDetail = append(instanceDetail, response.Response.LoadBalancerDetailSet...) + if len(response.Response.LoadBalancerDetailSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *ClbService) DescribeClbResourcesByFilter(ctx context.Context, param map[string]interface{}) (resources []*clb.ZoneResource, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = clb.NewDescribeResourcesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Filters" { + request.Filters = v.([]*clb.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseClbClient().DescribeResources(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()) + + if response == nil || len(response.Response.ZoneResourceSet) < 1 { + break + } + resources = append(resources, response.Response.ZoneResourceSet...) + if len(response.Response.ZoneResourceSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *ClbService) DescribeClbTargetGroupListByFilter(ctx context.Context, param map[string]interface{}) (targetGroupList []*clb.TargetGroupInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = clb.NewDescribeTargetGroupListRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "TargetGroupIds" { + request.TargetGroupIds = v.([]*string) + } + if k == "Filters" { + request.Filters = v.([]*clb.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseClbClient().DescribeTargetGroupList(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()) + + if response == nil || len(response.Response.TargetGroupSet) < 1 { + break + } + targetGroupList = append(targetGroupList, response.Response.TargetGroupSet...) + if len(response.Response.TargetGroupSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *ClbService) DescribeClbTargetHealthByFilter(ctx context.Context, param map[string]interface{}) (targetHealth []*clb.LoadBalancerHealth, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = clb.NewDescribeTargetHealthRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "LoadBalancerIds" { + request.LoadBalancerIds = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseClbClient().DescribeTargetHealth(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()) + + targetHealth = response.Response.LoadBalancers + + return +} + +func (me *ClbService) SetClbSecurityGroup(ctx context.Context, securityGroup string, lbId string, operation string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := clb.NewSetSecurityGroupForLoadbalancersRequest() + request.SecurityGroup = &securityGroup + request.LoadBalancerIds = []*string{&lbId} + request.OperationType = &operation + + 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.UseClbClient().SetSecurityGroupForLoadbalancers(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 +} +func (me *ClbService) DescribeClbTargetGroupAttachmentsById(ctx context.Context, targetGroups []string, associationsSet map[string]struct{}) (targetGroupAttachments []string, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := clb.NewDescribeTargetGroupsRequest() + request.TargetGroupIds = helper.Strings(targetGroups) + + 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.UseClbClient().DescribeTargetGroups(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()) + + if response == nil || len(response.Response.TargetGroupSet) < 1 { + return + } + + var result []string + for _, item := range response.Response.TargetGroupSet { + groupId := *item.TargetGroupId + for _, associations := range item.AssociatedRule { + info := make([]string, 0) + + if associations.LoadBalancerId != nil { + info = append(info, *associations.LoadBalancerId) + } else { + info = append(info, "null") + } + + if associations.ListenerId != nil { + info = append(info, *associations.ListenerId) + } else { + info = append(info, "null") + } + + info = append(info, groupId) + + if associations.LocationId != nil { + info = append(info, *associations.LocationId) + } else { + info = append(info, "null") + } + + key := strings.Join(info, tccommon.FILED_SP) + if _, ok := associationsSet[key]; ok { + result = append(result, key) + } + } + } + targetGroupAttachments = result + return +} diff --git a/tencentcloud/services/clb/service_tencentcloud_cls.go b/tencentcloud/services/clb/service_tencentcloud_cls.go new file mode 100644 index 0000000000..6d92060116 --- /dev/null +++ b/tencentcloud/services/clb/service_tencentcloud_cls.go @@ -0,0 +1,1315 @@ +package clb + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +func NewClsService(client *connectivity.TencentCloudClient) ClsService { + return ClsService{client: client} +} + +type ClsService struct { + client *connectivity.TencentCloudClient +} + +// cls logset +func (me *ClsService) DescribeClsLogset(ctx context.Context, logsetId string) (logset *cls.LogsetInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cls.NewDescribeLogsetsRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.Filters = append( + request.Filters, + &cls.Filter{ + Key: helper.String("logsetId"), + Values: []*string{&logsetId}, + }, + ) + ratelimit.Check(request.GetAction()) + + var offset int64 = 0 + var pageSize int64 = 100 + instances := make([]*cls.LogsetInfo, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().DescribeLogsets(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.Logsets) < 1 { + break + } + instances = append(instances, response.Response.Logsets...) + if len(response.Response.Logsets) < int(pageSize) { + break + } + offset += pageSize + } + + if len(instances) < 1 { + return + } + logset = instances[0] + + return + +} + +func (me *ClsService) DeleteClsLogsetById(ctx context.Context, logsetId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDeleteLogsetRequest() + request.LogsetId = &logsetId + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().DeleteLogset(request) + if err != nil { + errRet = err + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *ClsService) DescribeClsLogsetByFilter(ctx context.Context, filters map[string]string) (instances []*cls.LogsetInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cls.NewDescribeLogsetsRequest() + ) + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.Filters = make([]*cls.Filter, 0, len(filters)) + for k, v := range filters { + filter := cls.Filter{ + Key: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset int64 = 0 + var pageSize int64 = 100 + instances = make([]*cls.LogsetInfo, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().DescribeLogsets(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.Logsets) < 1 { + break + } + instances = append(instances, response.Response.Logsets...) + if len(response.Response.Logsets) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +// cls topic +func (me *ClsService) DescribeClsTopicByFilter(ctx context.Context, filters map[string]string) (instances []*cls.TopicInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cls.NewDescribeTopicsRequest() + ) + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.Filters = make([]*cls.Filter, 0, len(filters)) + for k, v := range filters { + filter := cls.Filter{ + Key: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset int64 = 0 + var pageSize int64 = 100 + instances = make([]*cls.TopicInfo, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().DescribeTopics(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.Topics) < 1 { + break + } + instances = append(instances, response.Response.Topics...) + if len(response.Response.Topics) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *ClsService) DescribeClsTopicById(ctx context.Context, topicId string) (topic *cls.TopicInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cls.NewDescribeTopicsRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.Filters = []*cls.Filter{ + { + Key: common.StringPtr("topicId"), + Values: []*string{&topicId}, + }, + } + ratelimit.Check(request.GetAction()) + var ( + offset int64 = 0 + pageSize int64 = 100 + instances = make([]*cls.TopicInfo, 0) + ) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().DescribeTopics(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.Topics) < 1 { + break + } + instances = append(instances, response.Response.Topics...) + if len(response.Response.Topics) < int(pageSize) { + break + } + offset += pageSize + } + + if len(instances) < 1 { + return + } + topic = instances[0] + return +} + +func (me *ClsService) DeleteClsTopic(ctx context.Context, id string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDeleteTopicRequest() + request.TopicId = &id + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().DeleteTopic(request) + if err != nil { + errRet = err + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +// cls machine group +func (me *ClsService) DescribeClsMachineGroupByFilter(ctx context.Context, filters map[string]string) (instances []*cls.MachineGroupInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cls.NewDescribeMachineGroupsRequest() + ) + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.Filters = make([]*cls.Filter, 0, len(filters)) + for k, v := range filters { + filter := cls.Filter{ + Key: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset int64 = 0 + var pageSize int64 = 100 + instances = make([]*cls.MachineGroupInfo, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().DescribeMachineGroups(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.MachineGroups) < 1 { + break + } + instances = append(instances, response.Response.MachineGroups...) + if len(response.Response.MachineGroups) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *ClsService) DescribeClsMachineGroupById(ctx context.Context, id string) (machineGroup *cls.MachineGroupInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cls.NewDescribeMachineGroupsRequest() + ) + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.Filters = []*cls.Filter{ + { + Key: common.StringPtr("machineGroupId"), + Values: []*string{&id}, + }, + } + + var offset int64 = 0 + var pageSize int64 = 100 + instances := make([]*cls.MachineGroupInfo, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().DescribeMachineGroups(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.MachineGroups) < 1 { + break + } + instances = append(instances, response.Response.MachineGroups...) + if len(response.Response.MachineGroups) < int(pageSize) { + break + } + offset += pageSize + } + + if len(instances) < 1 { + return + } + machineGroup = instances[0] + return +} + +func (me *ClsService) DeleteClsMachineGroup(ctx context.Context, id string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDeleteMachineGroupRequest() + request.GroupId = &id + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().DeleteMachineGroup(request) + if err != nil { + errRet = err + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *ClsService) DescribeClsMachineGroupByConfigId(ctx context.Context, configId, groupId string) (machineGroup *cls.MachineGroupInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cls.NewDescribeConfigMachineGroupsRequest() + ) + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.ConfigId = &configId + + response, err := me.client.UseClsClient().DescribeConfigMachineGroups(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + instances := response.Response.MachineGroups + + for _, instance := range instances { + if *instance.GroupId == groupId { + machineGroup = instance + break + } + } + + return +} + +// cls cos shipper +func (me *ClsService) DescribeClsCosShippersByFilter(ctx context.Context, filters map[string]string) (instances []*cls.ShipperInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cls.NewDescribeShippersRequest() + ) + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.Filters = make([]*cls.Filter, 0, len(filters)) + for k, v := range filters { + filter := cls.Filter{ + Key: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset uint64 = 0 + var pageSize uint64 = 100 + instances = make([]*cls.ShipperInfo, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().DescribeShippers(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.Shippers) < 1 { + break + } + instances = append(instances, response.Response.Shippers...) + if len(response.Response.Shippers) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *ClsService) DescribeClsCosShipperById(ctx context.Context, shipperId string) (instance *cls.ShipperInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cls.NewDescribeShippersRequest() + ) + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.Filters = []*cls.Filter{ + { + Key: common.StringPtr("shipperId"), + Values: []*string{&shipperId}, + }, + } + + var offset uint64 = 0 + var pageSize uint64 = 100 + instances := make([]*cls.ShipperInfo, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().DescribeShippers(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.Shippers) < 1 { + break + } + instances = append(instances, response.Response.Shippers...) + if len(response.Response.Shippers) < int(pageSize) { + break + } + offset += pageSize + } + + if len(instances) < 1 { + return + } + instance = instances[0] + return +} + +func (me *ClsService) DeleteClsCosShipper(ctx context.Context, id string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDeleteShipperRequest() + request.ShipperId = &id + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().DeleteShipper(request) + if err != nil { + errRet = err + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +// cls config +func (me *ClsService) DescribeClsConfigById(ctx context.Context, configId string) (config *cls.ConfigInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDescribeConfigsRequest() + + filter := &cls.Filter{ + Key: helper.String("configId"), + Values: []*string{&configId}, + } + request.Filters = append(request.Filters, filter) + + 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()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + instances := make([]*cls.ConfigInfo, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseClsClient().DescribeConfigs(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()) + + if response == nil || len(response.Response.Configs) < 1 { + break + } + instances = append(instances, response.Response.Configs...) + if len(response.Response.Configs) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + config = instances[0] + return +} + +func (me *ClsService) DeleteClsConfig(ctx context.Context, id string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDeleteConfigRequest() + request.ConfigId = &id + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().DeleteConfig(request) + if err != nil { + errRet = err + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +// cls config extra +func (me *ClsService) DescribeClsConfigExtraById(ctx context.Context, configExtraId string) (config *cls.ConfigExtraInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDescribeConfigExtrasRequest() + + filter := &cls.Filter{ + Key: helper.String("configExtraId"), + Values: []*string{&configExtraId}, + } + request.Filters = append(request.Filters, filter) + + 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()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*cls.ConfigExtraInfo, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseClsClient().DescribeConfigExtras(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()) + + if response == nil || len(response.Response.Configs) < 1 { + break + } + instances = append(instances, response.Response.Configs...) + if len(response.Response.Configs) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + config = instances[0] + return +} + +func (me *ClsService) DeleteClsConfigExtra(ctx context.Context, id string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDeleteConfigExtraRequest() + request.ConfigExtraId = &id + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().DeleteConfigExtra(request) + if err != nil { + errRet = err + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +// cls index +func (me *ClsService) DeleteClsIndex(ctx context.Context, id string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDeleteIndexRequest() + request.TopicId = &id + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseClsClient().DeleteIndex(request) + if err != nil { + errRet = err + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *ClsService) DescribeClsAlarmById(ctx context.Context, alarmId string) (alarm *cls.AlarmInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDescribeAlarmsRequest() + filter := &cls.Filter{ + Key: helper.String("alarmId"), + Values: []*string{&alarmId}, + } + request.Filters = append(request.Filters, filter) + + 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()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + instances := make([]*cls.AlarmInfo, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseClsClient().DescribeAlarms(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()) + + if response == nil || len(response.Response.Alarms) < 1 { + break + } + instances = append(instances, response.Response.Alarms...) + if len(response.Response.Alarms) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + alarm = instances[0] + return +} + +func (me *ClsService) DeleteClsAlarmById(ctx context.Context, alarmId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDeleteAlarmRequest() + request.AlarmId = &alarmId + + 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.UseClsClient().DeleteAlarm(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 +} + +func (me *ClsService) DescribeClsAlarmNoticeById(ctx context.Context, alarmNoticeId string) (alarmNotice *cls.AlarmNotice, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDescribeAlarmNoticesRequest() + filter := &cls.Filter{ + Key: helper.String("alarmNoticeId"), + Values: []*string{&alarmNoticeId}, + } + request.Filters = append(request.Filters, filter) + + 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()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + instances := make([]*cls.AlarmNotice, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseClsClient().DescribeAlarmNotices(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()) + + if response == nil || len(response.Response.AlarmNotices) < 1 { + break + } + instances = append(instances, response.Response.AlarmNotices...) + if len(response.Response.AlarmNotices) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + alarmNotice = instances[0] + return +} + +func (me *ClsService) DeleteClsAlarmNoticeById(ctx context.Context, alarmNoticeId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDeleteAlarmNoticeRequest() + request.AlarmNoticeId = &alarmNoticeId + + 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.UseClsClient().DeleteAlarmNotice(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 +} + +func (me *ClsService) DescribeClsCkafkaConsumerById(ctx context.Context, topicId string) (ckafkaConsumer *cls.DescribeConsumerResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDescribeConsumerRequest() + request.TopicId = &topicId + + 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.UseClsClient().DescribeConsumer(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()) + + ckafkaConsumer = response.Response + return +} + +func (me *ClsService) DeleteClsCkafkaConsumerById(ctx context.Context, topicId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDeleteConsumerRequest() + request.TopicId = &topicId + + 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.UseClsClient().DeleteConsumer(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 +} + +func (me *ClsService) DescribeClsCosRechargeById(ctx context.Context, topicId string, rechargeId string) (cosRecharge *cls.CosRechargeInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDescribeCosRechargesRequest() + request.TopicId = &topicId + + 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.UseClsClient().DescribeCosRecharges(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()) + + for _, info := range response.Response.Data { + if *info.Id == rechargeId { + cosRecharge = info + break + } + } + return +} + +func (me *ClsService) DescribeClsExportById(ctx context.Context, topicId string, exportId string) (export *cls.ExportInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDescribeExportsRequest() + request.TopicId = &topicId + + 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.UseClsClient().DescribeExports(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()) + + for _, info := range response.Response.Exports { + if *info.ExportId == exportId { + export = info + break + } + } + + return +} + +func (me *ClsService) DeleteClsExportById(ctx context.Context, exportId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDeleteExportRequest() + request.ExportId = &exportId + + 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.UseClsClient().DeleteExport(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 +} + +func (me *ClsService) DescribeClsShipperTasksByFilter(ctx context.Context, param map[string]interface{}) (shipperTasks []*cls.ShipperTaskInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cls.NewDescribeShipperTasksRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "ShipperId" { + request.ShipperId = v.(*string) + } + if k == "StartTime" { + request.StartTime = v.(*int64) + } + if k == "EndTime" { + request.EndTime = v.(*int64) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseClsClient().DescribeShipperTasks(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()) + + shipperTasks = response.Response.Tasks + + return +} + +func (me *ClsService) DescribeClsMachinesByFilter(ctx context.Context, param map[string]interface{}) (machines []*cls.MachineInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cls.NewDescribeMachinesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "GroupId" { + request.GroupId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseClsClient().DescribeMachines(request) + if err != nil { + errRet = err + return + } + + machines = response.Response.Machines + + return +} + +func (me *ClsService) DescribeClsMachineGroupConfigsByFilter(ctx context.Context, param map[string]interface{}) (machineGroupConfigs []*cls.ConfigInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cls.NewDescribeMachineGroupConfigsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "GroupId" { + request.GroupId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseClsClient().DescribeMachineGroupConfigs(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()) + + machineGroupConfigs = response.Response.Configs + return +} + +func (me *ClsService) DescribeClsDataTransformById(ctx context.Context, taskId string) (dataTransform *cls.DataTransformTaskInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDescribeDataTransformInfoRequest() + request.TaskId = &taskId + + 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.UseClsClient().DescribeDataTransformInfo(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()) + + if len(response.Response.DataTransformTaskInfos) < 1 { + return + } + + dataTransform = response.Response.DataTransformTaskInfos[0] + return +} + +func (me *ClsService) DeleteClsDataTransformById(ctx context.Context, taskId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDeleteDataTransformRequest() + request.TaskId = &taskId + + 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.UseClsClient().DeleteDataTransform(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 +} +func (me *ClsService) DescribeClsKafkaRechargeById(ctx context.Context, id string, topic string) (kafkaRecharge *cls.KafkaRechargeInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDescribeKafkaRechargesRequest() + request.Id = &id + request.TopicId = &topic + 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.UseClsClient().DescribeKafkaRecharges(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()) + + if len(response.Response.Infos) < 1 { + return + } + + kafkaRecharge = response.Response.Infos[0] + return +} + +func (me *ClsService) DeleteClsKafkaRechargeById(ctx context.Context, id string, topic string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDeleteKafkaRechargeRequest() + request.Id = &id + request.TopicId = &topic + 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.UseClsClient().DeleteKafkaRecharge(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 +} + +func (me *ClsService) DescribeClsScheduledSqlById(ctx context.Context, taskId string) (scheduledSql *cls.ScheduledSqlTaskInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDescribeScheduledSqlInfoRequest() + request.TaskId = &taskId + + 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.UseClsClient().DescribeScheduledSqlInfo(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()) + + if len(response.Response.ScheduledSqlTaskInfos) < 1 { + return + } + + scheduledSql = response.Response.ScheduledSqlTaskInfos[0] + return +} + +func (me *ClsService) DeleteClsScheduledSqlById(ctx context.Context, taskId string, srcTopicId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cls.NewDeleteScheduledSqlRequest() + request.TaskId = &taskId + request.SrcTopicId = &srcTopicId + 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.UseClsClient().DeleteScheduledSql(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 +} diff --git a/tencentcloud/services/clb/service_tencentcloud_ssl.go b/tencentcloud/services/clb/service_tencentcloud_ssl.go new file mode 100644 index 0000000000..084aaad408 --- /dev/null +++ b/tencentcloud/services/clb/service_tencentcloud_ssl.go @@ -0,0 +1,247 @@ +package clb + +import ( + "context" + "errors" + "fmt" + "log" + "strconv" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + ssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss/v20180426" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +type SslService struct { + client *connectivity.TencentCloudClient +} + +func (me *SslService) CreateCertificate(ctx context.Context, certType, cert, name string, projectId int, key *string) (id string, err error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseSslClient() + + createRequest := ssl.NewUploadCertRequest() + createRequest.Cert = &cert + createRequest.CertType = &certType + createRequest.ProjectId = helper.String(strconv.Itoa(projectId)) + createRequest.ModuleType = helper.String(SSL_MODULE_TYPE) + createRequest.Alias = &name + createRequest.Key = key + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(createRequest.GetAction()) + + response, err := client.UploadCert(createRequest) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, createRequest.GetAction(), createRequest.ToJsonString(), err) + return tccommon.RetryError(err) + } + + if response.Response.Id == nil { + err := fmt.Errorf("api[%s] return id is nil", createRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + id = *response.Response.Id + return nil + }); err != nil { + log.Printf("[CRITAL]%s create certificate failed, reason: %v", logId, err) + return "", err + } + + describeRequest := ssl.NewDescribeCertListRequest() + describeRequest.ModuleType = helper.String(SSL_MODULE_TYPE) + describeRequest.Id = &id + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(describeRequest.GetAction()) + + response, err := client.DescribeCertList(describeRequest) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, describeRequest.GetAction(), describeRequest.ToJsonString(), err) + return tccommon.RetryError(err) + } + + var certificate *ssl.SSLCertificate + for _, c := range response.Response.CertificateSet { + if c.Id == nil { + err := fmt.Errorf("api[%s] certificate id is nil", describeRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *c.Id == id { + certificate = c + break + } + } + + if certificate == nil { + err := fmt.Errorf("api[%s] certificate not found", describeRequest.GetAction()) + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + + if certificate.Status == nil { + err := fmt.Errorf("api[%s] certificate status is nil", describeRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *certificate.Status != SSL_STATUS_AVAILABLE { + err := fmt.Errorf("certificate is not available, status is %d", *certificate.Status) + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s create certificate failed, reason: %v", logId, err) + return "", err + } + + return +} + +func (me *SslService) DescribeCertificates(ctx context.Context, id, name, certType *string) (certificates []*ssl.SSLCertificate, err error) { + logId := tccommon.GetLogId(ctx) + + request := ssl.NewDescribeCertListRequest() + request.ModuleType = helper.String(SSL_MODULE_TYPE) + request.SearchKey = name + request.Id = id + request.CertType = certType + request.WithCert = helper.String(SSL_WITH_CERT) + + var offset uint64 + + request.Offset = &offset + request.Limit = helper.IntUint64(20) + + // run loop at least once + count := 20 + for count == 20 { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseSslClient().DescribeCertList(request) + if err != nil { + count = 0 + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + count = len(response.Response.CertificateSet) + certificates = append(certificates, response.Response.CertificateSet...) + + return nil + }); err != nil { + log.Printf("[CRITAL]%s read certificates failed, reason: %v", logId, err) + return nil, err + } + + offset += uint64(count) + } + + return +} + +func (me *SslService) DeleteCertificate(ctx context.Context, id string) error { + logId := tccommon.GetLogId(ctx) + client := me.client.UseSslClient() + + deleteRequest := ssl.NewDeleteCertRequest() + deleteRequest.ModuleType = helper.String(SSL_MODULE_TYPE) + deleteRequest.Id = &id + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(deleteRequest.GetAction()) + + if _, err := client.DeleteCert(deleteRequest); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, deleteRequest.GetAction(), deleteRequest.ToJsonString(), err) + return tccommon.RetryError(err) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete certificate failed, reason: %v", logId, err) + return err + } + + describeRequest := ssl.NewDescribeCertListRequest() + describeRequest.ModuleType = helper.String(SSL_MODULE_TYPE) + describeRequest.Id = &id + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(describeRequest.GetAction()) + + response, err := client.DescribeCertList(describeRequest) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, describeRequest.GetAction(), describeRequest.ToJsonString(), err) + return tccommon.RetryError(err) + } + + for _, c := range response.Response.CertificateSet { + if c.Id == nil { + err := fmt.Errorf("api[%s] certificate id is nil", describeRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *c.Id == id { + err := errors.New("certificate still exists") + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete certificate failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *SslService) CheckCertificateType(ctx context.Context, certId string, checkType string) (bool, error) { + + //get certificate by id + + certificates, err := me.DescribeCertificates(ctx, &certId, nil, nil) + if err != nil { + return false, err + } + + var certificate *ssl.SSLCertificate + for _, c := range certificates { + if c.Id == nil { + return false, errors.New("certificate id is nil") + } + + if *c.Id == certId { + certificate = c + break + } + } + + if certificate != nil && *certificate.CertType == checkType { + return true, nil + } else { + if certificate == nil { + return false, fmt.Errorf("certificate id %s is not found", certId) + } + return false, nil + } + +} diff --git a/tencentcloud/services/clb/service_tencentcloud_tag.go b/tencentcloud/services/clb/service_tencentcloud_tag.go new file mode 100644 index 0000000000..0930d5dafe --- /dev/null +++ b/tencentcloud/services/clb/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package clb + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 298e2562519bb9a3d1a18efa1e683c05637a6593 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 13:56:39 +0800 Subject: [PATCH 18/31] chore: remove unused code --- tencentcloud/extension_cdh.go | 24 - tencentcloud/extension_cdn.go | 111 -- tencentcloud/extension_cdwch.go | 61 - tencentcloud/extension_cfw.go | 517 ------ tencentcloud/extension_ckafka.go | 90 - tencentcloud/extension_cnn.go | 16 - tencentcloud/service_tencentcloud_apm.go | 67 - tencentcloud/service_tencentcloud_bi.go | 457 ----- tencentcloud/service_tencentcloud_cat.go | 342 ---- tencentcloud/service_tencentcloud_ccn.go | 682 ------- tencentcloud/service_tencentcloud_cdh.go | 170 -- tencentcloud/service_tencentcloud_cdn.go | 347 ---- tencentcloud/service_tencentcloud_cdwch.go | 685 ------- tencentcloud/service_tencentcloud_cdwpg.go | 86 - tencentcloud/service_tencentcloud_cfw.go | 846 --------- tencentcloud/service_tencentcloud_chdfs.go | 464 ----- tencentcloud/service_tencentcloud_ci.go | 312 ---- tencentcloud/service_tencentcloud_ciam.go | 156 -- tencentcloud/service_tencentcloud_ckafka.go | 1800 ------------------- 19 files changed, 7233 deletions(-) delete mode 100644 tencentcloud/extension_cdh.go delete mode 100644 tencentcloud/extension_cdn.go delete mode 100644 tencentcloud/extension_cdwch.go delete mode 100644 tencentcloud/extension_cfw.go delete mode 100644 tencentcloud/extension_ckafka.go delete mode 100644 tencentcloud/extension_cnn.go delete mode 100644 tencentcloud/service_tencentcloud_apm.go delete mode 100644 tencentcloud/service_tencentcloud_bi.go delete mode 100644 tencentcloud/service_tencentcloud_cat.go delete mode 100644 tencentcloud/service_tencentcloud_ccn.go delete mode 100644 tencentcloud/service_tencentcloud_cdh.go delete mode 100644 tencentcloud/service_tencentcloud_cdn.go delete mode 100644 tencentcloud/service_tencentcloud_cdwch.go delete mode 100644 tencentcloud/service_tencentcloud_cdwpg.go delete mode 100644 tencentcloud/service_tencentcloud_cfw.go delete mode 100644 tencentcloud/service_tencentcloud_chdfs.go delete mode 100644 tencentcloud/service_tencentcloud_ci.go delete mode 100644 tencentcloud/service_tencentcloud_ciam.go delete mode 100644 tencentcloud/service_tencentcloud_ckafka.go diff --git a/tencentcloud/extension_cdh.go b/tencentcloud/extension_cdh.go deleted file mode 100644 index 89a20f383a..0000000000 --- a/tencentcloud/extension_cdh.go +++ /dev/null @@ -1,24 +0,0 @@ -package tencentcloud - -const ( - CDH_CHARGE_TYPE_PREPAID = "PREPAID" - - CDH_PREPAID_RENEW_FLAG_NOTIFY_AND_AUTO_RENEW = "NOTIFY_AND_AUTO_RENEW" - CDH_PREPAID_RENEW_FLAG_NOTIFY_AND_MANUAL_RENEW = "NOTIFY_AND_MANUAL_RENEW" - CDH_PREPAID_RENEW_FLAG_DISABLE_NOTIFY_AND_MANUAL_RENEW = "DISABLE_NOTIFY_AND_MANUAL_RENEW" - - CDH_HOST_STATE_PENDING = "PENDING" - CDH_HOST_STATE_LAUNCH_FAILURE = "LAUNCH_FAILURE" - CDH_HOST_RUNNING = "RUNNING" - CDH_HOST_EXPIRED = "EXPIRED" - - CDH_ZONE_SOLD_OUT_FOR_SPECIFIED_INSTANCE_ERROR = "ResourceInsufficient.ZoneSoldOutForSpecifiedInstance" -) - -var CDH_PREPAID_PERIOD = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36} - -var CDH_PREPAID_RENEW_FLAG = []string{ - CDH_PREPAID_RENEW_FLAG_NOTIFY_AND_AUTO_RENEW, - CDH_PREPAID_RENEW_FLAG_NOTIFY_AND_MANUAL_RENEW, - CDH_PREPAID_RENEW_FLAG_DISABLE_NOTIFY_AND_MANUAL_RENEW, -} diff --git a/tencentcloud/extension_cdn.go b/tencentcloud/extension_cdn.go deleted file mode 100644 index fffe4091af..0000000000 --- a/tencentcloud/extension_cdn.go +++ /dev/null @@ -1,111 +0,0 @@ -package tencentcloud - -const ( - CDN_SERVICE_TYPE_WEB = "web" - CDN_SERVICE_TYPE_DOWNLOAD = "download" - CDN_SERVICE_TYPE_MEDIA = "media" - CDN_SERVICE_TYPE_HYBIRD = "hybrid" - CDN_SERVICE_TYPE_DYNAMIC = "dynamic" - - CDN_ORIGIN_TYPE_DOMAIN = "domain" - CDN_ORIGIN_TYPE_COS = "cos" - CDN_ORIGIN_TYPE_IP = "ip" - CDN_ORIGIN_TYPE_IPV6 = "ipv6" - CDN_ORIGIN_TYPE_IP_IPV6 = "ip_ipv6" - - CDN_ORIGIN_PULL_PROTOCOL_HTTP = "http" - CDN_ORIGIN_PULL_PROTOCOL_HTTPS = "https" - CDN_ORIGIN_PULL_PROTOCOL_FOLLOW = "follow" - - CDN_AREA_MAINLAND = "mainland" - CDN_AREA_OVERSEAS = "overseas" - CDN_AREA_GLOBAL = "global" - - CDN_SWITCH_ON = "on" - CDN_SWITCH_OFF = "off" - - CDN_DOMAIN_STATUS_ONLINE = "online" - CDN_DOMAIN_STATUS_OFFLINE = "offline" - CDN_DOMAIN_STATUS_PROCESSING = "processing" - - CDN_SERVICE_NAME = "cdn" - CDN_RESOURCE_NAME_DOMAIN = "domain" - - CDN_HOST_NOT_FOUND = "ResourceNotFound.CdnHostNotExists" - CDN_HOST_EXISTS = "ResourceInUse.CdnHostExists" - CDN_DOMAIN_CONFIG_ERROR = "FailedOperation.CdnConfigError" - - CDN_RULE_TYPE_ALL = "all" - CDN_RULE_TYPE_FILE = "file" - CDN_RULE_TYPE_DIRECTORY = "directory" - CDN_RULE_TYPE_PATH = "path" - CDN_RULE_TYPE_INDEX = "index" - CDN_RULE_TYPE_DEFAULT = "default" - - CDN_RULE_PATH = "no max-age" -) - -var CDN_SERVICE_TYPE = []string{ - CDN_SERVICE_TYPE_WEB, - CDN_SERVICE_TYPE_DOWNLOAD, - CDN_SERVICE_TYPE_MEDIA, - CDN_SERVICE_TYPE_HYBIRD, - CDN_SERVICE_TYPE_DYNAMIC, -} - -var CDN_ORIGIN_TYPE = []string{ - CDN_ORIGIN_TYPE_DOMAIN, - CDN_ORIGIN_TYPE_COS, - CDN_ORIGIN_TYPE_IP, - CDN_ORIGIN_TYPE_IPV6, - CDN_ORIGIN_TYPE_IP_IPV6, -} - -var CDN_BACKUP_ORIGIN_TYPE = []string{ - CDN_ORIGIN_TYPE_IP, - CDN_ORIGIN_TYPE_DOMAIN, -} - -var CDN_ORIGIN_PULL_PROTOCOL = []string{ - CDN_ORIGIN_PULL_PROTOCOL_HTTP, - CDN_ORIGIN_PULL_PROTOCOL_HTTPS, - CDN_ORIGIN_PULL_PROTOCOL_FOLLOW, -} - -var CDN_FORCE_REDIRECT_TYPE = []string{ - CDN_ORIGIN_PULL_PROTOCOL_HTTP, - CDN_ORIGIN_PULL_PROTOCOL_HTTPS, -} - -var CDN_AREA = []string{ - CDN_AREA_MAINLAND, - CDN_AREA_OVERSEAS, - CDN_AREA_GLOBAL, -} - -var CDN_SWITCH = []string{ - CDN_SWITCH_OFF, - CDN_SWITCH_ON, -} - -var CDN_HTTPS_SWITCH = []string{ - CDN_DOMAIN_STATUS_ONLINE, - CDN_DOMAIN_STATUS_OFFLINE, - CDN_DOMAIN_STATUS_PROCESSING, -} - -var CDN_RULE_TYPE = []string{ - CDN_RULE_TYPE_ALL, - CDN_RULE_TYPE_FILE, - CDN_RULE_TYPE_DIRECTORY, - CDN_RULE_TYPE_PATH, - CDN_RULE_TYPE_INDEX, - CDN_RULE_TYPE_DEFAULT, -} - -var CDN_HEADER_RULE = []string{ - CDN_RULE_TYPE_ALL, - CDN_RULE_TYPE_FILE, - CDN_RULE_TYPE_DIRECTORY, - CDN_RULE_TYPE_PATH, -} diff --git a/tencentcloud/extension_cdwch.go b/tencentcloud/extension_cdwch.go deleted file mode 100644 index 0b4be9e10d..0000000000 --- a/tencentcloud/extension_cdwch.go +++ /dev/null @@ -1,61 +0,0 @@ -package tencentcloud - -import cdwch "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" - -const ( - CDWCH_PAY_MODE_HOUR = "hour" - CDWCH_PAY_MODE_PREPAY = "prepay" -) - -const ( - CDWCH_CHARGE_TYPE_PREPAID = "PREPAID" - CDWCH_CHARGE_TYPE_POSTPAID_BY_HOUR = "POSTPAID_BY_HOUR" -) - -const ( - NODE_TYPE_CLICKHOUSE = "DATA" - NODE_TYPE_ZOOKEEPER = "COMMON" -) - -const ( - OPERATION_TYPE_CREATE = "create" - OPERATION_TYPE_UPDATE = "update" -) - -const ( - SCHEDULE_TYPE_DATA = "data" - SCHEDULE_TYPE_META = "meta" -) - -const ( - ACTION_ALTER_CK_USER_ADD_SYSTEM_USER = "AddSystemUser" - ACTION_ALTER_CK_USER_UPDATE_SYSTEM_USER = "UpdateSystemUser" -) - -const ( - DESCRIBE_CK_SQL_APIS_GET_SYSTEM_USERS = "GetSystemUsers" - DESCRIBE_CK_SQL_APIS_REVOKE_CLUSTER_USER = "RevokeClusterUser" - DESCRIBE_CK_SQL_APIS_DELETE_SYSTEM_USER = "DeleteSystemUser" -) - -var PAY_MODE_TO_CHARGE_TYPE = map[string]string{ - CDWCH_PAY_MODE_HOUR: CDWCH_CHARGE_TYPE_POSTPAID_BY_HOUR, - CDWCH_PAY_MODE_PREPAY: CDWCH_CHARGE_TYPE_PREPAID, -} - -type AccountInfo struct { - InstanceId string `json:"InstanceId"` - UserName string `json:"UserName"` - Describe string `json:"Describe"` - Type string `json:"Type"` - Cluster string `json:"Cluster"` -} - -type AccountPermission struct { - InstanceId string `json:"InstanceId"` - Cluster string `json:"Cluster"` - UserName string `json:"UserName"` - AllDatabase bool `json:"AllDatabase"` - GlobalPrivileges []string `json:"GlobalPrivileges"` - DatabasePrivilegeList []*cdwch.DatabasePrivilegeInfo `json:"DatabasePrivilegeList"` -} diff --git a/tencentcloud/extension_cfw.go b/tencentcloud/extension_cfw.go deleted file mode 100644 index 6792d3f146..0000000000 --- a/tencentcloud/extension_cfw.go +++ /dev/null @@ -1,517 +0,0 @@ -package tencentcloud - -const ( - ADDRESS_TEMPLATE_TYPE_1 = 1 - ADDRESS_TEMPLATE_TYPE_5 = 5 -) - -var ADDRESS_TEMPLATE_TYPE = []int{ - ADDRESS_TEMPLATE_TYPE_1, - ADDRESS_TEMPLATE_TYPE_5, -} - -const ( - RULE_TYPE_1 = 1 - RULE_TYPE_2 = 2 -) - -var RULE_TYPE = []int{ - RULE_TYPE_1, - RULE_TYPE_2, -} - -const ( - DIRECTION_0 = "0" - DIRECTION_1 = "1" - DIRECTION_3 = "3" -) - -var DIRECTION = []string{ - DIRECTION_0, - DIRECTION_1, - DIRECTION_3, -} - -const ( - MODE_0 = 0 - MODE_1 = 1 -) - -var MODE = []int{ - MODE_0, - MODE_1, -} - -const ( - CROSS_A_ZONE_0 = 0 - CROSS_A_ZONE_1 = 1 -) - -var CROSS_A_ZONE = []int{ - CROSS_A_ZONE_0, - CROSS_A_ZONE_1, -} - -var ZONE_MAP_EN2CN = map[string]string{ - "ap-guangzhou-1": "广州一区", - "ap-guangzhou-2": "广州二区", - "ap-guangzhou-3": "广州三区", - "ap-guangzhou-4": "广州四区", - "ap-guangzhou-5": "广州五区", - "ap-guangzhou-6": "广州六区", - "ap-guangzhou-7": "广州七区", - "ap-guangzhou-8": "广州八区", - "ap-guangzhou-9": "广州九区", - "ap-shenzhen-fsi-1": "深圳金融一区", - "ap-shenzhen-fsi-2": "深圳金融二区", - "ap-shenzhen-fsi-3": "深圳金融三区", - "ap-shenzhen-fsi-4": "深圳金融四区", - "ap-shenzhen-fsi-5": "深圳金融五区", - "ap-shenzhen-fsi-6": "深圳金融六区", - "ap-shenzhen-fsi-7": "深圳金融七区", - "ap-shenzhen-fsi-8": "深圳金融八区", - "ap-shenzhen-fsi-9": "深圳金融九区", - "ap-shanghai-1": "上海一区", - "ap-shanghai-2": "上海二区", - "ap-shanghai-3": "上海三区", - "ap-shanghai-4": "上海四区", - "ap-shanghai-5": "上海五区", - "ap-shanghai-6": "上海六区", - "ap-shanghai-7": "上海七区", - "ap-shanghai-8": "上海八区", - "ap-shanghai-9": "上海九区", - "ap-shanghai-fsi-1": "上海金融一区", - "ap-shanghai-fsi-2": "上海金融二区", - "ap-shanghai-fsi-3": "上海金融三区", - "ap-shanghai-fsi-4": "上海金融四区", - "ap-shanghai-fsi-5": "上海金融五区", - "ap-shanghai-fsi-6": "上海金融六区", - "ap-shanghai-fsi-7": "上海金融七区", - "ap-shanghai-fsi-8": "上海金融八区", - "ap-shanghai-fsi-9": "上海金融九区", - "ap-nanjing-1": "南京一区", - "ap-nanjing-2": "南京二区", - "ap-nanjing-3": "南京三区", - "ap-nanjing-4": "南京四区", - "ap-nanjing-5": "南京五区", - "ap-nanjing-6": "南京六区", - "ap-nanjing-7": "南京七区", - "ap-nanjing-8": "南京八区", - "ap-nanjing-9": "南京九区", - "ap-beijing-1": "北京一区", - "ap-beijing-2": "北京二区", - "ap-beijing-3": "北京三区", - "ap-beijing-4": "北京四区", - "ap-beijing-5": "北京五区", - "ap-beijing-6": "北京六区", - "ap-beijing-7": "北京七区", - "ap-beijing-8": "北京八区", - "ap-beijing-9": "北京九区", - "ap-chengdu-1": "成都一区", - "ap-chengdu-2": "成都二区", - "ap-chengdu-3": "成都三区", - "ap-chengdu-4": "成都四区", - "ap-chengdu-5": "成都五区", - "ap-chengdu-6": "成都六区", - "ap-chengdu-7": "成都七区", - "ap-chengdu-8": "成都八区", - "ap-chengdu-9": "成都九区", - "ap-chongqing-1": "重庆一区", - "ap-chongqing-2": "重庆二区", - "ap-chongqing-3": "重庆三区", - "ap-chongqing-4": "重庆四区", - "ap-chongqing-5": "重庆五区", - "ap-chongqing-6": "重庆六区", - "ap-chongqing-7": "重庆七区", - "ap-chongqing-8": "重庆八区", - "ap-chongqing-9": "重庆九区", - "ap-hongkong-1": "香港一区", - "ap-hongkong-2": "香港二区", - "ap-hongkong-3": "香港三区", - "ap-hongkong-4": "香港四区", - "ap-hongkong-5": "香港五区", - "ap-hongkong-6": "香港六区", - "ap-hongkong-7": "香港七区", - "ap-hongkong-8": "香港八区", - "ap-hongkong-9": "香港九区", - "ap-singapore-1": "新加坡一区", - "ap-singapore-2": "新加坡二区", - "ap-singapore-3": "新加坡三区", - "ap-singapore-4": "新加坡四区", - "ap-singapore-5": "新加坡五区", - "ap-singapore-6": "新加坡六区", - "ap-singapore-7": "新加坡七区", - "ap-singapore-8": "新加坡八区", - "ap-singapore-9": "新加坡九区", - "ap-seoul-1": "首尔一区", - "ap-seoul-2": "首尔二区", - "ap-seoul-3": "首尔三区", - "ap-seoul-4": "首尔四区", - "ap-seoul-5": "首尔五区", - "ap-seoul-6": "首尔六区", - "ap-seoul-7": "首尔七区", - "ap-seoul-8": "首尔八区", - "ap-seoul-9": "首尔九区", - "ap-tokyo-1": "东京一区", - "ap-tokyo-2": "东京二区", - "ap-tokyo-3": "东京三区", - "ap-tokyo-4": "东京四区", - "ap-tokyo-5": "东京五区", - "ap-tokyo-6": "东京六区", - "ap-tokyo-7": "东京七区", - "ap-tokyo-8": "东京八区", - "ap-tokyo-9": "东京九区", - "ap-mumbai-1": "孟买一区", - "ap-mumbai-2": "孟买二区", - "ap-mumbai-3": "孟买三区", - "ap-mumbai-4": "孟买四区", - "ap-mumbai-5": "孟买五区", - "ap-mumbai-6": "孟买六区", - "ap-mumbai-7": "孟买七区", - "ap-mumbai-8": "孟买八区", - "ap-mumbai-9": "孟买九区", - "ap-bangkok-1": "曼谷一区", - "ap-bangkok-2": "曼谷二区", - "ap-bangkok-3": "曼谷三区", - "ap-bangkok-4": "曼谷四区", - "ap-bangkok-5": "曼谷五区", - "ap-bangkok-6": "曼谷六区", - "ap-bangkok-7": "曼谷七区", - "ap-bangkok-8": "曼谷八区", - "ap-bangkok-9": "曼谷九区", - "ap-jakarta-1": "雅加达一区", - "ap-jakarta-2": "雅加达二区", - "ap-jakarta-3": "雅加达三区", - "ap-jakarta-4": "雅加达四区", - "ap-jakarta-5": "雅加达五区", - "ap-jakarta-6": "雅加达六区", - "ap-jakarta-7": "雅加达七区", - "ap-jakarta-8": "雅加达八区", - "sa-saopaulo-1": "圣保罗一区", - "sa-saopaulo-2": "圣保罗二区", - "sa-saopaulo-3": "圣保罗三区", - "sa-saopaulo-4": "圣保罗四区", - "sa-saopaulo-5": "圣保罗五区", - "sa-saopaulo-6": "圣保罗六区", - "sa-saopaulo-7": "圣保罗七区", - "sa-saopaulo-8": "圣保罗八区", - "na-toronto-1": "多伦多一区", - "na-toronto-2": "多伦多二区", - "na-toronto-3": "多伦多三区", - "na-toronto-4": "多伦多四区", - "na-toronto-5": "多伦多五区", - "na-toronto-6": "多伦多六区", - "na-toronto-7": "多伦多七区", - "na-toronto-8": "多伦多八区", - "na-toronto-9": "多伦多九区", - "na-siliconvalley-1": "硅谷一区", - "na-siliconvalley-2": "硅谷二区", - "na-siliconvalley-3": "硅谷三区", - "na-siliconvalley-4": "硅谷四区", - "na-siliconvalley-5": "硅谷五区", - "na-siliconvalley-6": "硅谷六区", - "na-siliconvalley-7": "硅谷七区", - "na-siliconvalley-8": "硅谷八区", - "na-siliconvalley-9": "硅谷九区", - "na-ashburn-1": "弗吉尼亚一区", - "na-ashburn-2": "弗吉尼亚二区", - "na-ashburn-3": "弗吉尼亚三区", - "na-ashburn-4": "弗吉尼亚四区", - "na-ashburn-5": "弗吉尼亚五区", - "na-ashburn-6": "弗吉尼亚六区", - "na-ashburn-7": "弗吉尼亚七区", - "na-ashburn-8": "弗吉尼亚八区", - "na-ashburn-9": "弗吉尼亚九区", - "eu-frankfurt-1": "法兰克福一区", - "eu-frankfurt-2": "法兰克福二区", - "eu-frankfurt-3": "法兰克福三区", - "eu-frankfurt-4": "法兰克福四区", - "eu-frankfurt-5": "法兰克福五区", - "eu-frankfurt-6": "法兰克福六区", - "eu-frankfurt-7": "法兰克福七区", - "eu-frankfurt-8": "法兰克福八区", - "eu-frankfurt-9": "法兰克福九区", - "eu-moscow-1": "莫斯科一区", - "eu-moscow-2": "莫斯科二区", - "eu-moscow-3": "莫斯科三区", - "eu-moscow-4": "莫斯科四区", - "eu-moscow-5": "莫斯科五区", - "eu-moscow-6": "莫斯科六区", - "eu-moscow-7": "莫斯科七区", - "eu-moscow-8": "莫斯科八区", - "eu-moscow-9": "莫斯科九区", - "ap-shanghai-adc-1": "上海自动驾驶云一区", - "ap-taipei-1": "中国台北一区", - "ap-taipei-2": "中国台北二区", - "ap-taipei-3": "中国台北三区", - "ap-taipei-4": "中国台北四区", - "ap-taipei-5": "中国台北五区", - "ap-taipei-6": "中国台北六区", -} - -var ZONE_MAP_CN2EN = map[string]string{ - "广州一区": "ap-guangzhou-1", - "广州二区": "ap-guangzhou-2", - "广州三区": "ap-guangzhou-3", - "广州四区": "ap-guangzhou-4", - "广州五区": "ap-guangzhou-5", - "广州六区": "ap-guangzhou-6", - "广州七区": "ap-guangzhou-7", - "广州八区": "ap-guangzhou-8", - "广州九区": "ap-guangzhou-9", - "深圳金融一区": "ap-shenzhen-fsi-1", - "深圳金融二区": "ap-shenzhen-fsi-2", - "深圳金融三区": "ap-shenzhen-fsi-3", - "深圳金融四区": "ap-shenzhen-fsi-4", - "深圳金融五区": "ap-shenzhen-fsi-5", - "深圳金融六区": "ap-shenzhen-fsi-6", - "深圳金融七区": "ap-shenzhen-fsi-7", - "深圳金融八区": "ap-shenzhen-fsi-8", - "深圳金融九区": "ap-shenzhen-fsi-9", - "上海一区": "ap-shanghai-1", - "上海二区": "ap-shanghai-2", - "上海三区": "ap-shanghai-3", - "上海四区": "ap-shanghai-4", - "上海五区": "ap-shanghai-5", - "上海六区": "ap-shanghai-6", - "上海七区": "ap-shanghai-7", - "上海八区": "ap-shanghai-8", - "上海九区": "ap-shanghai-9", - "上海金融一区": "ap-shanghai-fsi-1", - "上海金融二区": "ap-shanghai-fsi-2", - "上海金融三区": "ap-shanghai-fsi-3", - "上海金融四区": "ap-shanghai-fsi-4", - "上海金融五区": "ap-shanghai-fsi-5", - "上海金融六区": "ap-shanghai-fsi-6", - "上海金融七区": "ap-shanghai-fsi-7", - "上海金融八区": "ap-shanghai-fsi-8", - "上海金融九区": "ap-shanghai-fsi-9", - "南京一区": "ap-nanjing-1", - "南京二区": "ap-nanjing-2", - "南京三区": "ap-nanjing-3", - "南京四区": "ap-nanjing-4", - "南京五区": "ap-nanjing-5", - "南京六区": "ap-nanjing-6", - "南京七区": "ap-nanjing-7", - "南京八区": "ap-nanjing-8", - "南京九区": "ap-nanjing-9", - "北京一区": "ap-beijing-1", - "北京二区": "ap-beijing-2", - "北京三区": "ap-beijing-3", - "北京四区": "ap-beijing-4", - "北京五区": "ap-beijing-5", - "北京六区": "ap-beijing-6", - "北京七区": "ap-beijing-7", - "北京八区": "ap-beijing-8", - "北京九区": "ap-beijing-9", - "成都一区": "ap-chengdu-1", - "成都二区": "ap-chengdu-2", - "成都三区": "ap-chengdu-3", - "成都四区": "ap-chengdu-4", - "成都五区": "ap-chengdu-5", - "成都六区": "ap-chengdu-6", - "成都七区": "ap-chengdu-7", - "成都八区": "ap-chengdu-8", - "成都九区": "ap-chengdu-9", - "重庆一区": "ap-chongqing-1", - "重庆二区": "ap-chongqing-2", - "重庆三区": "ap-chongqing-3", - "重庆四区": "ap-chongqing-4", - "重庆五区": "ap-chongqing-5", - "重庆六区": "ap-chongqing-6", - "重庆七区": "ap-chongqing-7", - "重庆八区": "ap-chongqing-8", - "重庆九区": "ap-chongqing-9", - "香港一区": "ap-hongkong-1", - "香港二区": "ap-hongkong-2", - "香港三区": "ap-hongkong-3", - "香港四区": "ap-hongkong-4", - "香港五区": "ap-hongkong-5", - "香港六区": "ap-hongkong-6", - "香港七区": "ap-hongkong-7", - "香港八区": "ap-hongkong-8", - "香港九区": "ap-hongkong-9", - "新加坡一区": "ap-singapore-1", - "新加坡二区": "ap-singapore-2", - "新加坡三区": "ap-singapore-3", - "新加坡四区": "ap-singapore-4", - "新加坡五区": "ap-singapore-5", - "新加坡六区": "ap-singapore-6", - "新加坡七区": "ap-singapore-7", - "新加坡八区": "ap-singapore-8", - "新加坡九区": "ap-singapore-9", - "首尔一区": "ap-seoul-1", - "首尔二区": "ap-seoul-2", - "首尔三区": "ap-seoul-3", - "首尔四区": "ap-seoul-4", - "首尔五区": "ap-seoul-5", - "首尔六区": "ap-seoul-6", - "首尔七区": "ap-seoul-7", - "首尔八区": "ap-seoul-8", - "首尔九区": "ap-seoul-9", - "东京一区": "ap-tokyo-1", - "东京二区": "ap-tokyo-2", - "东京三区": "ap-tokyo-3", - "东京四区": "ap-tokyo-4", - "东京五区": "ap-tokyo-5", - "东京六区": "ap-tokyo-6", - "东京七区": "ap-tokyo-7", - "东京八区": "ap-tokyo-8", - "东京九区": "ap-tokyo-9", - "孟买一区": "ap-mumbai-1", - "孟买二区": "ap-mumbai-2", - "孟买三区": "ap-mumbai-3", - "孟买四区": "ap-mumbai-4", - "孟买五区": "ap-mumbai-5", - "孟买六区": "ap-mumbai-6", - "孟买七区": "ap-mumbai-7", - "孟买八区": "ap-mumbai-8", - "孟买九区": "ap-mumbai-9", - "曼谷一区": "ap-bangkok-1", - "曼谷二区": "ap-bangkok-2", - "曼谷三区": "ap-bangkok-3", - "曼谷四区": "ap-bangkok-4", - "曼谷五区": "ap-bangkok-5", - "曼谷六区": "ap-bangkok-6", - "曼谷七区": "ap-bangkok-7", - "曼谷八区": "ap-bangkok-8", - "曼谷九区": "ap-bangkok-9", - "雅加达一区": "ap-jakarta-1", - "雅加达二区": "ap-jakarta-2", - "雅加达三区": "ap-jakarta-3", - "雅加达四区": "ap-jakarta-4", - "雅加达五区": "ap-jakarta-5", - "雅加达六区": "ap-jakarta-6", - "雅加达七区": "ap-jakarta-7", - "雅加达八区": "ap-jakarta-8", - "圣保罗一区": "sa-saopaulo-1", - "圣保罗二区": "sa-saopaulo-2", - "圣保罗三区": "sa-saopaulo-3", - "圣保罗四区": "sa-saopaulo-4", - "圣保罗五区": "sa-saopaulo-5", - "圣保罗六区": "sa-saopaulo-6", - "圣保罗七区": "sa-saopaulo-7", - "圣保罗八区": "sa-saopaulo-8", - "多伦多一区": "na-toronto-1", - "多伦多二区": "na-toronto-2", - "多伦多三区": "na-toronto-3", - "多伦多四区": "na-toronto-4", - "多伦多五区": "na-toronto-5", - "多伦多六区": "na-toronto-6", - "多伦多七区": "na-toronto-7", - "多伦多八区": "na-toronto-8", - "多伦多九区": "na-toronto-9", - "硅谷一区": "na-siliconvalley-1", - "硅谷二区": "na-siliconvalley-2", - "硅谷三区": "na-siliconvalley-3", - "硅谷四区": "na-siliconvalley-4", - "硅谷五区": "na-siliconvalley-5", - "硅谷六区": "na-siliconvalley-6", - "硅谷七区": "na-siliconvalley-7", - "硅谷八区": "na-siliconvalley-8", - "硅谷九区": "na-siliconvalley-9", - "弗吉尼亚一区": "na-ashburn-1", - "弗吉尼亚二区": "na-ashburn-2", - "弗吉尼亚三区": "na-ashburn-3", - "弗吉尼亚四区": "na-ashburn-4", - "弗吉尼亚五区": "na-ashburn-5", - "弗吉尼亚六区": "na-ashburn-6", - "弗吉尼亚七区": "na-ashburn-7", - "弗吉尼亚八区": "na-ashburn-8", - "弗吉尼亚九区": "na-ashburn-9", - "法兰克福一区": "eu-frankfurt-1", - "法兰克福二区": "eu-frankfurt-2", - "法兰克福三区": "eu-frankfurt-3", - "法兰克福四区": "eu-frankfurt-4", - "法兰克福五区": "eu-frankfurt-5", - "法兰克福六区": "eu-frankfurt-6", - "法兰克福七区": "eu-frankfurt-7", - "法兰克福八区": "eu-frankfurt-8", - "法兰克福九区": "eu-frankfurt-9", - "莫斯科一区": "eu-moscow-1", - "莫斯科二区": "eu-moscow-2", - "莫斯科三区": "eu-moscow-3", - "莫斯科四区": "eu-moscow-4", - "莫斯科五区": "eu-moscow-5", - "莫斯科六区": "eu-moscow-6", - "莫斯科七区": "eu-moscow-7", - "莫斯科八区": "eu-moscow-8", - "莫斯科九区": "eu-moscow-9", - "上海自动驾驶云一区": "ap-shanghai-adc-1", - "中国台北一区": "ap-taipei-1", - "中国台北二区": "ap-taipei-2", - "中国台北三区": "ap-taipei-3", - "中国台北四区": "ap-taipei-4", - "中国台北五区": "ap-taipei-5", - "中国台北六区": "ap-taipei-6", -} - -const ( - BAND_WIDTH = 20 -) - -const ( - SWITCH_MODE_1 = 1 - SWITCH_MODE_2 = 2 - SWITCH_MODE_4 = 4 -) - -var SWITCH_MODE = []int{ - SWITCH_MODE_1, - SWITCH_MODE_2, - SWITCH_MODE_4, -} - -const ( - FW_TYPE_NAT = "nat" - FW_TYPE_EW = "ew" -) - -var FW_TYPE = []string{ - FW_TYPE_NAT, - FW_TYPE_EW, -} - -const ( - POLICY_ENABLE_TRUE = "true" - POLICY_ENABLE_FALSE = "false" -) - -var POLICY_ENABLE = []string{ - POLICY_ENABLE_TRUE, - POLICY_ENABLE_FALSE, -} - -const ( - POLICY_SCOPE_SERIAL = "serial" - POLICY_SCOPE_SIDE = "side" - POLICY_SCOPE_ALL = "all" -) - -var POLICY_SCOPE = []string{ - POLICY_SCOPE_SERIAL, - POLICY_SCOPE_SIDE, - POLICY_SCOPE_ALL, -} - -const ( - POLICY_RULE_ACTION_ACCEPT = "accept" - POLICY_RULE_ACTION_DROP = "drop" - POLICY_RULE_ACTION_LOG = "log" -) - -var POLICY_RULE_ACTION = []string{ - POLICY_RULE_ACTION_ACCEPT, - POLICY_RULE_ACTION_DROP, - POLICY_RULE_ACTION_LOG, -} - -type SourceContentJson struct { - Key string `json:"Key"` - Value string `json:"Value"` -} - -type TargetContentJson struct { - Key string `json:"Key"` - Value string `json:"Value"` -} diff --git a/tencentcloud/extension_ckafka.go b/tencentcloud/extension_ckafka.go deleted file mode 100644 index 21786463a0..0000000000 --- a/tencentcloud/extension_ckafka.go +++ /dev/null @@ -1,90 +0,0 @@ -package tencentcloud - -const ( - CKAFKA_DESCRIBE_LIMIT = 50 - CKAFKA_ACL_PRINCIPAL_STR = "User:" -) - -var CKAFKA_INSTANCE_TYPE = map[string]int64{ - "general": 1, - "standard": 2, - "advanced": 3, - "capacity": 4, - "specialized-1": 5, - "specialized-2": 6, - "specialized-3": 7, - "specialized-4": 8, - "exclusive": 9, -} - -var CKAFKA_ACL_RESOURCE_TYPE = map[string]int64{ - "UNKNOWN": 0, - "ANY": 1, - "TOPIC": 2, - "GROUP": 3, - "CLUSTER": 4, - "TRANSACTIONAL_ID": 5, -} - -var CKAFKA_ACL_RESOURCE_TYPE_TO_STRING = map[int64]string{ - 0: "UNKNOWN", - 1: "ANY", - 2: "TOPIC", - 3: "GROUP", - 4: "CLUSTER", - 5: "TRANSACTIONAL_ID", -} - -var CKAFKA_ACL_OPERATION = map[string]int64{ - "UNKNOWN": 0, - "ANY": 1, - "ALL": 2, - "READ": 3, - "WRITE": 4, - "CREATE": 5, - "DELETE": 6, - "ALTER": 7, - "DESCRIBE": 8, - "CLUSTER_ACTION": 9, - "DESCRIBE_CONFIGS": 10, - "ALTER_CONFIGS": 11, - "IDEMPOTEN_WRITE": 12, -} -var CKAFKA_ACL_OPERATION_TO_STRING = map[int64]string{ - 0: "UNKNOWN", - 1: "ANY", - 2: "ALL", - 3: "READ", - 4: "WRITE", - 5: "CREATE", - 6: "DELETE", - 7: "ALTER", - 8: "DESCRIBE", - 9: "CLUSTER_ACTION", - 10: "DESCRIBE_CONFIGS", - 11: "ALTER_CONFIGS", - 12: "IDEMPOTEN_WRITE", -} - -var CKAFKA_PERMISSION_TYPE = map[string]int64{ - "UNKNOWN": 0, - "ANY": 1, - "DENY": 2, - "ALLOW": 3, -} - -var CKAFKA_PERMISSION_TYPE_TO_STRING = map[int64]string{ - 0: "UNKNOWN", - 1: "ANY", - 2: "DENY", - 3: "ALLOW", -} - -//sdk ckafka not found error -const CkafkaInstanceNotFound = "InvalidParameterValue.InstanceNotExist" -const CkafkaFailedOperation = "FailedOperation" - -const ( - CKAFKA_CHARGE_TYPE_POSTPAID = COMMON_PAYTYPE_POSTPAID - CKAFKA_CHARGE_TYPE_PREPAID = COMMON_PAYTYPE_PREPAID -) diff --git a/tencentcloud/extension_cnn.go b/tencentcloud/extension_cnn.go deleted file mode 100644 index 3c89bec444..0000000000 --- a/tencentcloud/extension_cnn.go +++ /dev/null @@ -1,16 +0,0 @@ -package tencentcloud - -const CNN_QOS_PT = "PT" -const CNN_QOS_AU = "AU" -const CNN_QOS_AG = "AG" - -const CNN_INSTANCE_TYPE_VPC = "VPC" -const CNN_INSTANCE_TYPE_DIRECTCONNECT = "DIRECTCONNECT" -const CNN_INSTANCE_TYPE_BMVPC = "BMVPC" -const CNN_INSTANCE_TYPE_VPNGW = "VPNGW" - -const PREPAID = "PREPAID" -const POSTPAID = "POSTPAID" - -const OuterRegionLimit = "OUTER_REGION_LIMIT" -const InterRegionLimit = "INTER_REGION_LIMIT" diff --git a/tencentcloud/service_tencentcloud_apm.go b/tencentcloud/service_tencentcloud_apm.go deleted file mode 100644 index c8410619ed..0000000000 --- a/tencentcloud/service_tencentcloud_apm.go +++ /dev/null @@ -1,67 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - apm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apm/v20210622" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" -) - -type ApmService struct { - client *connectivity.TencentCloudClient -} - -func (me *ApmService) DescribeApmInstanceById(ctx context.Context, instanceId string) (instance *apm.ApmInstanceDetail, errRet error) { - logId := getLogId(ctx) - - request := apm.NewDescribeApmInstancesRequest() - request.InstanceIds = []*string{&instanceId} - - 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.UseApmClient().DescribeApmInstances(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()) - - if len(response.Response.Instances) < 1 { - return - } - - instance = response.Response.Instances[0] - return -} - -func (me *ApmService) DeleteApmInstanceById(ctx context.Context, instanceId string) (errRet error) { - logId := getLogId(ctx) - - request := apm.NewTerminateApmInstanceRequest() - request.InstanceId = &instanceId - - 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.UseApmClient().TerminateApmInstance(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 -} diff --git a/tencentcloud/service_tencentcloud_bi.go b/tencentcloud/service_tencentcloud_bi.go deleted file mode 100644 index ba45888ff7..0000000000 --- a/tencentcloud/service_tencentcloud_bi.go +++ /dev/null @@ -1,457 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - bi "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/bi/v20220105" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" -) - -type BiService struct { - client *connectivity.TencentCloudClient -} - -func (me *BiService) DescribeBiDatasourceCloudById(ctx context.Context, projectId, id uint64) (datasourceCloud *bi.DatasourceInfo, errRet error) { - logId := getLogId(ctx) - - request := bi.NewDescribeDatasourceListRequest() - request.ProjectId = &projectId - - 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()) - - var ( - offset int64 = 0 - limit int64 = 20 - ) - for { - request.PageNo = &offset - request.PageSize = &limit - response, err := me.client.UseBiClient().DescribeDatasourceList(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()) - - if response == nil || len(response.Response.Data.List) < 1 { - break - } - for _, v := range response.Response.Data.List { - if *v.Id == id { - datasourceCloud = v - return - } - } - if len(response.Response.Data.List) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *BiService) DeleteBiDatasourceCloudById(ctx context.Context, projectId, id uint64) (errRet error) { - logId := getLogId(ctx) - - request := bi.NewDeleteDatasourceRequest() - request.ProjectId = &projectId - request.Id = &id - - 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.UseBiClient().DeleteDatasource(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 -} - -func (me *BiService) DescribeBiProjectById(ctx context.Context, projectId uint64) (project *bi.Project, errRet error) { - logId := getLogId(ctx) - - request := bi.NewDescribeProjectInfoRequest() - request.Id = &projectId - - 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.UseBiClient().DescribeProjectInfo(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()) - - project = response.Response.Data - return -} - -func (me *BiService) DeleteBiProjectById(ctx context.Context, projectId uint64) (errRet error) { - logId := getLogId(ctx) - - request := bi.NewDeleteProjectRequest() - request.Id = &projectId - - 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.UseBiClient().DeleteProject(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 -} - -func (me *BiService) DescribeBiUserRoleById(ctx context.Context, userId string) (userRole *bi.UserRoleListDataUserRoleInfo, errRet error) { - logId := getLogId(ctx) - - request := bi.NewDescribeUserRoleListRequest() - - 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()) - - var ( - offset int64 = 0 - limit int64 = 20 - ) - for { - request.PageNo = &offset - request.PageSize = &limit - response, err := me.client.UseBiClient().DescribeUserRoleList(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()) - - if response == nil || len(response.Response.Data.List) < 1 { - break - } - for _, v := range response.Response.Data.List { - if *v.UserId == userId { - userRole = v - return - } - } - if len(response.Response.Data.List) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *BiService) DeleteBiUserRoleById(ctx context.Context, userId string) (errRet error) { - logId := getLogId(ctx) - - request := bi.NewDeleteUserRoleRequest() - request.UserId = &userId - - 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.UseBiClient().DeleteUserRole(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 -} - -func (me *BiService) DescribeBiProjectUserRoleById(ctx context.Context, projectId int64, userId string) (projectUserRole *bi.UserRoleListDataUserRoleInfo, errRet error) { - logId := getLogId(ctx) - - request := bi.NewDescribeUserRoleProjectListRequest() - request.ProjectId = &projectId - - 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()) - - var ( - offset int64 = 0 - limit int64 = 20 - ) - for { - request.PageNo = &offset - request.PageSize = &limit - response, err := me.client.UseBiClient().DescribeUserRoleProjectList(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()) - - if response == nil || len(response.Response.Data.List) < 1 { - break - } - for _, v := range response.Response.Data.List { - if *v.UserId == userId { - projectUserRole = v - return - } - } - if len(response.Response.Data.List) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *BiService) DeleteBiProjectUserRoleById(ctx context.Context, projectId int64, userId string) (errRet error) { - logId := getLogId(ctx) - - request := bi.NewDeleteUserRoleProjectRequest() - request.ProjectId = &projectId - request.UserId = &userId - - 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.UseBiClient().DeleteUserRoleProject(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 -} - -func (me *BiService) DescribeBiProjectByFilter(ctx context.Context, param map[string]interface{}) (project []*bi.Project, errRet error) { - var ( - logId = getLogId(ctx) - request = bi.NewDescribeProjectListRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "PageNo" { - request.PageNo = v.(*uint64) - } - if k == "Keyword" { - request.Keyword = v.(*string) - } - if k == "AllPage" { - request.AllPage = v.(*bool) - } - if k == "ModuleCollection" { - request.ModuleCollection = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset uint64 = 0 - limit uint64 = 20 - ) - for { - request.PageNo = &offset - request.PageSize = &limit - response, err := me.client.UseBiClient().DescribeProjectList(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()) - - if response == nil || len(response.Response.Data.List) < 1 { - break - } - project = append(project, response.Response.Data.List...) - if len(response.Response.Data.List) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *BiService) DescribeBiDatasourceById(ctx context.Context, projectId uint64, id uint64) (datasource *bi.DatasourceInfo, errRet error) { - logId := getLogId(ctx) - - request := bi.NewDescribeDatasourceListRequest() - request.ProjectId = &projectId - - 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()) - - var ( - offset int64 = 0 - limit int64 = 20 - ) - for { - request.PageNo = &offset - request.PageSize = &limit - response, err := me.client.UseBiClient().DescribeDatasourceList(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()) - - if response == nil || len(response.Response.Data.List) < 1 { - break - } - for _, v := range response.Response.Data.List { - if *v.Id == id { - datasource = v - return - } - } - if len(response.Response.Data.List) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *BiService) DeleteBiDatasourceById(ctx context.Context, projectId uint64, id uint64) (errRet error) { - logId := getLogId(ctx) - - request := bi.NewDeleteDatasourceRequest() - request.ProjectId = &projectId - request.Id = &id - - 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.UseBiClient().DeleteDatasource(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 -} - -func (me *BiService) DescribeBiUserProjectByFilter(ctx context.Context, param map[string]interface{}) (userProject []*bi.UserIdAndUserName, errRet error) { - var ( - logId = getLogId(ctx) - request = bi.NewDescribeUserProjectListRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "ProjectId" { - request.ProjectId = v.(*int64) - } - if k == "AllPage" { - request.AllPage = v.(*bool) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset int64 = 0 - limit int64 = 20 - ) - for { - request.PageNo = &offset - request.PageSize = &limit - response, err := me.client.UseBiClient().DescribeUserProjectList(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()) - - if response == nil || len(response.Response.Data.List) < 1 { - break - } - userProject = append(userProject, response.Response.Data.List...) - if len(response.Response.Data.List) < int(limit) { - break - } - - offset += limit - } - - return -} diff --git a/tencentcloud/service_tencentcloud_cat.go b/tencentcloud/service_tencentcloud_cat.go deleted file mode 100644 index 3d0cf90ed7..0000000000 --- a/tencentcloud/service_tencentcloud_cat.go +++ /dev/null @@ -1,342 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - cat "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat/v20180409" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" -) - -type CatService struct { - client *connectivity.TencentCloudClient -} - -func (me *CatService) DescribeCatTaskSet(ctx context.Context, taskId string) (taskSet *cat.ProbeTask, errRet error) { - var ( - logId = getLogId(ctx) - request = cat.NewDescribeProbeTasksRequest() - ) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, "query object", request.ToJsonString(), errRet.Error()) - } - }() - - request.TaskIDs = []*string{helper.String(taskId)} - ratelimit.Check(request.GetAction()) - - var offset int64 = 0 - var pageSize int64 = 100 - instances := make([]*cat.ProbeTask, 0) - - for { - request.Offset = &offset - request.Limit = &pageSize - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCatClient().DescribeProbeTasks(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), err.Error()) - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - if response == nil || len(response.Response.TaskSet) < 1 { - break - } - instances = append(instances, response.Response.TaskSet...) - if len(response.Response.TaskSet) < int(pageSize) { - break - } - offset += pageSize - } - - if len(instances) < 1 { - return - } - taskSet = instances[0] - return -} - -func (me *CatService) DeleteCatTaskSetById(ctx context.Context, taskId string) (errRet error) { - logId := getLogId(ctx) - - request := cat.NewDeleteProbeTaskRequest() - - request.TaskIds = []*string{helper.String(taskId)} - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, "delete object", request.ToJsonString(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCatClient().DeleteProbeTask(request) - if err != nil { - errRet = err - return err - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - return -} - -func (me *CatService) DescribeCatProbeNodeByFilter(ctx context.Context, param map[string]interface{}) (node []*cat.NodeDefine, errRet error) { - var ( - logId = getLogId(ctx) - request = cat.NewDescribeProbeNodesRequest() - ) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, "query object", request.ToJsonString(), errRet.Error()) - } - }() - - for k, v := range param { - if k == "node_type" { - request.NodeType = v.(*int64) - } - - if k == "location" { - request.Location = v.(*int64) - } - - if k == "is_ipv6" { - request.IsIPv6 = v.(*bool) - } - - if k == "node_name" { - request.NodeName = v.(*string) - } - - if k == "pay_mode" { - request.PayMode = v.(*int64) - } - - } - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCatClient().DescribeProbeNodes(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), err.Error()) - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - node = append(node, response.Response.NodeSet...) - - return -} - -// DescribeNodes interface is an alternative interface to DescribeProbeNodes, but it lacks the NodeDefineStatus field, so both interfaces are used at the same time. -func (me *CatService) DescribeCatNodeByFilter(ctx context.Context, param map[string]interface{}) (node []*cat.NodeDefineExt, errRet error) { - var ( - logId = getLogId(ctx) - request = cat.NewDescribeNodesRequest() - ) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, "query object", request.ToJsonString(), errRet.Error()) - } - }() - - for k, v := range param { - if k == "node_type" { - request.NodeType = v.(*int64) - } - - if k == "location" { - request.Location = v.(*int64) - } - - if k == "is_ipv6" { - request.IsIPv6 = v.(*bool) - } - - if k == "node_name" { - request.NodeName = v.(*string) - } - - if k == "pay_mode" { - request.PayMode = v.(*int64) - } - - } - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCatClient().DescribeNodes(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), err.Error()) - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - node = append(node, response.Response.NodeSet...) - - return -} - -func (me *CatService) DescribeCatProbeDataByFilter(ctx context.Context, param map[string]interface{}) (probeData []*cat.DetailedSingleDataDefine, errRet error) { - var ( - logId = getLogId(ctx) - request = cat.NewDescribeDetailedSingleProbeDataRequest() - ) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, "query object", request.ToJsonString(), errRet.Error()) - } - }() - - for k, v := range param { - if k == "begin_time" { - request.BeginTime = v.(*uint64) - } - - if k == "end_time" { - request.EndTime = v.(*uint64) - } - - if k == "task_type" { - request.TaskType = v.(*string) - } - - if k == "sort_field" { - request.SortField = v.(*string) - } - - if k == "ascending" { - request.Ascending = v.(*bool) - } - - if k == "selected_fields" { - var selectedFields []*string - selectedFields = append(selectedFields, v.([]*string)...) - request.SelectedFields = selectedFields - } - - if k == "offset" { - request.Offset = v.(*int64) - } - - if k == "limit" { - request.Limit = v.(*int64) - } - - if k == "task_id" { - var taskId []*string - taskId = append(taskId, v.([]*string)...) - request.TaskID = taskId - } - - if k == "operators" { - var operators []*string - operators = append(operators, v.([]*string)...) - request.Operators = operators - } - - if k == "districts" { - var districts []*string - districts = append(districts, v.([]*string)...) - request.Districts = districts - } - - if k == "error_types" { - var errorTypes []*string - errorTypes = append(errorTypes, v.([]*string)...) - request.ErrorTypes = errorTypes - } - - if k == "city" { - var city []*string - city = append(city, v.([]*string)...) - request.City = city - } - - } - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCatClient().DescribeDetailedSingleProbeData(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), err.Error()) - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - probeData = append(probeData, response.Response.DataSet...) - - return -} - -func (me *CatService) DescribeCatMetricDataByFilter(ctx context.Context, param map[string]interface{}) (metricData *cat.DescribeProbeMetricDataResponseParams, errRet error) { - var ( - logId = getLogId(ctx) - request = cat.NewDescribeProbeMetricDataRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "AnalyzeTaskType" { - request.AnalyzeTaskType = v.(*string) - } - if k == "MetricType" { - request.MetricType = v.(*string) - } - if k == "Field" { - request.Field = v.(*string) - } - if k == "Filter" { - request.Filter = v.(*string) - } - if k == "GroupBy" { - request.GroupBy = v.(*string) - } - if k == "Filters" { - request.Filters = v.([]*string) - } - } - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCatClient().DescribeProbeMetricData(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()) - - if response == nil || response.Response == nil { - return - } - - metricData = response.Response - - return -} diff --git a/tencentcloud/service_tencentcloud_ccn.go b/tencentcloud/service_tencentcloud_ccn.go deleted file mode 100644 index 8cc263f2c1..0000000000 --- a/tencentcloud/service_tencentcloud_ccn.go +++ /dev/null @@ -1,682 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strings" - - vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" -) - -//Ccn basic information -type CcnBasicInfo struct { - ccnId string - name string - description string - state string - qos string - chargeType string - bandWithLimitType string - instanceCount int64 - createTime string -} - -type CcnAttachedInstanceInfo struct { - ccnId string - instanceType string - instanceRegion string - instanceId string - state string - attachedTime string - cidrBlock []string - description string -} - -type CcnBandwidthLimit struct { - region string - limit int64 -} - -func (me *VpcService) DescribeCcn(ctx context.Context, ccnId string) (info CcnBasicInfo, has int, errRet error) { - infos, err := me.DescribeCcns(ctx, ccnId, "") - if err != nil { - errRet = err - return - } - has = len(infos) - if has > 0 { - info = infos[0] - } - return -} - -func (me *VpcService) DescribeCcns(ctx context.Context, ccnId, name string) (infos []CcnBasicInfo, errRet error) { - - logId := getLogId(ctx) - request := vpc.NewDescribeCcnsRequest() - 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()) - } - }() - - infos = make([]CcnBasicInfo, 0, 100) - - var offset uint64 = 0 - var limit uint64 = 100 - var total = -1 - var has = map[string]bool{} - - var filters []*vpc.Filter - if ccnId != "" { - filters = me.fillFilter(filters, "ccn-id", ccnId) - } - if name != "" { - filters = me.fillFilter(filters, "ccn-name", name) - } - if len(filters) > 0 { - request.Filters = filters - } - -getMoreData: - - if total >= 0 && int(offset) >= total { - return - } - request.Limit = &limit - request.Offset = &offset - ratelimit.Check(request.GetAction()) - response, err := me.client.UseVpcClient().DescribeCcns(request) - - if err != nil { - errRet = err - responseStr := "" - if response != nil { - responseStr = response.ToJsonString() - } - log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - responseStr, - errRet.Error()) - return - } - - log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - response.ToJsonString()) - - if total < 0 { - total = int(*response.Response.TotalCount) - } - - if len(response.Response.CcnSet) > 0 { - offset += limit - } else { - //get empty ,we're done - return - } - for _, item := range response.Response.CcnSet { - var basicInfo CcnBasicInfo - - basicInfo.ccnId = *item.CcnId - basicInfo.name = *item.CcnName - basicInfo.createTime = *item.CreateTime - basicInfo.description = *item.CcnDescription - basicInfo.instanceCount = int64(*item.InstanceCount) - basicInfo.qos = *item.QosLevel - basicInfo.state = *item.State - basicInfo.chargeType = *item.InstanceChargeType - basicInfo.bandWithLimitType = *item.BandwidthLimitType - - if has[basicInfo.ccnId] { - errRet = fmt.Errorf("get repeated ccn_id[%s] when doing DescribeCcns", basicInfo.ccnId) - return - } - has[basicInfo.ccnId] = true - infos = append(infos, basicInfo) - } - goto getMoreData - -} - -func (me *VpcService) DescribeCcnRegionBandwidthLimits(ctx context.Context, ccnId string) (infos []CcnBandwidthLimit, errRet error) { - - logId := getLogId(ctx) - request := vpc.NewDescribeCcnRegionBandwidthLimitsRequest() - - infos = make([]CcnBandwidthLimit, 0, 100) - - request.CcnId = &ccnId - ratelimit.Check(request.GetAction()) - response, err := me.client.UseVpcClient().DescribeCcnRegionBandwidthLimits(request) - - defer func() { - if errRet != nil { - responseStr := "" - if response != nil { - responseStr = response.ToJsonString() - } - log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - responseStr, - errRet.Error()) - } - }() - - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - response.ToJsonString()) - - for _, item := range response.Response.CcnRegionBandwidthLimitSet { - - var ccnBandwidthLimit CcnBandwidthLimit - ccnBandwidthLimit.region = *item.Region - ccnBandwidthLimit.limit = int64(*item.BandwidthLimit) - infos = append(infos, ccnBandwidthLimit) - } - return -} - -func (me *VpcService) CreateCcn(ctx context.Context, name, description, - qos, chargeType, bandWithLimitType string) (basicInfo CcnBasicInfo, errRet error) { - - logId := getLogId(ctx) - request := vpc.NewCreateCcnRequest() - - request.CcnName = &name - request.CcnDescription = &description - request.QosLevel = &qos - request.InstanceChargeType = &chargeType - request.BandwidthLimitType = &bandWithLimitType - ratelimit.Check(request.GetAction()) - response, err := me.client.UseVpcClient().CreateCcn(request) - - defer func() { - if errRet != nil { - responseStr := "" - if response != nil { - responseStr = response.ToJsonString() - } - log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - responseStr, - errRet.Error()) - } - }() - - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - response.ToJsonString()) - - if response.Response.Ccn == nil || response.Response.Ccn.CcnId == nil || *response.Response.Ccn.CcnId == "" { - errRet = fmt.Errorf("CreateCcn return empty response.Response.Ccn ") - return - } - - item := response.Response.Ccn - basicInfo.ccnId = *item.CcnId - basicInfo.name = *item.CcnName - basicInfo.createTime = *item.CreateTime - - basicInfo.description = *item.CcnDescription - basicInfo.instanceCount = int64(*item.InstanceCount) - basicInfo.qos = *item.QosLevel - basicInfo.state = *item.State - return -} - -func (me *VpcService) DeleteCcn(ctx context.Context, ccnId string) (errRet error) { - - logId := getLogId(ctx) - request := vpc.NewDeleteCcnRequest() - request.CcnId = &ccnId - ratelimit.Check(request.GetAction()) - response, err := me.client.UseVpcClient().DeleteCcn(request) - - defer func() { - if errRet != nil { - responseStr := "" - if response != nil { - responseStr = response.ToJsonString() - } - log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - responseStr, - errRet.Error()) - } - }() - - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - response.ToJsonString()) - return -} - -func (me *VpcService) ModifyCcnAttribute(ctx context.Context, ccnId, name, description string) (errRet error) { - - logId := getLogId(ctx) - request := vpc.NewModifyCcnAttributeRequest() - request.CcnId = &ccnId - - if name != "" { - request.CcnName = &name - } - if description != "" { - request.CcnDescription = &description - } - ratelimit.Check(request.GetAction()) - response, err := me.client.UseVpcClient().ModifyCcnAttribute(request) - - defer func() { - if errRet != nil { - responseStr := "" - if response != nil { - responseStr = response.ToJsonString() - } - log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - responseStr, - errRet.Error()) - } - }() - - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - response.ToJsonString()) - return -} - -func (me *VpcService) DescribeCcnAttachedInstance(ctx context.Context, ccnId, - instanceRegion, instanceType, instanceId string) (info CcnAttachedInstanceInfo, has int, errRet error) { - - infos, err := me.DescribeCcnAttachedInstances(ctx, ccnId) - - if err != nil { - errRet = err - return - } - - for _, item := range infos { - if item.instanceId == instanceId && - item.instanceRegion == instanceRegion && - strings.EqualFold(item.instanceType, instanceType) { - has = 1 - info = item - return - } - } - return -} - -func (me *VpcService) DescribeCcnAttachedInstances(ctx context.Context, ccnId string) (infos []CcnAttachedInstanceInfo, errRet error) { - - logId := getLogId(ctx) - request := vpc.NewDescribeCcnAttachedInstancesRequest() - request.CcnId = &ccnId - ratelimit.Check(request.GetAction()) - response, err := me.client.UseVpcClient().DescribeCcnAttachedInstances(request) - - defer func() { - if errRet != nil { - responseStr := "" - if response != nil { - responseStr = response.ToJsonString() - } - log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - responseStr, - errRet.Error()) - } - }() - - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - response.ToJsonString()) - - infos = make([]CcnAttachedInstanceInfo, 0, len(response.Response.InstanceSet)) - - for _, item := range response.Response.InstanceSet { - - var info CcnAttachedInstanceInfo - - info.attachedTime = *item.AttachedTime - info.cidrBlock = make([]string, 0, len(item.CidrBlock)) - - for _, v := range item.CidrBlock { - info.cidrBlock = append(info.cidrBlock, *v) - } - - info.ccnId = ccnId - info.instanceId = *item.InstanceId - info.instanceRegion = *item.InstanceRegion - info.instanceType = *item.InstanceType - info.state = *item.State - info.description = *item.Description - infos = append(infos, info) - } - return -} - -func (me *VpcService) DescribeCcnAttachmentsByInstance(ctx context.Context, instanceType string, instanceId string, instanceRegion string) (infos []vpc.CcnAttachedInstance, errRet error) { - - logId := getLogId(ctx) - request := vpc.NewDescribeCcnAttachedInstancesRequest() - request.Filters = make([]*vpc.Filter, 0, 3) - request.Filters = append(request.Filters, &vpc.Filter{Name: helper.String("instance-type"), Values: []*string{&instanceType}}) - request.Filters = append(request.Filters, &vpc.Filter{Name: helper.String("instance-id"), Values: []*string{&instanceId}}) - request.Filters = append(request.Filters, &vpc.Filter{Name: helper.String("instance-region"), Values: []*string{&instanceRegion}}) - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseVpcClient().DescribeCcnAttachedInstances(request) - - defer func() { - if errRet != nil { - responseStr := "" - if response != nil { - responseStr = response.ToJsonString() - } - log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - responseStr, - errRet.Error()) - } - }() - - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - response.ToJsonString()) - - infos = make([]vpc.CcnAttachedInstance, 0, len(response.Response.InstanceSet)) - - for _, item := range response.Response.InstanceSet { - infos = append(infos, *item) - } - return -} - -func (me *VpcService) AttachCcnInstances(ctx context.Context, ccnId, instanceRegion, instanceType, instanceId string, ccnUin string, description string) (errRet error) { - - logId := getLogId(ctx) - request := vpc.NewAttachCcnInstancesRequest() - request.CcnId = &ccnId - - if ccnUin != "" { - request.CcnUin = &ccnUin - } - - var ccnInstance vpc.CcnInstance - ccnInstance.InstanceId = &instanceId - ccnInstance.InstanceRegion = &instanceRegion - ccnInstance.InstanceType = &instanceType - if description != "" { - ccnInstance.Description = &description - } - - request.Instances = []*vpc.CcnInstance{&ccnInstance} - ratelimit.Check(request.GetAction()) - response, err := me.client.UseVpcClient().AttachCcnInstances(request) - - defer func() { - if errRet != nil { - responseStr := "" - if response != nil { - responseStr = response.ToJsonString() - } - log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - responseStr, - errRet.Error()) - } - }() - - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - response.ToJsonString()) - return -} - -func (me *VpcService) DetachCcnInstances(ctx context.Context, ccnId, instanceRegion, instanceType, instanceId string) (errRet error) { - - logId := getLogId(ctx) - request := vpc.NewDetachCcnInstancesRequest() - request.CcnId = &ccnId - - var ccnInstance vpc.CcnInstance - ccnInstance.InstanceId = &instanceId - ccnInstance.InstanceRegion = &instanceRegion - ccnInstance.InstanceType = &instanceType - - request.Instances = []*vpc.CcnInstance{&ccnInstance} - ratelimit.Check(request.GetAction()) - response, err := me.client.UseVpcClient().DetachCcnInstances(request) - - defer func() { - if errRet != nil { - responseStr := "" - if response != nil { - responseStr = response.ToJsonString() - } - log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - responseStr, - errRet.Error()) - } - }() - - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - response.ToJsonString()) - return - -} - -func (me *VpcService) DescribeCcnRegionBandwidthLimit(ctx context.Context, ccnId, - region string) (bandwidth int64, errRet error) { - - infos, err := me.DescribeCcnRegionBandwidthLimits(ctx, ccnId) - if err != nil { - errRet = err - return - } - for _, v := range infos { - if v.region == region { - bandwidth = v.limit - break - } - } - return -} - -func (me *VpcService) GetCcnRegionBandwidthLimit(ctx context.Context, ccnId, - region, dstRegion, limitType string) (int64, error) { - infos, err := me.GetCcnRegionBandwidthLimits(ctx, ccnId) - if err != nil { - return 0, err - } - for _, v := range infos { - if v.Region != nil { - switch limitType { - case OuterRegionLimit: - if *v.Region == region { - return int64(*v.BandwidthLimit), nil - } - case InterRegionLimit: - if v.DstRegion != nil && *v.DstRegion == dstRegion && *v.Region == region { - return int64(*v.BandwidthLimit), nil - } - default: - return 0, fmt.Errorf("unknown type of band with limit type") - } - } - } - return 0, nil -} - -func (me *VpcService) GetCcnRegionBandwidthLimits(ctx context.Context, - ccnID string) (infos []vpc.CcnRegionBandwidthLimit, errRet error) { - var ( - request = vpc.NewGetCcnRegionBandwidthLimitsRequest() - response *vpc.GetCcnRegionBandwidthLimitsResponse - err error - limit uint64 = 100 - offset uint64 = 0 - ) - request.CcnId = &ccnID - request.Limit = &limit - request.Offset = &offset - - ratelimit.Check(request.GetAction()) - for { - response, err = me.client.UseVpcClient().GetCcnRegionBandwidthLimits(request) - if err != nil { - errRet = err - return - } - if response.Response == nil || response.Response.CcnBandwidthSet == nil { - errRet = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) - return - } - - for _, item := range response.Response.CcnBandwidthSet { - if item.CcnRegionBandwidthLimit != nil { - infos = append(infos, *item.CcnRegionBandwidthLimit) - } - } - if len(response.Response.CcnBandwidthSet) < int(limit) { - break - } - offset += limit - } - return -} - -func (me *VpcService) SetCcnRegionBandwidthLimits(ctx context.Context, ccnId, region, dstRegion string, - bandwidth int64, setFlag bool) (errRet error) { - - logId := getLogId(ctx) - request := vpc.NewSetCcnRegionBandwidthLimitsRequest() - request.CcnId = &ccnId - - var uint64bandwidth = uint64(bandwidth) - var ccnRegionBandwidthLimit vpc.CcnRegionBandwidthLimit - ccnRegionBandwidthLimit.BandwidthLimit = &uint64bandwidth - ccnRegionBandwidthLimit.Region = ®ion - if dstRegion != "" { - ccnRegionBandwidthLimit.DstRegion = &dstRegion - } - - request.CcnRegionBandwidthLimits = []*vpc.CcnRegionBandwidthLimit{&ccnRegionBandwidthLimit} - - request.SetDefaultLimitFlag = helper.Bool(setFlag) - ratelimit.Check(request.GetAction()) - response, err := me.client.UseVpcClient().SetCcnRegionBandwidthLimits(request) - - defer func() { - if errRet != nil { - responseStr := "" - if response != nil { - responseStr = response.ToJsonString() - } - log.Printf("[CRITAL]%s api[%s] fail, request body [%s],response body [%s], reason[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - responseStr, - errRet.Error()) - } - }() - - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", - logId, - request.GetAction(), - request.ToJsonString(), - response.ToJsonString()) - return -} - -func (me *VpcService) ModifyCcnRegionBandwidthLimitsType(ctx context.Context, ccnID, limitType string) error { - request := vpc.NewModifyCcnRegionBandwidthLimitsTypeRequest() - request.CcnId = &ccnID - request.BandwidthLimitType = &limitType - _, err := me.client.UseVpcClient().ModifyCcnRegionBandwidthLimitsType(request) - if err != nil { - return err - } - return nil -} diff --git a/tencentcloud/service_tencentcloud_cdh.go b/tencentcloud/service_tencentcloud_cdh.go deleted file mode 100644 index 0328be06a3..0000000000 --- a/tencentcloud/service_tencentcloud_cdh.go +++ /dev/null @@ -1,170 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - - cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" -) - -type CdhService struct { - client *connectivity.TencentCloudClient -} - -func (me *CdhService) DescribeCdhInstanceById(ctx context.Context, hostId string) (instance *cvm.HostItem, errRet error) { - logId := getLogId(ctx) - request := cvm.NewDescribeHostsRequest() - filter := cvm.Filter{ - Name: helper.String("host-id"), - Values: []*string{helper.String(hostId)}, - } - request.Filters = []*cvm.Filter{&filter} - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCvmClient().DescribeHosts(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), err.Error()) - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - if response == nil || response.Response == nil || len(response.Response.HostSet) < 1 { - return - } - instance = response.Response.HostSet[0] - return -} - -func (me *CdhService) DescribeCdhInstanceByFilter(ctx context.Context, filters map[string]string) (instances []*cvm.HostItem, errRet error) { - logId := getLogId(ctx) - request := cvm.NewDescribeHostsRequest() - request.Filters = make([]*cvm.Filter, 0, len(filters)) - for k, v := range filters { - filter := cvm.Filter{ - Name: helper.String(k), - Values: []*string{helper.String(v)}, - } - request.Filters = append(request.Filters, &filter) - } - var offset uint64 = 0 - var pageSize uint64 = 100 - instances = make([]*cvm.HostItem, 0) - for { - request.Offset = &offset - request.Limit = &pageSize - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCvmClient().DescribeHosts(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), err.Error()) - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - if response == nil || response.Response == nil || len(response.Response.HostSet) < 1 { - break - } - instances = append(instances, response.Response.HostSet...) - if len(response.Response.HostSet) < int(pageSize) { - break - } - offset += pageSize - } - return -} - -func (me *CdhService) CreateCdhInstance(ctx context.Context, placement *cvm.Placement, hostChargePrepaid *cvm.ChargePrepaid, hostChargeType, hostType string) (hostId string, errRet error) { - logId := getLogId(ctx) - request := cvm.NewAllocateHostsRequest() - request.Placement = placement - request.HostChargePrepaid = hostChargePrepaid - request.HostChargeType = helper.String(hostChargeType) - request.HostType = helper.String(hostType) - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCvmClient().AllocateHosts(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), err.Error()) - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - if response == nil || response.Response == nil || len(response.Response.HostIdSet) < 1 { - errRet = fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction()) - return - } - hostId = *response.Response.HostIdSet[0] - return -} - -func (me *CdhService) ModifyHostName(ctx context.Context, hostId, hostName string) (errRet error) { - logId := getLogId(ctx) - request := cvm.NewModifyHostsAttributeRequest() - request.HostIds = []*string{helper.String(hostId)} - request.HostName = helper.String(hostName) - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCvmClient().ModifyHostsAttribute(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), err.Error()) - 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 -} - -func (me *CdhService) ModifyProject(ctx context.Context, hostId string, projectId int) (errRet error) { - logId := getLogId(ctx) - request := cvm.NewModifyHostsAttributeRequest() - request.HostIds = []*string{helper.String(hostId)} - request.ProjectId = helper.IntUint64(projectId) - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCvmClient().ModifyHostsAttribute(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), err.Error()) - 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 -} - -func (me *CdhService) ModifyPrepaidRenewFlag(ctx context.Context, hostId, renewFlag string) (errRet error) { - logId := getLogId(ctx) - request := cvm.NewModifyHostsAttributeRequest() - request.HostIds = []*string{helper.String(hostId)} - request.RenewFlag = helper.String(renewFlag) - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCvmClient().ModifyHostsAttribute(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), err.Error()) - 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 -} diff --git a/tencentcloud/service_tencentcloud_cdn.go b/tencentcloud/service_tencentcloud_cdn.go deleted file mode 100644 index ef965ced43..0000000000 --- a/tencentcloud/service_tencentcloud_cdn.go +++ /dev/null @@ -1,347 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - cdn "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn/v20180606" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" -) - -type CdnService struct { - client *connectivity.TencentCloudClient -} - -type CdnVerifyRecordResponse struct { - SubDomain *string `json:"SubDomain,omitempty" name:"SubDomain"` - Record *string `json:"Record,omitempty" name:"Record"` - RecordType *string `json:"RecordType,omitempty" name:"RecordType"` - RequestId *string `json:"RequestId,omitempty" name:"RequestId"` -} - -func (me *CdnService) DescribeDomainsConfigByDomain(ctx context.Context, domain string) (domainConfig *cdn.DetailDomain, errRet error) { - logId := getLogId(ctx) - request := cdn.NewDescribeDomainsConfigRequest() - request.Filters = make([]*cdn.DomainFilter, 0, 1) - filter := &cdn.DomainFilter{ - Name: helper.String("domain"), - Value: []*string{&domain}, - } - request.Filters = append(request.Filters, filter) - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCdnClient().DescribeDomainsConfig(request) - if err != nil { - if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { - if sdkErr.Code == CDN_HOST_NOT_FOUND { - return - } - } - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), err.Error()) - errRet = err - return - } - if len(response.Response.Domains) > 0 { - domainConfig = response.Response.Domains[0] - } - return -} - -func (me *CdnService) UpdateDomainConfig(ctx context.Context, request *cdn.UpdateDomainConfigRequest) (errRet error) { - logId := getLogId(ctx) - 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.UseCdnClient().UpdateDomainConfig(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 -} - -func (me *CdnService) DeleteDomain(ctx context.Context, domain string) error { - logId := getLogId(ctx) - request := cdn.NewDeleteCdnDomainRequest() - request.Domain = &domain - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseCdnClient().DeleteCdnDomain(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), err.Error()) - return err - } - return nil -} - -func (me *CdnService) StopDomain(ctx context.Context, domain string) error { - logId := getLogId(ctx) - request := cdn.NewStopCdnDomainRequest() - request.Domain = &domain - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseCdnClient().StopCdnDomain(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), err.Error()) - return err - } - return nil -} - -func (me *CdnService) StartDomain(ctx context.Context, domain string) error { - logId := getLogId(ctx) - request := cdn.NewStartCdnDomainRequest() - request.Domain = &domain - - ratelimit.Check(request.GetAction()) - _, err := me.client.UseCdnClient().StartCdnDomain(request) - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", - logId, request.GetAction(), request.ToJsonString(), err.Error()) - return err - } - return nil -} - -func (me *CdnService) DescribeDomainsConfigByFilters(ctx context.Context, - filterMap map[string]interface{}) (domainConfig []*cdn.DetailDomain, errRet error) { - - var ( - logId = getLogId(ctx) - request = cdn.NewDescribeDomainsConfigRequest() - err error - offset, limit int64 = 0, 100 - response *cdn.DescribeDomainsConfigResponse - ) - - request.Filters = make([]*cdn.DomainFilter, 0, len(filterMap)) - - for k, v := range filterMap { - value := v.(string) - filter := &cdn.DomainFilter{ - Name: helper.String(k), - Value: []*string{&value}, - } - request.Filters = append(request.Filters, filter) - } - - request.Limit = &limit - request.Offset = &offset - - for { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, err = me.client.UseCdnClient().DescribeDomainsConfig(request) - - if err != nil { - if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { - if sdkErr.Code == CDN_HOST_NOT_FOUND { - return nil - } - } - return retryError(err, InternalError) - } - return nil - }) - - if err != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", - logId, request.GetAction(), request.ToJsonString(), err) - errRet = err - return - } - - domainConfig = append(domainConfig, response.Response.Domains...) - if len(response.Response.Domains) < int(limit) { - break - } - offset += limit - } - return -} - -func (me *CdnService) VerifyDomainRecord(ctx context.Context, domain string) (result bool, errRet error) { - logId := getLogId(ctx) - request := cdn.NewVerifyDomainRecordRequest() - request.Domain = &domain - - 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.UseCdnClient().VerifyDomainRecord(request) - - if err != nil { - return - } - - if response.Response.Result != nil { - result = *response.Response.Result - } - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - return -} - -func (me *CdnService) CreateVerifyRecord(ctx context.Context, domain string) (resp *cdn.CreateVerifyRecordResponseParams, errRet error) { - logId := getLogId(ctx) - request := cdn.NewCreateVerifyRecordRequest() - 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()) - } - }() - - request.Domain = &domain - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCdnClient().CreateVerifyRecord(request) - - if err != nil { - errRet = err - return - } - - resp = response.Response - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - return -} - -func (me *CdnService) DescribePurgeTasks(ctx context.Context, request *cdn.DescribePurgeTasksRequest) (task []*cdn.PurgeTask, errRet error) { - logId := getLogId(ctx) - 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.UseCdnClient().DescribePurgeTasks(request) - - if err != nil { - errRet = err - return - } - - if response.Response != nil { - task = response.Response.PurgeLogs - } - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - return -} - -func (me *CdnService) DescribePushTasks(ctx context.Context, request *cdn.DescribePushTasksRequest) (task []*cdn.PushTask, errRet error) { - logId := getLogId(ctx) - 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.UseCdnClient().DescribePushTasks(request) - - if err != nil { - errRet = err - return - } - - if response.Response != nil { - task = response.Response.PushLogs - } - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - return -} - -func (me *CdnService) PurgeUrlsCache(ctx context.Context, request *cdn.PurgeUrlsCacheRequest) (taskId string, errRet error) { - logId := getLogId(ctx) - 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.UseCdnClient().PurgeUrlsCache(request) - - if err != nil { - errRet = err - return - } - - if response.Response.TaskId != nil { - taskId = *response.Response.TaskId - } - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - return -} - -func (me *CdnService) PushUrlsCache(ctx context.Context, request *cdn.PushUrlsCacheRequest) (taskId string, errRet error) { - logId := getLogId(ctx) - 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.UseCdnClient().PushUrlsCache(request) - - if err != nil { - errRet = err - return - } - - if response.Response.TaskId != nil { - taskId = *response.Response.TaskId - } - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", - logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - - return -} - -func GetUrlsHash(urls []string) string { - return helper.HashStrings(urls) -} diff --git a/tencentcloud/service_tencentcloud_cdwch.go b/tencentcloud/service_tencentcloud_cdwch.go deleted file mode 100644 index 0e2ad17f5c..0000000000 --- a/tencentcloud/service_tencentcloud_cdwch.go +++ /dev/null @@ -1,685 +0,0 @@ -package tencentcloud - -import ( - "context" - "encoding/json" - "fmt" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - - cdwch "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" - clickhouse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwch/v20200915" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" -) - -type CdwchService struct { - client *connectivity.TencentCloudClient -} - -func (me *CdwchService) DescribeInstance(ctx context.Context, instanceId string) (InstanceInfo *cdwch.InstanceInfo, errRet error) { - logId := getLogId(ctx) - - request := cdwch.NewDescribeInstanceRequest() - request.IsOpenApi = helper.Bool(true) - request.InstanceId = &instanceId - - 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.UseCdwchClient().DescribeInstance(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()) - - InstanceInfo = response.Response.InstanceInfo - - return -} - -func (me *CdwchService) DestroyInstance(ctx context.Context, instanceId string) (errRet error) { - logId := getLogId(ctx) - - request := cdwch.NewDestroyInstanceRequest() - request.InstanceId = &instanceId - - 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.UseCdwchClient().DestroyInstance(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()) - if response.Response.ErrorMsg != nil && *response.Response.ErrorMsg != "" { - errRet = fmt.Errorf(*response.Response.ErrorMsg) - } - return -} - -func (me *CdwchService) ResizeDisk(ctx context.Context, instanceId string, nodeType string, resizeDisk int) (errRet error) { - logId := getLogId(ctx) - - request := cdwch.NewResizeDiskRequest() - - 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()) - } - }() - request.InstanceId = &instanceId - request.Type = &nodeType - request.DiskSize = helper.IntInt64(resizeDisk) - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseCdwchClient().ResizeDisk(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()) - - if response.Response.ErrorMsg != nil && *response.Response.ErrorMsg != "" { - errRet = fmt.Errorf(*response.Response.ErrorMsg) - } - return -} - -func (me *CdwchService) ScaleUpInstance(ctx context.Context, instanceId, nodeType, specName string) (errRet error) { - logId := getLogId(ctx) - - request := cdwch.NewScaleUpInstanceRequest() - - 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()) - } - }() - request.InstanceId = &instanceId - request.ScaleUpEnableRolling = helper.Bool(true) - request.Type = &nodeType - request.SpecName = &specName - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseCdwchClient().ScaleUpInstance(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()) - - if response.Response.ErrorMsg != nil && *response.Response.ErrorMsg != "" { - errRet = fmt.Errorf(*response.Response.ErrorMsg) - } - return -} - -func (me *CdwchService) ScaleOutInstance(ctx context.Context, instanceId string, nodeType string, scaleOutCluster string, nodeCount int, userSubnetIPNum int, shardIps []*string) (errRet error) { - logId := getLogId(ctx) - - request := cdwch.NewScaleOutInstanceRequest() - - 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()) - } - }() - request.InstanceId = &instanceId - request.Type = &nodeType - request.NodeCount = helper.IntInt64(nodeCount) - request.ScaleOutCluster = &scaleOutCluster - request.UserSubnetIPNum = helper.IntInt64(userSubnetIPNum) - if shardIps != nil { - request.ReduceShardInfo = shardIps - } - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseCdwchClient().ScaleOutInstance(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()) - if response.Response.ErrorMsg != nil && *response.Response.ErrorMsg != "" { - errRet = fmt.Errorf(*response.Response.ErrorMsg) - } - return -} - -func (me *CdwchService) DescribeInstanceClusters(ctx context.Context, instanceId string) (clusterInfos []*cdwch.ClusterInfo, errRet error) { - logId := getLogId(ctx) - - request := cdwch.NewDescribeInstanceClustersRequest() - request.InstanceId = &instanceId - - 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.UseCdwchClient().DescribeInstanceClusters(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()) - - clusterInfos = response.Response.Clusters - - return -} - -func (me *CdwchService) DescribeInstancesNew(ctx context.Context, instanceId string) (instancesList []*cdwch.InstanceInfo, errRet error) { - logId := getLogId(ctx) - - request := cdwch.NewDescribeInstancesNewRequest() - request.SearchInstanceId = &instanceId - - 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.UseCdwchClient().DescribeInstancesNew(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()) - - instancesList = response.Response.InstancesList - - return -} - -func (me *CdwchService) DescribeBackUpScheduleById(ctx context.Context, instanceId string) (backup *cdwch.DescribeBackUpScheduleResponseParams, errRet error) { - logId := getLogId(ctx) - - request := cdwch.NewDescribeBackUpScheduleRequest() - request.InstanceId = &instanceId - - 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.UseCdwchClient().DescribeBackUpSchedule(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()) - - backup = response.Response - return -} - -func (me *CdwchService) CreateBackUpSchedule(ctx context.Context, instanceId string, paramMap map[string]interface{}) error { - logId := getLogId(ctx) - - request := cdwch.NewCreateBackUpScheduleRequest() - request.InstanceId = &instanceId - for k, v := range paramMap { - if k == "schedule_id" { - value := v.(int64) - request.ScheduleId = helper.Int64(value) - } - if k == "operation_type" { - value := v.(string) - request.OperationType = helper.String(value) - } - if k == "schedule_type" { - value := v.(string) - request.ScheduleType = helper.String(value) - } - if k == "week_days" { - value := v.(string) - request.WeekDays = helper.String(value) - } - if k == "execute_hour" { - value := v.(int) - request.ExecuteHour = helper.IntInt64(value) - } - if k == "retain_days" { - value := v.(int) - request.RetainDays = helper.IntInt64(value) - } - if k == "back_up_tables" { - for _, item := range v.([]interface{}) { - dMap := item.(map[string]interface{}) - backupTableContent := cdwch.BackupTableContent{} - if v, ok := dMap["database"]; ok { - backupTableContent.Database = helper.String(v.(string)) - } - if v, ok := dMap["table"]; ok { - backupTableContent.Table = helper.String(v.(string)) - } - if v, ok := dMap["total_bytes"]; ok { - backupTableContent.TotalBytes = helper.IntInt64(v.(int)) - } - if v, ok := dMap["v_cluster"]; ok { - backupTableContent.VCluster = helper.String(v.(string)) - } - if v, ok := dMap["ips"]; ok { - backupTableContent.Ips = helper.String(v.(string)) - } - if v, ok := dMap["zoo_path"]; ok { - backupTableContent.ZooPath = helper.String(v.(string)) - } - if v, ok := dMap["rip"]; ok { - backupTableContent.Rip = helper.String(v.(string)) - } - request.BackUpTables = append(request.BackUpTables, &backupTableContent) - } - } - } - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - result, e := me.client.UseCdwchClient().CreateBackUpSchedule(request) - if e != nil { - return 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 create clickhouse backUpSchedule failed, reason:%+v", logId, err) - return err - } - - return nil -} - -func (me *CdwchService) DescribeClickhouseBackupJobsByFilter(ctx context.Context, param map[string]interface{}) (backupJobs []*clickhouse.BackUpJobDisplay, errRet error) { - var ( - logId = getLogId(ctx) - request = cdwch.NewDescribeBackUpJobRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "instance_id" { - request.InstanceId = v.(*string) - } - if k == "begin_time" { - request.BeginTime = v.(*string) - } - if k == "end_time" { - request.EndTime = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset int64 = 0 - limit int64 = 20 - ) - for { - request.PageNum = &offset - request.PageSize = &limit - response, err := me.client.UseCdwchClient().DescribeBackUpJob(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()) - - if response == nil || len(response.Response.BackUpJobs) < 1 { - break - } - backupJobs = append(backupJobs, response.Response.BackUpJobs...) - if len(response.Response.BackUpJobs) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *CdwchService) DescribeClickhouseAccountByUserName(ctx context.Context, instanceId, userName string) (accounts []*AccountInfo, errRet error) { - logId := getLogId(ctx) - - request := clickhouse.NewDescribeCkSqlApisRequest() - request.InstanceId = helper.String(instanceId) - request.UserName = helper.String(userName) - request.ApiType = helper.String(DESCRIBE_CK_SQL_APIS_GET_SYSTEM_USERS) - - 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.UseCdwchClient().DescribeCkSqlApis(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()) - - if response.Response == nil || response.Response.ReturnData == nil { - errRet = fmt.Errorf("DescribeCkSqlApis response is null") - return - } - accounts = make([]*AccountInfo, 0) - err = json.Unmarshal([]byte(*response.Response.ReturnData), &accounts) - if err != nil { - errRet = err - return - } - return -} - -func (me *CdwchService) DescribeCkSqlApis(ctx context.Context, instanceId, cluster, userName, apiType string) error { - logId := getLogId(ctx) - - request := clickhouse.NewDescribeCkSqlApisRequest() - request.InstanceId = helper.String(instanceId) - request.UserName = helper.String(userName) - request.ApiType = helper.String(apiType) - if cluster != "" { - request.Cluster = helper.String(cluster) - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseCdwchClient().DescribeCkSqlApis(request) - if err != nil { - return err - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) - return nil -} - -func (me *CdwchService) ActionAlterCkUser(ctx context.Context, apiType string, userInfo map[string]interface{}) error { - logId := getLogId(ctx) - - request := clickhouse.NewActionAlterCkUserRequest() - ckUserAlterInfo := clickhouse.CkUserAlterInfo{} - if v, ok := userInfo["instance_id"]; ok { - ckUserAlterInfo.InstanceId = helper.String(v.(string)) - } - if v, ok := userInfo["user_name"]; ok { - ckUserAlterInfo.UserName = helper.String(v.(string)) - } - if v, ok := userInfo["password"]; ok { - ckUserAlterInfo.PassWord = helper.String(v.(string)) - } - if v, ok := userInfo["describe"]; ok { - ckUserAlterInfo.Describe = helper.String(v.(string)) - } - - request.UserInfo = &ckUserAlterInfo - request.ApiType = helper.String(apiType) - - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := me.client.UseCdwchClient().ActionAlterCkUser(request) - if e != nil { - return 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 operate clickhouse account failed, reason:%+v", logId, err) - return err - } - return nil -} - -func (me *CdwchService) DescribeCdwchAccountPermission(ctx context.Context, instanceId, cluster, username string) (userNewPrivilege *cdwch.ModifyUserNewPrivilegeRequestParams, errRet error) { - logId := getLogId(ctx) - - request := cdwch.NewDescribeCkSqlApisRequest() - request.InstanceId = &instanceId - request.Cluster = &cluster - request.UserName = &username - request.ApiType = helper.String("GetUserClusterNewPrivileges") - - 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.UseCdwchClient().DescribeCkSqlApis(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()) - - if response.Response == nil || response.Response.ReturnData == nil { - errRet = fmt.Errorf("DescribeCkSqlApis response is null") - return - } - returnDate := *response.Response.ReturnData - userNewPrivilege = &cdwch.ModifyUserNewPrivilegeRequestParams{} - err = json.Unmarshal([]byte(returnDate), userNewPrivilege) - if err != nil { - errRet = err - return - } - return -} - -func (me *CdwchService) DescribeClickhouseBackupTablesByFilter(ctx context.Context, instanceId string) (backupTables []*clickhouse.BackupTableContent, errRet error) { - var ( - logId = getLogId(ctx) - request = cdwch.NewDescribeBackUpTablesRequest() - ) - - 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()) - } - }() - - request.InstanceId = &instanceId - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseCdwchClient().DescribeBackUpTables(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()) - - if response.Response != nil { - backupTables = response.Response.AvailableTables - } - - return -} - -func (me *CdwchService) DescribeClickhouseKeyvalConfigById(ctx context.Context, instanceId string) (config []*cdwch.InstanceConfigInfo, errRet error) { - logId := getLogId(ctx) - - request := cdwch.NewDescribeInstanceKeyValConfigsRequest() - request.InstanceId = &instanceId - - 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.UseCdwchClient().DescribeInstanceKeyValConfigs(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()) - - if response == nil || len(response.Response.ConfigItems) < 1 { - return - } - - config = response.Response.ConfigItems - return -} - -func (me *CdwchService) DescribeClickhouseXmlConfigById(ctx context.Context, instanceId string) (xmlConfig []*cdwch.ClusterConfigsInfoFromEMR, errRet error) { - logId := getLogId(ctx) - - request := cdwch.NewDescribeClusterConfigsRequest() - request.InstanceId = &instanceId - - 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.UseCdwchClient().DescribeClusterConfigs(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()) - - if response == nil || len(response.Response.ClusterConfList) < 1 { - return - } - - xmlConfig = response.Response.ClusterConfList - return -} - -func (me *CdwchService) InstanceStateRefreshFunc(instanceId string) resource.StateRefreshFunc { - return func() (interface{}, string, error) { - request := cdwch.NewDescribeInstanceStateRequest() - request.InstanceId = &instanceId - ratelimit.Check(request.GetAction()) - object, err := me.client.UseCdwchClient().DescribeInstanceState(request) - - if err != nil { - return nil, "", err - } - if object == nil || object.Response == nil || object.Response.InstanceState == nil { - return nil, "", nil - } - - return object, *object.Response.InstanceState, nil - } -} - -func (me *CdwchService) DescribeClickhouseSpecByFilter(ctx context.Context, param map[string]interface{}) (spec *cdwch.DescribeSpecResponseParams, errRet error) { - var ( - logId = getLogId(ctx) - request = cdwch.NewDescribeSpecRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "Zone" { - request.Zone = v.(*string) - } - if k == "PayMode" { - request.PayMode = v.(*string) - } - if k == "IsElastic" { - request.IsElastic = v.(*bool) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseCdwchClient().DescribeSpec(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()) - - if response == nil || response.Response == nil { - return - } - - spec = response.Response - return -} - -func (me *CdwchService) DescribeClickhouseInstanceShardsByFilter(ctx context.Context, param map[string]interface{}) (instanceShards *cdwch.DescribeInstanceShardsResponseParams, errRet error) { - var ( - logId = getLogId(ctx) - request = cdwch.NewDescribeInstanceShardsRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "InstanceId" { - request.InstanceId = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseCdwchClient().DescribeInstanceShards(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()) - - if response == nil || response.Response == nil { - return - } - - instanceShards = response.Response - return -} diff --git a/tencentcloud/service_tencentcloud_cdwpg.go b/tencentcloud/service_tencentcloud_cdwpg.go deleted file mode 100644 index d7dec0ea84..0000000000 --- a/tencentcloud/service_tencentcloud_cdwpg.go +++ /dev/null @@ -1,86 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - cdwpg "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwpg/v20201230" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" -) - -type CdwpgService struct { - client *connectivity.TencentCloudClient -} - -func (me *CdwpgService) DescribeCdwpgInstanceById(ctx context.Context, instanceId string) (instance *cdwpg.SimpleInstanceInfo, errRet error) { - logId := getLogId(ctx) - - request := cdwpg.NewDescribeInstanceInfoRequest() - request.InstanceId = &instanceId - - 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.UseCdwpgClient().DescribeInstanceInfo(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()) - - if response == nil { - return - } - - instance = response.Response.SimpleInstanceInfo - return -} - -func (me *CdwpgService) DeleteCdwpgInstanceById(ctx context.Context, instanceId string) (errRet error) { - logId := getLogId(ctx) - - request := cdwpg.NewDestroyInstanceByApiRequest() - request.InstanceId = &instanceId - - 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.UseCdwpgClient().DestroyInstanceByApi(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 -} - -func (me *CdwpgService) InstanceStateRefreshFunc(instanceId string, failStates []string) resource.StateRefreshFunc { - return func() (interface{}, string, error) { - request := cdwpg.NewDescribeInstanceStateRequest() - request.InstanceId = &instanceId - ratelimit.Check(request.GetAction()) - object, err := me.client.UseCdwpgClient().DescribeInstanceState(request) - - if err != nil { - return nil, "", err - } - if object == nil || object.Response == nil || object.Response.InstanceState == nil { - return nil, "", nil - } - - return object, *object.Response.InstanceState, nil - } -} diff --git a/tencentcloud/service_tencentcloud_cfw.go b/tencentcloud/service_tencentcloud_cfw.go deleted file mode 100644 index ebbe314881..0000000000 --- a/tencentcloud/service_tencentcloud_cfw.go +++ /dev/null @@ -1,846 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strconv" - - cfw "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfw/v20190904" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" -) - -type CfwService struct { - client *connectivity.TencentCloudClient -} - -func (me *CfwService) DescribeCfwAddressTemplateById(ctx context.Context, uuid string) (addressTemplate *cfw.TemplateListInfo, errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDescribeAddressTemplateListRequest() - request.Uuid = &uuid - - 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.UseCfwClient().DescribeAddressTemplateList(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()) - - if len(response.Response.Data) < 1 { - return - } - - addressTemplate = response.Response.Data[0] - return -} - -func (me *CfwService) DeleteCfwAddressTemplateById(ctx context.Context, uuid string) (errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDeleteAddressTemplateRequest() - request.Uuid = &uuid - - 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.UseCfwClient().DeleteAddressTemplate(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 -} - -func (me *CfwService) DescribeCfwBlockIgnoreListById(ctx context.Context, iP, domain, direction, ruleType string) (blockIgnoreRule *cfw.BlockIgnoreRule, errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDescribeBlockIgnoreListRequest() - var searchStr string - if iP != "" { - searchStr = fmt.Sprintf(`{"domain":"%s"}`, iP) - } else { - searchStr = fmt.Sprintf(`{"domain":"%s"}`, domain) - } - - request.Limit = common.Int64Ptr(20) - request.Offset = common.Int64Ptr(0) - request.SearchValue = &searchStr - request.Direction = &direction - ruleTypeInt, _ := strconv.ParseUint(ruleType, 10, 64) - request.RuleType = &ruleTypeInt - request.By = common.StringPtr("EndTime") - request.Order = common.StringPtr("desc") - - 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.UseCfwClient().DescribeBlockIgnoreList(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()) - - if len(response.Response.Data) < 1 { - return - } - - blockIgnoreRule = response.Response.Data[0] - return -} - -func (me *CfwService) DeleteCfwBlockIgnoreListById(ctx context.Context, iP, domain, direction, ruleType string) (errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDeleteBlockIgnoreRuleListRequest() - directionInt, _ := strconv.ParseInt(direction, 10, 64) - if iP != "" { - request.Rules = []*cfw.IocListData{ - { - IP: common.StringPtr(iP), - Direction: common.Int64Ptr(directionInt), - }, - } - } else { - request.Rules = []*cfw.IocListData{ - { - Domain: common.StringPtr(domain), - Direction: common.Int64Ptr(directionInt), - }, - } - } - - ruleTypeInt, _ := strconv.ParseInt(ruleType, 10, 64) - request.RuleType = common.Int64Ptr(ruleTypeInt) - - 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.UseCfwClient().DeleteBlockIgnoreRuleList(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 -} - -func (me *CfwService) DescribeCfwEdgePolicyById(ctx context.Context, uuid string) (edgePolicy *cfw.DescAcItem, errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDescribeAclRuleRequest() - request.Limit = common.Uint64Ptr(20) - request.Offset = common.Uint64Ptr(0) - request.Filters = []*cfw.CommonFilter{ - { - Name: common.StringPtr("Id"), - Values: common.StringPtrs([]string{uuid}), - OperatorType: common.Int64Ptr(1), - }, - } - - 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.UseCfwClient().DescribeAclRule(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()) - - if len(response.Response.Data) < 1 { - return - } - - edgePolicy = response.Response.Data[0] - return -} - -func (me *CfwService) DeleteCfwEdgePolicyById(ctx context.Context, uuid string) (errRet error) { - logId := getLogId(ctx) - - request := cfw.NewRemoveAclRuleRequest() - uuidInt, _ := strconv.ParseInt(uuid, 10, 64) - request.RuleUuid = common.Int64Ptrs([]int64{uuidInt}) - - 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.UseCfwClient().RemoveAclRule(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 -} - -func (me *CfwService) DescribeCfwNatInstanceById(ctx context.Context, natinsId string) (natInstance *cfw.NatInstanceInfo, errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDescribeNatFwInstancesInfoRequest() - request.Offset = common.Int64Ptr(0) - request.Limit = common.Int64Ptr(10) - request.Filter = []*cfw.NatFwFilter{ - { - FilterType: common.StringPtr("NatinsId"), - FilterContent: common.StringPtr(natinsId), - }, - } - - 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.UseCfwClient().DescribeNatFwInstancesInfo(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()) - - if len(response.Response.NatinsLst) < 1 { - return - } - - natInstance = response.Response.NatinsLst[0] - return -} - -func (me *CfwService) DescribeCfwEipsById(ctx context.Context, instanceId string) (gwList []string, errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDescribeCfwEipsRequest() - request.Mode = common.Uint64Ptr(1) - request.NatGatewayId = common.StringPtr("ALL") - request.CfwInstance = common.StringPtr(instanceId) - - 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.UseCfwClient().DescribeCfwEips(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()) - - if len(response.Response.NatFwEipList) < 1 { - return - } - - for _, item := range response.Response.NatFwEipList { - gwList = append(gwList, *item.NatGatewayId) - } - - return -} - -func (me *CfwService) DeleteCfwNatInstanceById(ctx context.Context, instanceId string) (errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDeleteNatFwInstanceRequest() - request.CfwInstance = &instanceId - - 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.UseCfwClient().DeleteNatFwInstance(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 -} - -func (me *CfwService) DescribeNatFwVpcDnsLstById(ctx context.Context, instanceId string) (vpcList []string, errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDescribeNatFwVpcDnsLstRequest() - request.NatFwInsId = &instanceId - request.Offset = common.Int64Ptr(0) - request.Limit = common.Int64Ptr(10) - - 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.UseCfwClient().DescribeNatFwVpcDnsLst(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()) - - if len(response.Response.VpcDnsSwitchLst) < 1 { - return - } - - for _, item := range response.Response.VpcDnsSwitchLst { - vpcList = append(vpcList, *item.VpcId) - } - - return -} - -func (me *CfwService) DescribeCfwNatPolicyById(ctx context.Context, uuid string) (natPolicy *cfw.DescAcItem, errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDescribeNatAcRuleRequest() - request.Limit = common.Uint64Ptr(20) - request.Offset = common.Uint64Ptr(0) - request.Filters = []*cfw.CommonFilter{ - { - Name: common.StringPtr("Id"), - Values: common.StringPtrs([]string{uuid}), - OperatorType: common.Int64Ptr(1), - }, - } - - 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.UseCfwClient().DescribeNatAcRule(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()) - - if len(response.Response.Data) < 1 { - return - } - - natPolicy = response.Response.Data[0] - return -} - -func (me *CfwService) DeleteCfwNatPolicyById(ctx context.Context, uuid string) (errRet error) { - logId := getLogId(ctx) - - request := cfw.NewRemoveNatAcRuleRequest() - uuidInt, _ := strconv.ParseInt(uuid, 10, 64) - request.RuleUuid = common.Int64Ptrs([]int64{uuidInt}) - - 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.UseCfwClient().RemoveNatAcRule(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 -} - -func (me *CfwService) DescribeCfwVpcInstanceById(ctx context.Context, fwGroupId string) (vpcInstance *cfw.VpcFwGroupInfo, errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDescribeFwGroupInstanceInfoRequest() - request.Filters = []*cfw.CommonFilter{ - { - Name: common.StringPtr("FwGroupId"), - Values: common.StringPtrs([]string{fwGroupId}), - OperatorType: common.Int64Ptr(1), - }, - } - request.Limit = common.Int64Ptr(10) - request.Offset = common.Int64Ptr(0) - - 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.UseCfwClient().DescribeFwGroupInstanceInfo(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()) - - if len(response.Response.VpcFwGroupLst) < 1 { - return - } - - vpcInstance = response.Response.VpcFwGroupLst[0] - return -} - -func (me *CfwService) DeleteCfwVpcInstanceById(ctx context.Context, fwGroupId string) (errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDeleteVpcFwGroupRequest() - request.FwGroupId = &fwGroupId - request.DeleteFwGroup = common.Int64Ptr(1) - - 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.UseCfwClient().DeleteVpcFwGroup(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 -} - -func (me *CfwService) DescribeFwGroupInstanceInfoById(ctx context.Context, fwGroupId string) (vpcFwGroupInfo *cfw.VpcFwGroupInfo, errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDescribeFwGroupInstanceInfoRequest() - request.Offset = common.Int64Ptr(0) - request.Limit = common.Int64Ptr(10) - request.Filters = []*cfw.CommonFilter{ - { - Name: common.StringPtr("FwGroupId"), - Values: common.StringPtrs([]string{fwGroupId}), - OperatorType: common.Int64Ptr(1), - }, - } - - 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.UseCfwClient().DescribeFwGroupInstanceInfo(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()) - - if len(response.Response.VpcFwGroupLst) < 1 { - return - } - - vpcFwGroupInfo = response.Response.VpcFwGroupLst[0] - return -} - -func (me *CfwService) DescribeCfwVpcPolicyById(ctx context.Context, uuid string) (vpcPolicy *cfw.VpcRuleItem, errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDescribeVpcAcRuleRequest() - request.Filters = []*cfw.CommonFilter{ - { - Name: common.StringPtr("Id"), - Values: common.StringPtrs([]string{uuid}), - OperatorType: common.Int64Ptr(1), - }, - } - request.Limit = common.Uint64Ptr(20) - request.Offset = common.Uint64Ptr(0) - - 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.UseCfwClient().DescribeVpcAcRule(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()) - - if len(response.Response.Data) < 1 { - return - } - - vpcPolicy = response.Response.Data[0] - return -} - -func (me *CfwService) DeleteCfwVpcPolicyById(ctx context.Context, uuid string) (errRet error) { - logId := getLogId(ctx) - - request := cfw.NewRemoveVpcAcRuleRequest() - uuidInt, _ := strconv.ParseInt(uuid, 10, 64) - request.RuleUuids = common.Int64Ptrs([]int64{uuidInt}) - - 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.UseCfwClient().RemoveVpcAcRule(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 -} - -func (me *CfwService) DescribeCfwNatFirewallSwitchById(ctx context.Context, natInsId, subnetId string) (natFirewallSwitch *cfw.NatSwitchListData, errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDescribeNatSwitchListRequest() - request.Offset = common.Int64Ptr(0) - request.Limit = common.Int64Ptr(20) - request.NatInsId = &natInsId - searchParam := fmt.Sprintf(`{"SubnetId":"%s"}`, subnetId) - request.SearchValue = &searchParam - - 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.UseCfwClient().DescribeNatSwitchList(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()) - - if len(response.Response.Data) < 1 { - return - } - - natFirewallSwitch = response.Response.Data[0] - return -} - -func (me *CfwService) DescribeCfwNatFwSwitchesByFilter(ctx context.Context, param map[string]interface{}) (natFwSwitches []*cfw.NatSwitchListData, errRet error) { - var ( - logId = getLogId(ctx) - request = cfw.NewDescribeNatSwitchListRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "Status" { - request.Status = v.(*int64) - } - - if k == "NatInsId" { - request.NatInsId = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset int64 = 0 - limit int64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseCfwClient().DescribeNatSwitchList(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()) - - if response == nil || len(response.Response.Data) < 1 { - break - } - - natFwSwitches = append(natFwSwitches, response.Response.Data...) - if len(response.Response.Data) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *CfwService) DescribeCfwVpcFirewallSwitchById(ctx context.Context, vpcInsId, switchId string) (vpcFirewallSwitch *cfw.FwGroupSwitchShow, errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDescribeVpcFwGroupSwitchRequest() - request.Filters = []*cfw.CommonFilter{ - { - Name: common.StringPtr("SwitchId"), - Values: common.StringPtrs([]string{switchId}), - OperatorType: common.Int64Ptr(1), - }, - { - Name: common.StringPtr("FwGroupId"), - Values: common.StringPtrs([]string{vpcInsId}), - OperatorType: common.Int64Ptr(1), - }, - } - request.Limit = common.Uint64Ptr(20) - request.Offset = common.Uint64Ptr(0) - - 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.UseCfwClient().DescribeVpcFwGroupSwitch(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()) - - if len(response.Response.SwitchList) < 1 { - return - } - - vpcFirewallSwitch = response.Response.SwitchList[0] - return -} - -func (me *CfwService) DescribeCfwVpcFwSwitchesByFilter(ctx context.Context, vpcInsId string) (vpcFirewallSwitch []*cfw.FwGroupSwitchShow, errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDescribeVpcFwGroupSwitchRequest() - request.Filters = []*cfw.CommonFilter{ - { - Name: common.StringPtr("FwGroupId"), - Values: common.StringPtrs([]string{vpcInsId}), - OperatorType: common.Int64Ptr(1), - }, - } - - 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()) - - var ( - offset uint64 = 0 - limit uint64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseCfwClient().DescribeVpcFwGroupSwitch(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()) - - if response == nil || len(response.Response.SwitchList) < 1 { - break - } - - vpcFirewallSwitch = append(vpcFirewallSwitch, response.Response.SwitchList...) - if len(response.Response.SwitchList) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *CfwService) DescribeCfwEdgeFwSwitchesByFilter(ctx context.Context) (edgeFwSwitches []*cfw.EdgeIpInfo, errRet error) { - var ( - logId = getLogId(ctx) - request = cfw.NewDescribeFwEdgeIpsRequest() - ) - - 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()) - - var ( - offset int64 = 0 - limit int64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseCfwClient().DescribeFwEdgeIps(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()) - - if response == nil || len(response.Response.Data) < 1 { - break - } - - edgeFwSwitches = append(edgeFwSwitches, response.Response.Data...) - if len(response.Response.Data) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *CfwService) DescribeCfwEdgeFirewallSwitchById(ctx context.Context, publicIp string) (edgeFirewallSwitch *cfw.EdgeIpInfo, errRet error) { - logId := getLogId(ctx) - - request := cfw.NewDescribeFwEdgeIpsRequest() - request.Filters = []*cfw.CommonFilter{ - { - Name: common.StringPtr("PublicIp"), - Values: common.StringPtrs([]string{publicIp}), - OperatorType: common.Int64Ptr(1), - }, - } - - 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.UseCfwClient().DescribeFwEdgeIps(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()) - - if len(response.Response.Data) < 1 { - return - } - - edgeFirewallSwitch = response.Response.Data[0] - return -} diff --git a/tencentcloud/service_tencentcloud_chdfs.go b/tencentcloud/service_tencentcloud_chdfs.go deleted file mode 100644 index edc3104b15..0000000000 --- a/tencentcloud/service_tencentcloud_chdfs.go +++ /dev/null @@ -1,464 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - - chdfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs/v20201112" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" -) - -type ChdfsService struct { - client *connectivity.TencentCloudClient -} - -func (me *ChdfsService) DescribeChdfsAccessGroupById(ctx context.Context, accessGroupId string) (accessGroup *chdfs.AccessGroup, errRet error) { - logId := getLogId(ctx) - - request := chdfs.NewDescribeAccessGroupRequest() - request.AccessGroupId = &accessGroupId - - 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.UseChdfsClient().DescribeAccessGroup(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()) - - if response.Response.AccessGroup == nil { - return - } - - accessGroup = response.Response.AccessGroup - return -} - -func (me *ChdfsService) DeleteChdfsAccessGroupById(ctx context.Context, accessGroupId string) (errRet error) { - logId := getLogId(ctx) - - request := chdfs.NewDeleteAccessGroupRequest() - request.AccessGroupId = &accessGroupId - - 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.UseChdfsClient().DeleteAccessGroup(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 -} - -func (me *ChdfsService) DescribeChdfsFileSystemById(ctx context.Context, fileSystemId string) (fileSystem *chdfs.FileSystem, errRet error) { - logId := getLogId(ctx) - - request := chdfs.NewDescribeFileSystemRequest() - request.FileSystemId = &fileSystemId - - 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.UseChdfsClient().DescribeFileSystem(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()) - - if response.Response.FileSystem == nil { - return - } - - fileSystem = response.Response.FileSystem - return -} - -func (me *ChdfsService) DeleteChdfsFileSystemById(ctx context.Context, fileSystemId string) (errRet error) { - logId := getLogId(ctx) - - request := chdfs.NewDeleteFileSystemRequest() - request.FileSystemId = &fileSystemId - - 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.UseChdfsClient().DeleteFileSystem(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 -} - -func (me *ChdfsService) ChdfsFileSystemStateRefreshFunc(fileSystemId string, failStates []string) resource.StateRefreshFunc { - return func() (interface{}, string, error) { - ctx := contextNil - - object, err := me.DescribeChdfsFileSystemById(ctx, fileSystemId) - - if err != nil { - return nil, "", err - } - - return object, helper.UInt64ToStr(*object.Status), nil - } -} - -func (me *ChdfsService) DescribeChdfsAccessRulesById(ctx context.Context, accessGroupId string, accessRuleId string) (accessRule *chdfs.AccessRule, errRet error) { - logId := getLogId(ctx) - - request := chdfs.NewDescribeAccessRulesRequest() - request.AccessGroupId = &accessGroupId - - 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.UseChdfsClient().DescribeAccessRules(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()) - - if len(response.Response.AccessRules) < 1 { - return - } - - for _, rule := range response.Response.AccessRules { - if *rule.AccessRuleId == helper.StrToUInt64(accessRuleId) { - accessRule = rule - break - } - } - return -} - -func (me *ChdfsService) DeleteChdfsAccessRulesById(ctx context.Context, accessRuleId string) (errRet error) { - logId := getLogId(ctx) - - request := chdfs.NewDeleteAccessRulesRequest() - request.AccessRuleIds = []*uint64{helper.StrToUint64Point(accessRuleId)} - - 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.UseChdfsClient().DeleteAccessRules(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 -} - -func (me *ChdfsService) DescribeChdfsLifeCycleRuleById(ctx context.Context, fileSystemId string, lifeCycleRuleId string) (lifeCycleRule *chdfs.LifeCycleRule, errRet error) { - logId := getLogId(ctx) - - request := chdfs.NewDescribeLifeCycleRulesRequest() - request.FileSystemId = &fileSystemId - - 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.UseChdfsClient().DescribeLifeCycleRules(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()) - - if len(response.Response.LifeCycleRules) < 1 { - return - } - - for _, rule := range response.Response.LifeCycleRules { - if *rule.LifeCycleRuleId == helper.StrToUInt64(lifeCycleRuleId) { - lifeCycleRule = rule - break - } - } - return -} - -func (me *ChdfsService) DescribeChdfsLifeCycleRuleByPath(ctx context.Context, fileSystemId string, path string) (lifeCycleRule *chdfs.LifeCycleRule, errRet error) { - logId := getLogId(ctx) - - request := chdfs.NewDescribeLifeCycleRulesRequest() - request.FileSystemId = &fileSystemId - - 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.UseChdfsClient().DescribeLifeCycleRules(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()) - - if len(response.Response.LifeCycleRules) < 1 { - return - } - - for _, rule := range response.Response.LifeCycleRules { - if *rule.Path == path { - lifeCycleRule = rule - break - } - } - return -} - -func (me *ChdfsService) DeleteChdfsLifeCycleRuleById(ctx context.Context, lifeCycleRuleId string) (errRet error) { - logId := getLogId(ctx) - - request := chdfs.NewDeleteLifeCycleRulesRequest() - request.LifeCycleRuleIds = []*uint64{helper.StrToUint64Point(lifeCycleRuleId)} - - 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.UseChdfsClient().DeleteLifeCycleRules(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 -} - -func (me *ChdfsService) DescribeChdfsMountPointById(ctx context.Context, mountPointId string) (mountPoint *chdfs.MountPoint, errRet error) { - logId := getLogId(ctx) - - request := chdfs.NewDescribeMountPointRequest() - request.MountPointId = &mountPointId - - 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.UseChdfsClient().DescribeMountPoint(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()) - - if response.Response.MountPoint == nil { - return - } - - mountPoint = response.Response.MountPoint - return -} - -func (me *ChdfsService) DeleteChdfsMountPointById(ctx context.Context, mountPointId string) (errRet error) { - logId := getLogId(ctx) - - request := chdfs.NewDeleteMountPointRequest() - request.MountPointId = &mountPointId - - 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.UseChdfsClient().DeleteMountPoint(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 -} - -func (me *ChdfsService) DeleteChdfsMountPointAttachmentById(ctx context.Context, mountPointId string, accessGroupIds []*string) (errRet error) { - logId := getLogId(ctx) - - request := chdfs.NewDisassociateAccessGroupsRequest() - request.MountPointId = &mountPointId - request.AccessGroupIds = accessGroupIds - - 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.UseChdfsClient().DisassociateAccessGroups(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 -} - -func (me *ChdfsService) DescribeChdfsAccessGroupsByFilter(ctx context.Context, param map[string]interface{}) (AccessGroups []*chdfs.AccessGroup, errRet error) { - var ( - logId = getLogId(ctx) - request = chdfs.NewDescribeAccessGroupsRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "vpc_id" { - request.VpcId = v.(*string) - } - if k == "owner_uin" { - request.OwnerUin = v.(*uint64) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseChdfsClient().DescribeAccessGroups(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()) - - AccessGroups = response.Response.AccessGroups - - return -} - -func (me *ChdfsService) DescribeChdfsMountPointsByFilter(ctx context.Context, param map[string]interface{}) (MountPoints []*chdfs.MountPoint, errRet error) { - var ( - logId = getLogId(ctx) - request = chdfs.NewDescribeMountPointsRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "file_system_id" { - request.FileSystemId = v.(*string) - } - if k == "access_group_id" { - request.AccessGroupId = v.(*string) - } - if k == "owner_uin" { - request.OwnerUin = v.(*uint64) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseChdfsClient().DescribeMountPoints(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()) - - MountPoints = response.Response.MountPoints - - return -} - -func (me *ChdfsService) DescribeChdfsFileSystems(ctx context.Context) (fileSystems []*chdfs.FileSystem, errRet error) { - var ( - logId = getLogId(ctx) - request = chdfs.NewDescribeFileSystemsRequest() - ) - - 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.UseChdfsClient().DescribeFileSystems(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()) - - fileSystems = response.Response.FileSystems - - return -} diff --git a/tencentcloud/service_tencentcloud_ci.go b/tencentcloud/service_tencentcloud_ci.go deleted file mode 100644 index 8a862f6c96..0000000000 --- a/tencentcloud/service_tencentcloud_ci.go +++ /dev/null @@ -1,312 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - "github.com/tencentyun/cos-go-sdk-v5" -) - -type CiService struct { - client *connectivity.TencentCloudClient -} - -func (me *CiService) DescribeCiBucketById(ctx context.Context, bucket string) (serviceResult *cos.CIServiceResult, errRet error) { - logId := getLogId(ctx) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "GetCIService", bucket, errRet.Error()) - } - }() - - result, response, err := me.client.UsePicClient(bucket).CI.GetCIService(ctx) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s], http status [%s]\n", logId, "GetCIService", bucket, result, response.Status) - - serviceResult = result - return -} - -func (me *CiService) DeleteCiBucketById(ctx context.Context, bucket string) (errRet error) { - logId := getLogId(ctx) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "CloseCIService", bucket, errRet.Error()) - } - }() - - response, err := me.client.UsePicClient(bucket).CI.CloseCIService(ctx) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response status [%s]\n", logId, "CloseCIService", bucket, response.Status) - - return -} - -func (me *CiService) DescribeCiBucketPicStyleById(ctx context.Context, bucket, styleName string) (styleRule *cos.StyleRule, errRet error) { - logId := getLogId(ctx) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "GetStyle", bucket+"#"+styleName, errRet.Error()) - } - }() - - styleResult, response, err := me.client.UsePicClient(bucket).CI.GetStyle(ctx, &cos.GetStyleOptions{ - StyleName: styleName, - }) - if err != nil { - // if response.StatusCode == 400 { - // log.Printf("[CRITAL]%s api[%s] success, request body [%s], response status [%v]\n", logId, "GetStyle", bucket+"#"+styleName, response.StatusCode) - // return - // } - errRet = err - return - } - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response status [%s]\n", logId, "GetStyle", bucket+"#"+styleName, response.Status) - - if len(styleResult.StyleRule) < 1 { - return - } - - styleRule = &styleResult.StyleRule[0] - - return -} - -func (me *CiService) DeleteCiBucketPicStyleById(ctx context.Context, bucket, styleName string) (errRet error) { - logId := getLogId(ctx) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "DeleteStyle", bucket+"#"+styleName, errRet.Error()) - } - }() - - response, err := me.client.UsePicClient(bucket).CI.DeleteStyle(ctx, &cos.DeleteStyleOptions{ - StyleName: styleName, - }) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response status [%s]\n", logId, "DeleteStyle", bucket+"#"+styleName, response.Status) - - return -} - -func (me *CiService) DescribeCiHotLinkById(ctx context.Context, bucket string) (hotLink *cos.HotLinkResult, errRet error) { - logId := getLogId(ctx) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "GetHotLink", bucket, errRet.Error()) - } - }() - - hotLinkResult, response, err := me.client.UsePicClient(bucket).CI.GetHotLink(ctx) - if err != nil { - errRet = err - return - } - - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response status [%s]\n", logId, "GetHotLink", bucket, response.Status) - - if len(hotLinkResult.Url) < 1 { - return - } - - hotLink = hotLinkResult - - return -} - -func (me *CiService) DescribeCiMediaTemplateById(ctx context.Context, bucket, templateId string) (mediaSnapshotTemplate *cos.Template, errRet error) { - logId := getLogId(ctx) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "DescribeMediaTemplate", bucket, errRet.Error()) - } - }() - - response, _, err := me.client.UseCiClient(bucket).CI.DescribeMediaTemplate(ctx, &cos.DescribeMediaTemplateOptions{ - Ids: templateId, - }) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%v, %v], response body [%+v]\n", logId, "DescribeMediaTemplate", bucket, templateId, response) - - if len(response.TemplateList) < 1 { - return - } - - mediaSnapshotTemplate = &response.TemplateList[0] - return -} - -func (me *CiService) DeleteCiMediaTemplateById(ctx context.Context, bucket, templateId string) (errRet error) { - logId := getLogId(ctx) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "DeleteMediaTemplate", bucket, errRet.Error()) - } - }() - - response, _, err := me.client.UseCiClient(bucket).CI.DeleteMediaTemplate(ctx, templateId) - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%+v]\n", logId, "DeleteMediaTemplate", bucket, response) - - return -} - -func (me *CiService) CloseCiOriginalImageProtectionById(ctx context.Context, bucket string) (errRet error) { - logId := getLogId(ctx) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "CloseCIOriginalImageProtection", bucket, errRet.Error()) - } - }() - - _, err := RetryWithContext(ctx, writeRetryTimeout, func(ctx context.Context) (interface{}, error) { - return me.client.UsePicClient(bucket).CI.CloseOriginProtect(ctx) - }) - - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s]\n", logId, "CloseCIOriginalImageProtection", bucket) - - return -} - -func (me *CiService) OpenCiOriginalImageProtectionById(ctx context.Context, bucket string) (errRet error) { - logId := getLogId(ctx) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "OpenCIOriginalImageProtection", bucket, errRet.Error()) - } - }() - - _, err := RetryWithContext(ctx, writeRetryTimeout, func(ctx context.Context) (interface{}, error) { - return me.client.UsePicClient(bucket).CI.OpenOriginProtect(ctx) - }) - - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s]\n", logId, "OpenCIOriginalImageProtection", bucket) - - return -} - -func (me *CiService) GetCiOriginalImageProtectionById(ctx context.Context, bucket string) (*cos.OriginProtectResult, error) { - var errRet error - logId := getLogId(ctx) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "GetCIOriginalImageProtection", bucket, errRet.Error()) - } - }() - - resRaw, err := RetryWithContext(ctx, readRetryTimeout, func(ctx context.Context) (interface{}, error) { - res, _, err := me.client.UsePicClient(bucket).CI.GetOriginProtect(ctx) - return res, err - }) - - if err != nil { - errRet = err - return nil, errRet - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s]\n", logId, "GetCIOriginalImageProtection", bucket) - - return resRaw.(*cos.OriginProtectResult), nil -} - -func (me *CiService) CloseCiGuetzliById(ctx context.Context, bucket string) (errRet error) { - logId := getLogId(ctx) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "CloseCIGuetzli", bucket, errRet.Error()) - } - }() - - _, err := RetryWithContext(ctx, writeRetryTimeout, func(ctx context.Context) (interface{}, error) { - return me.client.UsePicClient(bucket).CI.DeleteGuetzli(ctx) - }) - - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s]\n", logId, "CloseCIGuetzli", bucket) - - return -} - -func (me *CiService) OpenCiGuetzliById(ctx context.Context, bucket string) (errRet error) { - logId := getLogId(ctx) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "OpenCIGuetzli", bucket, errRet.Error()) - } - }() - - _, err := RetryWithContext(ctx, writeRetryTimeout, func(ctx context.Context) (interface{}, error) { - return me.client.UsePicClient(bucket).CI.PutGuetzli(ctx) - }) - - if err != nil { - errRet = err - return - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s]\n", logId, "OpenCIGuetzli", bucket) - - return -} - -func (me *CiService) GetCiGuetzliById(ctx context.Context, bucket string) (*cos.GetGuetzliResult, error) { - var errRet error - logId := getLogId(ctx) - - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "GetCIGuetzli", bucket, errRet.Error()) - } - }() - - resRaw, err := RetryWithContext(ctx, readRetryTimeout, func(ctx context.Context) (interface{}, error) { - res, _, err := me.client.UsePicClient(bucket).CI.GetGuetzli(ctx) - return res, err - }) - - if err != nil { - errRet = err - return nil, errRet - } - log.Printf("[DEBUG]%s api[%s] success, request body [%s]\n", logId, "GetCIGuetzli", bucket) - - return resRaw.(*cos.GetGuetzliResult), nil -} diff --git a/tencentcloud/service_tencentcloud_ciam.go b/tencentcloud/service_tencentcloud_ciam.go deleted file mode 100644 index 0d87afc62e..0000000000 --- a/tencentcloud/service_tencentcloud_ciam.go +++ /dev/null @@ -1,156 +0,0 @@ -package tencentcloud - -import ( - "context" - "log" - - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - - ciam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ciam/v20220331" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" -) - -type CiamService struct { - client *connectivity.TencentCloudClient -} - -func (me *CiamService) DescribeCiamUserGroupById(ctx context.Context, userStoreId string, userGroupId string) (userGroup *ciam.UserGroup, errRet error) { - logId := getLogId(ctx) - - request := ciam.NewListUserGroupsRequest() - request.UserStoreId = &userStoreId - - filter := &ciam.Filter{ - Key: helper.String("UserGroupId"), - Values: []*string{helper.String(userGroupId)}, - } - - request.Filters = append(request.Filters, filter) - - 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()) - - var ( - offset int64 = 1 - limit int64 = 20 - ) - instances := make([]*ciam.UserGroup, 0) - for { - page := ciam.Pageable{ - PageSize: &limit, - PageNumber: &offset, - } - request.Pageable = &page - - response, err := me.client.UseCiamClient().ListUserGroups(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()) - - if response == nil || len(response.Response.Content) < 1 { - break - } - instances = append(instances, response.Response.Content...) - if len(response.Response.Content) < int(limit) { - break - } - - offset += limit - } - - if len(instances) < 1 { - return - } - userGroup = instances[0] - return -} - -func (me *CiamService) DeleteCiamUserGroupById(ctx context.Context, userStoreId string, userGroupId string) (errRet error) { - logId := getLogId(ctx) - - request := ciam.NewDeleteUserGroupsRequest() - request.UserStoreId = &userStoreId - request.UserGroupIds = []*string{&userGroupId} - - 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.UseCiamClient().DeleteUserGroups(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 -} - -func (me *CiamService) DescribeCiamUserStoreById(ctx context.Context, userPoolId string) (userStore *ciam.UserStore, errRet error) { - logId := getLogId(ctx) - - request := ciam.NewListUserStoreRequest() - - 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.UseCiamClient().ListUserStore(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()) - - if len(response.Response.UserStoreSet) < 1 { - return - } - - for _, ins := range response.Response.UserStoreSet { - if *ins.UserStoreId == userPoolId { - userStore = ins - break - } - } - return -} - -func (me *CiamService) DeleteCiamUserStoreById(ctx context.Context, userPoolId string) (errRet error) { - logId := getLogId(ctx) - - request := ciam.NewDeleteUserStoreRequest() - request.UserPoolId = &userPoolId - - 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.UseCiamClient().DeleteUserStore(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 -} diff --git a/tencentcloud/service_tencentcloud_ckafka.go b/tencentcloud/service_tencentcloud_ckafka.go deleted file mode 100644 index 25a9e1ca68..0000000000 --- a/tencentcloud/service_tencentcloud_ckafka.go +++ /dev/null @@ -1,1800 +0,0 @@ -package tencentcloud - -import ( - "context" - "fmt" - "log" - "strconv" - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" -) - -type CkafkaService struct { - client *connectivity.TencentCloudClient -} - -func (me *CkafkaService) CheckCkafkaInstanceReady(ctx context.Context, - instanceId string) (has bool, ready bool, errRet error) { - logId := getLogId(ctx) - var ( - request = ckafka.NewDescribeInstancesDetailRequest() - response = ckafka.NewDescribeInstancesDetailResponse() - info *ckafka.InstanceDetail - ) - 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()) - } - }() - request.InstanceId = &instanceId - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, err := me.client.UseCkafkaClient().DescribeInstancesDetail(request) - if err != nil { - return retryError(err) - } - response = result - return nil - }); err != nil { - log.Printf("[CRITAL]%s read ckafka instance failed, reason: %v", logId, err) - return false, false, err - } - if len(response.Response.Result.InstanceList) < 1 { - return - } - has = true - info = response.Response.Result.InstanceList[0] - if *info.Status == 1 { - ready = true - } - return -} - -func (me *CkafkaService) ModifyCkafkaInstanceAttributes(ctx context.Context, - request *ckafka.ModifyInstanceAttributesRequest) (errRet error) { - logId := getLogId(ctx) - ratelimit.Check(request.GetAction()) - _, err := me.client.UseCkafkaClient().ModifyInstanceAttributes(request) - if err != nil { - return fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, - request.GetAction(), request.ToJsonString(), err.Error()) - } - return -} - -func (me *CkafkaService) DescribeCkafkaInstanceById(ctx context.Context, - instanceId string) (info *ckafka.InstanceDetail, has bool, errRet error) { - logId := getLogId(ctx) - var ( - request = ckafka.NewDescribeInstancesDetailRequest() - response = ckafka.NewDescribeInstancesDetailResponse() - ) - 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()) - } - }() - request.InstanceId = &instanceId - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, err := me.client.UseCkafkaClient().DescribeInstancesDetail(request) - if err != nil { - return retryError(err) - } - response = result - return nil - }); err != nil { - log.Printf("[CRITAL]%s read ckafka instance failed, reason: %v", logId, err) - return nil, false, err - } - if len(response.Response.Result.InstanceList) < 1 { - return - } - has = true - info = response.Response.Result.InstanceList[0] - return -} - -func (me *CkafkaService) CreateUser(ctx context.Context, instanceId, user, password string) (errRet error) { - logId := getLogId(ctx) - request := ckafka.NewCreateUserRequest() - request.InstanceId = &instanceId - request.Name = &user - request.Password = &password - - var response *ckafka.CreateUserResponse - var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, err = me.client.UseCkafkaClient().CreateUser(request) - if err != nil { - return retryError(err) - } - return nil - }) - - if err != nil { - return err - } - if response != nil && response.Response != nil && !me.OperateStatusCheck(ctx, response.Response.Result) { - return fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) - } - return nil -} - -func (me *CkafkaService) OperateStatusCheck(ctx context.Context, result *ckafka.JgwOperateResponse) (isSucceed bool) { - logId := getLogId(ctx) - if result == nil { - log.Printf("[CRITAL]%s OperateStatusCheck fail, result is nil", logId) - return false - } - - if result != nil && *result.ReturnCode == "0" { - return true - } else { - return false - } -} - -func (me *CkafkaService) DescribeUserByUserId(ctx context.Context, userId string) (userInfo *ckafka.User, has bool, errRet error) { - logId := getLogId(ctx) - - items := strings.Split(userId, FILED_SP) - if len(items) != 2 { - errRet = fmt.Errorf("id of resource.tencentcloud_ckafka_user is wrong") - return - } - instanceId, user := items[0], items[1] - - if _, has, _ = me.DescribeInstanceById(ctx, instanceId); !has { - return - } - - request := ckafka.NewDescribeUserRequest() - request.InstanceId = &instanceId - request.SearchWord = &user - - var response *ckafka.DescribeUserResponse - var err error - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - response, err = me.client.UseCkafkaClient().DescribeUser(request) - if err != nil { - return retryError(err) - } - return nil - }) - - if err != nil { - errRet = fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) - return - } - - if response != nil && response.Response != nil && response.Response.Result != nil && response.Response.Result.Users != nil { - if len(response.Response.Result.Users) < 1 { - has = false - return - } else if len(response.Response.Result.Users) > 1 { - errRet = fmt.Errorf("[CRITAL]%s dumplicated users found", logId) - return - } - - userInfo = response.Response.Result.Users[0] - has = true - return - } - - return -} - -func (me *CkafkaService) ModifyPassword(ctx context.Context, instanceId, user, oldPasswd, newPasswd string) (errRet error) { - logId := getLogId(ctx) - request := ckafka.NewModifyPasswordRequest() - request.InstanceId = &instanceId - request.Name = &user - request.Password = &oldPasswd - request.PasswordNew = &newPasswd - - var response *ckafka.ModifyPasswordResponse - var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, err = me.client.UseCkafkaClient().ModifyPassword(request) - if err != nil { - return retryError(err) - } - return nil - }) - - if err != nil { - return err - } - if response != nil && response.Response != nil && !me.OperateStatusCheck(ctx, response.Response.Result) { - return fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) - } - return nil -} - -func (me *CkafkaService) DeleteUser(ctx context.Context, userId string) (errRet error) { - logId := getLogId(ctx) - - items := strings.Split(userId, FILED_SP) - if len(items) != 2 { - errRet = fmt.Errorf("id of resource.tencentcloud_ckafka_user is wrong") - return - } - instanceId, user := items[0], items[1] - - request := ckafka.NewDeleteUserRequest() - request.InstanceId = &instanceId - request.Name = &user - - var response *ckafka.DeleteUserResponse - var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, err = me.client.UseCkafkaClient().DeleteUser(request) - if err != nil { - return retryError(err) - } - return nil - }) - - if err != nil { - return err - } - if response != nil && response.Response != nil && !me.OperateStatusCheck(ctx, response.Response.Result) { - return fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) - } - return nil -} - -func (me *CkafkaService) DescribeUserByFilter(ctx context.Context, params map[string]interface{}) (userInfos []*ckafka.User, errRet error) { - logId := getLogId(ctx) - - instanceId := params["instance_id"].(string) - if _, has, _ := me.DescribeInstanceById(ctx, instanceId); !has { - return - } - - request := ckafka.NewDescribeUserRequest() - var offset int64 = 0 - var pageSize = int64(CKAFKA_DESCRIBE_LIMIT) - request.InstanceId = &instanceId - if user, ok := params["account_name"]; ok { - request.SearchWord = helper.String(user.(string)) - } - request.Limit = &pageSize - request.Offset = &offset - - userInfos = make([]*ckafka.User, 0) - for { - var response *ckafka.DescribeUserResponse - var err error - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, err = me.client.UseCkafkaClient().DescribeUser(request) - if err != nil { - return retryError(err) - } - userInfos = append(userInfos, response.Response.Result.Users...) - return nil - }) - if err != nil { - errRet = fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) - return - } else { - if len(response.Response.Result.Users) < CKAFKA_DESCRIBE_LIMIT { - break - } else { - offset += pageSize - } - } - } - return -} - -func (me *CkafkaService) CreateAcl(ctx context.Context, instanceId, resourceType, resourceName, operation, permissionType, host, principal string) (errRet error) { - logId := getLogId(ctx) - request := ckafka.NewCreateAclRequest() - request.InstanceId = &instanceId - request.ResourceType = helper.Int64(CKAFKA_ACL_RESOURCE_TYPE[resourceType]) - request.ResourceName = &resourceName - request.Operation = helper.Int64(CKAFKA_ACL_OPERATION[operation]) - request.PermissionType = helper.Int64(CKAFKA_PERMISSION_TYPE[permissionType]) - request.Host = &host - request.Principal = helper.String(CKAFKA_ACL_PRINCIPAL_STR + principal) - - var response *ckafka.CreateAclResponse - var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, err = me.client.UseCkafkaClient().CreateAcl(request) - if err != nil { - return retryError(err) - } - return nil - }) - - if err != nil { - return err - } - if response != nil && response.Response != nil && !me.OperateStatusCheck(ctx, response.Response.Result) { - return fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) - } - return nil -} - -func (me *CkafkaService) DescribeAclByFilter(ctx context.Context, params map[string]interface{}) (aclInfos []*ckafka.Acl, errRet error) { - logId := getLogId(ctx) - - instanceId := params["instance_id"].(string) - if _, has, _ := me.DescribeInstanceById(ctx, instanceId); !has { - return - } - resourceType := params["resource_type"].(string) - resourceName := params["resource_name"].(string) - if resourceType == "TOPIC" { - if _, has, _ := me.DescribeTopicById(ctx, instanceId+FILED_SP+resourceName); !has { - return - } - } - - request := ckafka.NewDescribeACLRequest() - var offset int64 = 0 - var pageSize = int64(CKAFKA_DESCRIBE_LIMIT) - request.InstanceId = &instanceId - request.ResourceType = helper.Int64(CKAFKA_ACL_RESOURCE_TYPE[resourceType]) - request.ResourceName = helper.String(resourceName) - if host, ok := params["host"]; ok { - request.SearchWord = helper.String(host.(string)) - } - request.Limit = &pageSize - request.Offset = &offset - - aclInfos = make([]*ckafka.Acl, 0) - for { - var response *ckafka.DescribeACLResponse - var err error - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, err = me.client.UseCkafkaClient().DescribeACL(request) - if err != nil { - return retryError(err) - } - aclInfos = append(aclInfos, response.Response.Result.AclList...) - return nil - }) - if err != nil { - errRet = fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) - return - } else { - if len(response.Response.Result.AclList) < CKAFKA_DESCRIBE_LIMIT { - break - } else { - offset += pageSize - } - } - } - return -} - -func (me *CkafkaService) DescribeAclByAclId(ctx context.Context, aclId string) (aclInfo *ckafka.Acl, has bool, errRet error) { - // acl id is organized by "instanceId + FILED_SP + permissionType + FILED_SP + principal + FILED_SP + host + FILED_SP + operation + FILED_SP + resourceType + FILED_SP + resourceName" - items := strings.Split(aclId, FILED_SP) - if len(items) != 7 { - errRet = fmt.Errorf("id of resource.tencentcloud_ckafka_acl is wrong") - return - } - instanceId, permission, principal, host, operation, resourceType, resourceName := items[0], items[1], items[2], items[3], items[4], items[5], items[6] - - var params = map[string]interface{}{ - "instance_id": instanceId, - "resource_type": resourceType, - "resource_name": resourceName, - "host": host, - } - aclInfos, err := me.DescribeAclByFilter(ctx, params) - if err != nil { - errRet = err - return - } - for _, acl := range aclInfos { - if CKAFKA_PERMISSION_TYPE_TO_STRING[*acl.PermissionType] == permission && *acl.Principal == CKAFKA_ACL_PRINCIPAL_STR+principal && CKAFKA_ACL_OPERATION_TO_STRING[*acl.Operation] == operation { - aclInfo = acl - has = true - return - } - } - has = false - return -} - -func (me *CkafkaService) DeleteAcl(ctx context.Context, aclId string) (errRet error) { - logId := getLogId(ctx) - - // acl id is organized by "instanceId + FILED_SP + permissionType + FILED_SP + principal + FILED_SP + host + FILED_SP + operation + FILED_SP + resourceType + FILED_SP + resourceName" - items := strings.Split(aclId, FILED_SP) - if len(items) != 7 { - errRet = fmt.Errorf("id of resource.tencentcloud_ckafka_acl is wrong") - return - } - instanceId, permission, principal, host, operation, resourceType, resourceName := items[0], items[1], items[2], items[3], items[4], items[5], items[6] - - request := ckafka.NewDeleteAclRequest() - request.InstanceId = &instanceId - request.ResourceType = helper.Int64(CKAFKA_ACL_RESOURCE_TYPE[resourceType]) - request.ResourceName = &resourceName - request.Operation = helper.Int64(CKAFKA_ACL_OPERATION[operation]) - request.PermissionType = helper.Int64(CKAFKA_PERMISSION_TYPE[permission]) - request.Host = &host - request.Principal = helper.String(CKAFKA_ACL_PRINCIPAL_STR + principal) - - var response *ckafka.DeleteAclResponse - var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - response, err = me.client.UseCkafkaClient().DeleteAcl(request) - if err != nil { - return retryError(err) - } - return nil - }) - - if err != nil { - return err - } - if response != nil && response.Response != nil && !me.OperateStatusCheck(ctx, response.Response.Result) { - return fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) - } - return nil -} - -func (me *CkafkaService) DescribeInstanceById(ctx context.Context, instanceId string) (instanceInfo *ckafka.InstanceAttributesResponse, has bool, errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDescribeInstanceAttributesRequest() - request.InstanceId = &instanceId - var response *ckafka.DescribeInstanceAttributesResponse - var err error - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, err = me.client.UseCkafkaClient().DescribeInstanceAttributes(request) - if err != nil { - if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { - if sdkErr.Code == CkafkaInstanceNotFound || sdkErr.Code == CkafkaFailedOperation { - return nil - } - } - return retryError(err) - } - return nil - }) - if err != nil { - errRet = fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) - return - } - - if response != nil && response.Response != nil { - if instanceInfo = response.Response.Result; instanceInfo != nil { - has = true - return - } - } - - has = false - return -} - -func (me *CkafkaService) DescribeTopicById(ctx context.Context, topicId string) (topicInfo *ckafka.TopicAttributesResponse, has bool, errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDescribeTopicAttributesRequest() - items := strings.Split(topicId, FILED_SP) - if len(items) != 2 { - errRet = fmt.Errorf("id of resource.tencentcloud_ckafka_topic is wrong") - return - } - instanceId, topicName := items[0], items[1] - request.InstanceId = &instanceId - request.TopicName = &topicName - var response *ckafka.DescribeTopicAttributesResponse - var err error - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - response, err = me.client.UseCkafkaClient().DescribeTopicAttributes(request) - if err != nil { - return retryError(err) - } - return nil - }) - if err != nil { - errRet = fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), err.Error()) - return - } - - if response != nil && response.Response != nil { - if topicInfo = response.Response.Result; topicInfo != nil { - has = true - return - } - } - - has = false - return -} - -func (me *CkafkaService) DescribeCkafkaTopics(ctx context.Context, instanceId string, topicName string) (topicList []*ckafka.TopicDetail, errRet error) { - logId := getLogId(ctx) - request := ckafka.NewDescribeTopicDetailRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.InstanceId = &instanceId - if topicName != "" { - request.SearchWord = &topicName - } - var offset, limit int64 = 0, 20 - request.Offset = &offset - request.Limit = &limit - //check ckafka exist - _, ckafkaExist, errRet := me.DescribeInstanceById(ctx, instanceId) - if errRet != nil { - return - } - if !ckafkaExist { - return - } - for { - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCkafkaClient().DescribeTopicDetail(request) - if err != nil { - errRet = err - return - } - if response == nil || response.Response == nil || response.Response.Result == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) - return - } - topicList = append(topicList, response.Response.Result.TopicList...) - if len(response.Response.Result.TopicList) < int(limit) { - break - } - offset += limit - } - return -} - -func (me *CkafkaService) CreateCkafkaTopic(ctx context.Context, request *ckafka.CreateTopicRequest) (errRet error) { - logId := getLogId(ctx) - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - var response *ckafka.CreateTopicResponse - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - resp, e := me.client.UseCkafkaClient().CreateTopic(request) - if e != nil { - return retryError(e) - } - response = resp - return nil - }) - if errRet != nil { - return - } - if response == nil || response.Response == nil || response.Response.Result == nil { - return fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) - } - if *response.Response.Result.TopicId == "" { - return fmt.Errorf("TencentCloud SDK returns empty ckafka topic ID, %s", request.GetAction()) - } - return nil -} - -func (me *CkafkaService) DescribeCkafkaTopicByName(ctx context.Context, instanceId string, topicName string) (topic *ckafka.TopicDetail, has bool, errRet error) { - var topicList []*ckafka.TopicDetail - errRet = resource.Retry(readRetryTimeout, func() *resource.RetryError { - list, err := me.DescribeCkafkaTopics(ctx, instanceId, topicName) - if err != nil { - return retryError(err) - } - topicList = list - return nil - }) - if errRet != nil { - return - } - for _, v := range topicList { - if *v.TopicName == topicName { - has = true - topic = v - break - } - } - return -} - -func (me *CkafkaService) DescribeCkafkaTopicAttributes(ctx context.Context, instanceId string, topicName string) (topicInfo *ckafka.TopicAttributesResponse, errRet error) { - logId := getLogId(ctx) - request := ckafka.NewDescribeTopicAttributesRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.InstanceId = &instanceId - request.TopicName = &topicName - - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCkafkaClient().DescribeTopicAttributes(request) - if err != nil { - errRet = err - return - } - if response == nil || response.Response == nil || response.Response.Result == nil { - errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) - return - } - topicInfo = response.Response.Result - return -} - -func (me *CkafkaService) AddCkafkaTopicIpWhiteList(ctx context.Context, instanceId string, topicName string, whiteIpList []*string) (errRet error) { - logId := getLogId(ctx) - request := ckafka.NewCreateTopicIpWhiteListRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - request.TopicName = &topicName - request.InstanceId = &instanceId - request.IpWhiteList = whiteIpList - var response *ckafka.CreateTopicIpWhiteListResponse - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - resp, e := me.client.UseCkafkaClient().CreateTopicIpWhiteList(request) - if e != nil { - return retryError(e) - } - response = resp - return nil - }) - if errRet != nil { - return - } - if response == nil || response.Response == nil || response.Response.Result == nil { - return fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) - } - return nil -} - -func (me *CkafkaService) AddCkafkaTopicPartition(ctx context.Context, instanceId string, topicName string, partitionNum int64) (errRet error) { - logId := getLogId(ctx) - request := ckafka.NewCreatePartitionRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - request.TopicName = &topicName - request.InstanceId = &instanceId - request.PartitionNum = &partitionNum - var response *ckafka.CreatePartitionResponse - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - ratelimit.Check(request.GetAction()) - resp, e := me.client.UseCkafkaClient().CreatePartition(request) - if e != nil { - return retryError(e) - } - response = resp - return nil - }) - if errRet != nil { - return - } - if response == nil || response.Response == nil || response.Response.Result == nil { - return fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) - } - return nil -} - -func (me *CkafkaService) RemoveCkafkaTopicIpWhiteList(ctx context.Context, instaneId string, topicName string, whiteIpList []*string) (errRet error) { - logId := getLogId(ctx) - request := ckafka.NewDeleteTopicIpWhiteListRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - request.TopicName = &topicName - request.InstanceId = &instaneId - request.IpWhiteList = whiteIpList - ratelimit.Check(request.GetAction()) - var response *ckafka.DeleteTopicIpWhiteListResponse - errRet = resource.Retry(readRetryTimeout, func() *resource.RetryError { - resp, e := me.client.UseCkafkaClient().DeleteTopicIpWhiteList(request) - if e != nil { - return retryError(e) - } - response = resp - return nil - }) - if errRet != nil { - return - } - if response == nil || response.Response == nil || response.Response.Result == nil { - return fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) - } - return nil -} - -func (me *CkafkaService) DescribeCkafkaById(ctx context.Context, instanceId string) (instance *ckafka.InstanceDetail, has bool, errRet error) { - logId := getLogId(ctx) - request := ckafka.NewDescribeInstancesDetailRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - request.InstanceId = &instanceId - ratelimit.Check(request.GetAction()) - resp, err := me.client.UseCkafkaClient().DescribeInstancesDetail(request) - if err != nil { - has = false - return - } - for _, cKafkaInstance := range resp.Response.Result.InstanceList { - if *cKafkaInstance.InstanceId == instanceId { - has = true - instance = cKafkaInstance - break - } - } - return -} - -func (me *CkafkaService) ModifyCkafkaTopicAttribute(ctx context.Context, request *ckafka.ModifyTopicAttributesRequest) (errRet error) { - logId := getLogId(ctx) - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - - ratelimit.Check(request.GetAction()) - response, errRet := me.client.UseCkafkaClient().ModifyTopicAttributes(request) - if errRet != nil { - return errRet - } - if response == nil || response.Response == nil || response.Response.Result == nil { - return fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) - } - return -} - -func (me *CkafkaService) DeleteCkafkaTopic(ctx context.Context, instanceId string, name string) (errRet error) { - logId := getLogId(ctx) - request := ckafka.NewDeleteTopicRequest() - defer func() { - if errRet != nil { - log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) - } - }() - request.InstanceId = &instanceId - request.TopicName = &name - - ratelimit.Check(request.GetAction()) - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, err := me.client.UseCkafkaClient().DeleteTopic(request) - if err != nil { - return retryError(err) - } - return nil - }) - if errRet != nil { - return - } - //重试超时时间 - errRet = resource.Retry(readRetryTimeout, func() *resource.RetryError { - topicList, err := me.DescribeCkafkaTopics(ctx, instanceId, name) - if err != nil { - return retryError(err) - } - if len(topicList) != 0 { - return resource.RetryableError(fmt.Errorf("this Topic %s Delete Failed", name)) - } - return nil - }) - - if errRet != nil { - return errRet - } - return -} - -func (me *CkafkaService) DescribeCkafkaDatahubTopicById(ctx context.Context, topicName string) (datahubTopic *ckafka.DescribeDatahubTopicResp, errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDescribeDatahubTopicRequest() - request.Name = &topicName - - 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.UseCkafkaClient().DescribeDatahubTopic(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()) - - if response.Response.Result == nil { - return - } - - datahubTopic = response.Response.Result - return -} - -func (me *CkafkaService) DeleteCkafkaDatahubTopicById(ctx context.Context, topicName string) (errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDeleteDatahubTopicRequest() - request.Name = &topicName - - 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.UseCkafkaClient().DeleteDatahubTopic(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 -} - -func (me *CkafkaService) DescribeCkafkaConnectResourceById(ctx context.Context, resourceId string) (connectResource *ckafka.DescribeConnectResourceResp, errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDescribeConnectResourceRequest() - request.ResourceId = &resourceId - - 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.UseCkafkaClient().DescribeConnectResource(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()) - - if response.Response.Result == nil { - return - } - - connectResource = response.Response.Result - return -} - -func (me *CkafkaService) DeleteCkafkaConnectResourceById(ctx context.Context, resourceId string) (errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDeleteConnectResourceRequest() - request.ResourceId = &resourceId - - 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.UseCkafkaClient().DeleteConnectResource(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 -} - -func (me *CkafkaService) CkafkaConnectResourceStateRefreshFunc(resourceId string, failStates []string) resource.StateRefreshFunc { - return func() (interface{}, string, error) { - ctx := contextNil - - object, err := me.DescribeCkafkaConnectResourceById(ctx, resourceId) - - if err != nil { - return nil, "", err - } - - return object, helper.Int64ToStr(*object.Status), nil - } -} - -func (me *CkafkaService) DescribeCkafkaConnectResourceByFilter(ctx context.Context, params map[string]interface{}) (describeConnectResourceResp *ckafka.DescribeConnectResourcesResp, errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDescribeConnectResourcesRequest() - - 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()) - } - }() - offset := 0 - limit := 20 - for k, v := range params { - if k == "type" { - request.Type = helper.String(v.(string)) - } - if k == "search_word" { - request.SearchWord = helper.String(v.(string)) - } - if k == "resource_region" { - request.ResourceRegion = helper.String(v.(string)) - } - if k == "offset" { - offset = v.(int) - } - if k == "limit" { - limit = v.(int) - } - } - - request.Offset = helper.IntInt64(offset) - request.Limit = helper.IntInt64(limit) - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseCkafkaClient().DescribeConnectResources(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()) - - if response == nil || response.Response == nil || response.Response.Result == nil { - errRet = fmt.Errorf("Response is null") - return - } - - describeConnectResourceResp = response.Response.Result - return -} - -func (me *CkafkaService) DescribeCkafkaDatahubTopicByFilter(ctx context.Context, paramMap map[string]interface{}) (result *ckafka.DescribeDatahubTopicsResp, errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDescribeDatahubTopicsRequest() - - 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()) - } - }() - - offset := 0 - limit := 50 - for k, v := range paramMap { - if k == "search_word" { - request.SearchWord = helper.String(v.(string)) - } - if k == "offset" { - offset = v.(int) - } - if k == "limit" { - limit = v.(int) - } - } - request.Limit = helper.IntUint64(limit) - request.Offset = helper.IntUint64(offset) - ratelimit.Check(request.GetAction()) - response, err := me.client.UseCkafkaClient().DescribeDatahubTopics(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()) - - if response == nil || response.Response == nil { - errRet = fmt.Errorf("Response is null") - return - } - - result = response.Response.Result - return -} - -func (me *CkafkaService) DescribeCkafkaDatahubGroupOffsetsByFilter(ctx context.Context, param map[string]interface{}) (groupOffsetTopics []*ckafka.GroupOffsetTopic, errRet error) { - var ( - logId = getLogId(ctx) - request = ckafka.NewDescribeDatahubGroupOffsetsRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "name" { - request.Name = v.(*string) - } - if k == "group" { - request.Group = v.(*string) - } - if k == "search_word" { - request.SearchWord = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset int64 = 0 - limit int64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseCkafkaClient().DescribeDatahubGroupOffsets(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()) - - if response == nil || response.Response == nil || response.Response.Result == nil { - break - } - groupOffsetTopics = append(groupOffsetTopics, response.Response.Result.TopicList...) - if len(response.Response.Result.TopicList) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *CkafkaService) DescribeCkafkaDatahubTaskByFilter(ctx context.Context, param map[string]interface{}) (datahubTaskInfos []*ckafka.DatahubTaskInfo, errRet error) { - var ( - logId = getLogId(ctx) - request = ckafka.NewDescribeDatahubTasksRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "search_word" { - request.SearchWord = v.(*string) - } - if k == "target_type" { - request.TargetType = v.(*string) - } - if k == "task_type" { - request.TaskType = v.(*string) - } - if k == "source_type" { - request.SourceType = v.(*string) - } - if k == "resource" { - request.Resource = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset int64 = 0 - limit int64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseCkafkaClient().DescribeDatahubTasks(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()) - - if response == nil || response.Response == nil || response.Response.Result == nil || len(response.Response.Result.TaskList) < 1 { - break - } - datahubTaskInfos = append(datahubTaskInfos, response.Response.Result.TaskList...) - if len(response.Response.Result.TaskList) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *CkafkaService) DescribeCkafkaGroupByFilter(ctx context.Context, param map[string]interface{}) (groups []*ckafka.DescribeGroup, errRet error) { - var ( - logId = getLogId(ctx) - request = ckafka.NewDescribeGroupRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "instance_id" { - request.InstanceId = v.(*string) - } - if k == "search_word" { - request.SearchWord = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset int64 = 0 - limit int64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseCkafkaClient().DescribeGroup(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()) - - if response == nil || response.Response == nil || len(response.Response.Result.GroupList) < 1 { - break - } - groups = append(groups, response.Response.Result.GroupList...) - if len(response.Response.Result.GroupList) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *CkafkaService) DescribeCkafkaGroupOffsetsByFilter(ctx context.Context, param map[string]interface{}) (groupOffsetTopics []*ckafka.GroupOffsetTopic, errRet error) { - var ( - logId = getLogId(ctx) - request = ckafka.NewDescribeGroupOffsetsRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "instance_id" { - request.InstanceId = v.(*string) - } - if k == "group" { - request.Group = v.(*string) - } - if k == "topics" { - request.Topics = v.([]*string) - } - if k == "search_word" { - request.SearchWord = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset int64 = 0 - limit int64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseCkafkaClient().DescribeGroupOffsets(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()) - - if response == nil || response.Response == nil || response.Response.Result == nil || len(response.Response.Result.TopicList) < 1 { - break - } - groupOffsetTopics = append(groupOffsetTopics, response.Response.Result.TopicList...) - if len(response.Response.Result.TopicList) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *CkafkaService) DescribeCkafkaGroupInfoByFilter(ctx context.Context, param map[string]interface{}) (groupInfo []*ckafka.GroupInfoResponse, errRet error) { - var ( - logId = getLogId(ctx) - request = ckafka.NewDescribeGroupInfoRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "instance_id" { - request.InstanceId = v.(*string) - } - if k == "group_list" { - request.GroupList = v.([]*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseCkafkaClient().DescribeGroupInfo(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()) - - if response == nil || response.Response == nil { - errRet = fmt.Errorf("Response body is null") - return - } - groupInfo = response.Response.Result - - return -} - -func (me *CkafkaService) DescribeCkafkaTaskStatusByFilter(ctx context.Context, flowId int) (taskStatus *ckafka.TaskStatusResponse, errRet error) { - var ( - logId = getLogId(ctx) - request = ckafka.NewDescribeTaskStatusRequest() - ) - - 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()) - } - }() - - request.FlowId = helper.IntInt64(flowId) - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseCkafkaClient().DescribeTaskStatus(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()) - - if response == nil || response.Response == nil { - errRet = fmt.Errorf("Response body is null") - return - } - taskStatus = response.Response.Result - - return -} - -func (me *CkafkaService) DescribeCkafkaTopicFlowRankingByFilter(ctx context.Context, param map[string]interface{}) (topicFlowRanking *ckafka.TopicFlowRankingResult, errRet error) { - var ( - logId = getLogId(ctx) - request = ckafka.NewDescribeTopicFlowRankingRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "instance_id" { - request.InstanceId = v.(*string) - } - if k == "ranking_type" { - request.RankingType = v.(*string) - } - if k == "begin_date" { - request.BeginDate = v.(*string) - } - if k == "end_date" { - request.EndDate = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseCkafkaClient().DescribeTopicFlowRanking(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()) - - if response == nil || response.Response == nil { - errRet = fmt.Errorf("Response body is null") - return - } - topicFlowRanking = response.Response.Result - - return -} - -func (me *CkafkaService) DescribeCkafkaTopicProduceConnectionByFilter(ctx context.Context, param map[string]interface{}) (topicProduceConnection []*ckafka.DescribeConnectInfoResultDTO, errRet error) { - var ( - logId = getLogId(ctx) - request = ckafka.NewDescribeTopicProduceConnectionRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "instance_id" { - request.InstanceId = v.(*string) - } - if k == "topic_name" { - request.TopicName = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseCkafkaClient().DescribeTopicProduceConnection(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()) - - if response == nil || response.Response == nil { - errRet = fmt.Errorf("Response body is null") - return - } - topicProduceConnection = response.Response.Result - - return -} - -func (me *CkafkaService) DescribeCkafkaTopicSubscribeGroupByFilter(ctx context.Context, param map[string]interface{}) (groupInfos []*ckafka.GroupInfoResponse, errRet error) { - var ( - logId = getLogId(ctx) - request = ckafka.NewDescribeTopicSubscribeGroupRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "InstanceId" { - request.InstanceId = v.(*string) - } - if k == "TopicName" { - request.TopicName = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset uint64 = 0 - limit uint64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseCkafkaClient().DescribeTopicSubscribeGroup(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()) - - if response == nil || response.Response == nil || response.Response.Result == nil || len(response.Response.Result.GroupsInfo) < 1 { - break - } - groupInfos = append(groupInfos, response.Response.Result.GroupsInfo...) - if len(response.Response.Result.GroupsInfo) < int(limit) { - break - } - - offset += limit - } - - return -} - -func (me *CkafkaService) DescribeCkafkaTopicSyncReplicaByFilter(ctx context.Context, param map[string]interface{}) (topicInSyncReplicaInfos []*ckafka.TopicInSyncReplicaInfo, errRet error) { - var ( - logId = getLogId(ctx) - request = ckafka.NewDescribeTopicSyncReplicaRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "instance_id" { - request.InstanceId = v.(*string) - } - if k == "topic_name" { - request.TopicName = v.(*string) - } - if k == "out_of_sync_replica_only" { - request.OutOfSyncReplicaOnly = v.(*bool) - } - } - - ratelimit.Check(request.GetAction()) - - var ( - offset uint64 = 0 - limit int64 = 20 - ) - for { - request.Offset = &offset - request.Limit = &limit - response, err := me.client.UseCkafkaClient().DescribeTopicSyncReplica(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()) - - if response == nil || response.Response == nil || response.Response.Result == nil || len(response.Response.Result.TopicInSyncReplicaList) < 1 { - break - } - topicInSyncReplicaInfos = append(topicInSyncReplicaInfos, response.Response.Result.TopicInSyncReplicaList...) - if len(response.Response.Result.TopicInSyncReplicaList) < int(limit) { - break - } - - offset += uint64(limit) - } - - return -} - -func (me *CkafkaService) DescribeCkafkaAclRuleById(ctx context.Context, instanceId string, ruleName string) (aclRule *ckafka.AclRule, errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDescribeAclRuleRequest() - request.InstanceId = &instanceId - request.RuleName = &ruleName - - 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.UseCkafkaClient().DescribeAclRule(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()) - - if response == nil || response.Response == nil || response.Response.Result == nil || len(response.Response.Result.AclRuleList) < 1 { - return - } - - aclRule = response.Response.Result.AclRuleList[0] - return -} - -func (me *CkafkaService) DeleteCkafkaAclRuleById(ctx context.Context, instanceId string, ruleName string) (errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDeleteAclRuleRequest() - request.InstanceId = &instanceId - request.RuleName = &ruleName - - 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.UseCkafkaClient().DeleteAclRule(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 -} - -func (me *CkafkaService) DescribeCkafkaConsumerGroupById(ctx context.Context, instanceId string, groupName string) (consumerGroup *ckafka.ConsumerGroupResponse, errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDescribeConsumerGroupRequest() - request.InstanceId = &instanceId - request.GroupName = &groupName - - 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.UseCkafkaClient().DescribeConsumerGroup(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()) - - if response == nil || response.Response == nil || response.Response.Result == nil { - return - } - - consumerGroup = response.Response.Result - return -} - -func (me *CkafkaService) DeleteCkafkaConsumerGroupById(ctx context.Context, instanceId string, groupName string) (errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDeleteGroupRequest() - request.InstanceId = &instanceId - request.Group = &groupName - - 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.UseCkafkaClient().DeleteGroup(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 -} - -func (me *CkafkaService) DeleteCkafkaDatahubTaskById(ctx context.Context, taskId string) (errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDeleteDatahubTaskRequest() - request.TaskId = &taskId - - 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.UseCkafkaClient().DeleteDatahubTask(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 -} - -func (me *CkafkaService) DescribeDatahubTask(ctx context.Context, taskId string) (result *ckafka.DescribeDatahubTaskRes, errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDescribeDatahubTaskRequest() - request.TaskId = &taskId - - 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.UseCkafkaClient().DescribeDatahubTask(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()) - if response == nil || response.Response == nil || response.Response.Result == nil { - errRet = fmt.Errorf("Response body is null") - return - } - result = response.Response.Result - return -} - -func (me *CkafkaService) CkafkaDatahubTaskStateRefreshFunc(taskId string, failStates []string) resource.StateRefreshFunc { - return func() (interface{}, string, error) { - ctx := contextNil - - object, err := me.DescribeDatahubTask(ctx, taskId) - - if err != nil { - return nil, "", err - } - - return object, helper.Int64ToStr(*object.Status), nil - } -} - -func (me *CkafkaService) DescribeCkafkaCkafkaZoneByFilter(ctx context.Context, param map[string]interface{}) (ckafkaZone *ckafka.ZoneResponse, errRet error) { - var ( - logId = getLogId(ctx) - request = ckafka.NewDescribeCkafkaZoneRequest() - ) - - 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()) - } - }() - - for k, v := range param { - if k == "CdcId" { - request.CdcId = v.(*string) - } - } - - ratelimit.Check(request.GetAction()) - - response, err := me.client.UseCkafkaClient().DescribeCkafkaZone(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()) - - if response == nil || response.Response == nil { - errRet = fmt.Errorf("Response body is null") - return - } - ckafkaZone = response.Response.Result - - return -} - -func (me *CkafkaService) DescribeCkafkaRouteById(ctx context.Context, instanceId string, routeId int64) (route *ckafka.Route, errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDescribeRouteRequest() - request.InstanceId = &instanceId - request.RouteId = &routeId - - 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.UseCkafkaClient().DescribeRoute(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()) - - if response.Response == nil || response.Response.Result == nil || len(response.Response.Result.Routers) < 1 { - return - } - - route = response.Response.Result.Routers[0] - return -} - -func (me *CkafkaService) DeleteCkafkaRouteById(ctx context.Context, instanceId string, routeId int64) (errRet error) { - logId := getLogId(ctx) - - request := ckafka.NewDeleteRouteRequest() - request.InstanceId = &instanceId - request.RouteId = &routeId - - 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.UseCkafkaClient().DeleteRoute(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()) - // response.Response.Result.Data.FlowId - return -} - -func (me *CkafkaService) CkafkaRouteStateRefreshFunc(flowId int64, failStates []string) resource.StateRefreshFunc { - return func() (interface{}, string, error) { - request := ckafka.NewDescribeTaskStatusRequest() - request.FlowId = helper.Int64(flowId) - object, err := me.client.UseCkafkaClient().DescribeTaskStatus(request) - - if err != nil { - return nil, "", err - } - status := strconv.FormatInt(*object.Response.Result.Status, 10) - return object, status, nil - } -} From c86c5d345ef5e0e222e48ef88f8601c691701c69 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 14:06:25 +0800 Subject: [PATCH 19/31] refactor: migrate package tencentcloud/services/cls --- tencentcloud/provider.go | 39 +- ...ata_source_tc_cls_machine_group_configs.go | 23 +- ...ource_tc_cls_machine_group_configs_test.go | 10 +- .../cls}/data_source_tc_cls_machines.go | 23 +- .../cls}/data_source_tc_cls_machines_test.go | 10 +- .../cls}/data_source_tc_cls_shipper_tasks.go | 23 +- .../data_source_tc_cls_shipper_tasks_test.go | 10 +- tencentcloud/services/cls/extension_tags.go | 3 + .../cls}/resource_tc_cls_alarm.go | 65 +-- .../cls}/resource_tc_cls_alarm_notice.go | 65 +-- .../cls}/resource_tc_cls_alarm_notice_test.go | 8 +- .../cls}/resource_tc_cls_alarm_test.go | 8 +- .../cls}/resource_tc_cls_ckafka_consumer.go | 51 ++- .../resource_tc_cls_ckafka_consumer_test.go | 8 +- .../cls}/resource_tc_cls_config.go | 45 +- .../cls}/resource_tc_cls_config_attachment.go | 39 +- .../resource_tc_cls_config_attachment_test.go | 8 +- .../cls}/resource_tc_cls_config_extra.go | 45 +- .../cls}/resource_tc_cls_config_extra_test.go | 8 +- .../cls}/resource_tc_cls_config_test.go | 12 +- .../cls}/resource_tc_cls_cos_recharge.go | 51 ++- .../cls}/resource_tc_cls_cos_recharge_test.go | 8 +- .../cls}/resource_tc_cls_cos_shipper.go | 45 +- .../cls}/resource_tc_cls_cos_shipper_test.go | 19 +- .../cls}/resource_tc_cls_data_transform.go | 51 ++- .../resource_tc_cls_data_transform_test.go | 26 +- .../cls}/resource_tc_cls_export.go | 45 +- .../cls}/resource_tc_cls_export_test.go | 8 +- .../cls}/resource_tc_cls_index.go | 53 +-- .../cls}/resource_tc_cls_kafka_recharge.go | 57 +-- .../resource_tc_cls_kafka_recharge_test.go | 30 +- .../cls}/resource_tc_cls_logset.go | 65 +-- .../cls}/resource_tc_cls_logset_test.go | 36 +- .../cls}/resource_tc_cls_machine_group.go | 45 +- .../resource_tc_cls_machine_group_test.go | 36 +- .../cls}/resource_tc_cls_scheduled_sql.go | 51 ++- .../resource_tc_cls_scheduled_sql_test.go | 26 +- .../cls}/resource_tc_cls_topic.go | 45 +- .../cls}/resource_tc_cls_topic_test.go | 36 +- .../cls}/service_tencentcloud_cls.go | 81 ++-- .../services/cls/service_tencentcloud_tag.go | 415 ++++++++++++++++++ 41 files changed, 1120 insertions(+), 612 deletions(-) rename tencentcloud/{ => services/cls}/data_source_tc_cls_machine_group_configs.go (95%) rename tencentcloud/{ => services/cls}/data_source_tc_cls_machine_group_configs_test.go (72%) rename tencentcloud/{ => services/cls}/data_source_tc_cls_machines.go (84%) rename tencentcloud/{ => services/cls}/data_source_tc_cls_machines_test.go (72%) rename tencentcloud/{ => services/cls}/data_source_tc_cls_shipper_tasks.go (86%) rename tencentcloud/{ => services/cls}/data_source_tc_cls_shipper_tasks_test.go (63%) create mode 100644 tencentcloud/services/cls/extension_tags.go rename tencentcloud/{ => services/cls}/resource_tc_cls_alarm.go (89%) rename tencentcloud/{ => services/cls}/resource_tc_cls_alarm_notice.go (86%) rename tencentcloud/{ => services/cls}/resource_tc_cls_alarm_notice_test.go (90%) rename tencentcloud/{ => services/cls}/resource_tc_cls_alarm_test.go (93%) rename tencentcloud/{ => services/cls}/resource_tc_cls_ckafka_consumer.go (86%) rename tencentcloud/{ => services/cls}/resource_tc_cls_ckafka_consumer_test.go (87%) rename tencentcloud/{ => services/cls}/resource_tc_cls_config.go (93%) rename tencentcloud/{ => services/cls}/resource_tc_cls_config_attachment.go (70%) rename tencentcloud/{ => services/cls}/resource_tc_cls_config_attachment_test.go (91%) rename tencentcloud/{ => services/cls}/resource_tc_cls_config_extra.go (96%) rename tencentcloud/{ => services/cls}/resource_tc_cls_config_extra_test.go (91%) rename tencentcloud/{ => services/cls}/resource_tc_cls_config_test.go (91%) rename tencentcloud/{ => services/cls}/resource_tc_cls_cos_recharge.go (90%) rename tencentcloud/{ => services/cls}/resource_tc_cls_cos_recharge_test.go (87%) rename tencentcloud/{ => services/cls}/resource_tc_cls_cos_shipper.go (91%) rename tencentcloud/{ => services/cls}/resource_tc_cls_cos_shipper_test.go (79%) rename tencentcloud/{ => services/cls}/resource_tc_cls_data_transform.go (81%) rename tencentcloud/{ => services/cls}/resource_tc_cls_data_transform_test.go (83%) rename tencentcloud/{ => services/cls}/resource_tc_cls_export.go (75%) rename tencentcloud/{ => services/cls}/resource_tc_cls_export_test.go (82%) rename tencentcloud/{ => services/cls}/resource_tc_cls_index.go (92%) rename tencentcloud/{ => services/cls}/resource_tc_cls_kafka_recharge.go (91%) rename tencentcloud/{ => services/cls}/resource_tc_cls_kafka_recharge_test.go (79%) rename tencentcloud/{ => services/cls}/resource_tc_cls_logset.go (68%) rename tencentcloud/{ => services/cls}/resource_tc_cls_logset_test.go (68%) rename tencentcloud/{ => services/cls}/resource_tc_cls_machine_group.go (84%) rename tencentcloud/{ => services/cls}/resource_tc_cls_machine_group_test.go (69%) rename tencentcloud/{ => services/cls}/resource_tc_cls_scheduled_sql.go (87%) rename tencentcloud/{ => services/cls}/resource_tc_cls_scheduled_sql_test.go (82%) rename tencentcloud/{ => services/cls}/resource_tc_cls_topic.go (81%) rename tencentcloud/{ => services/cls}/resource_tc_cls_topic_test.go (69%) rename tencentcloud/{ => services/cls}/service_tencentcloud_cls.go (96%) create mode 100644 tencentcloud/services/cls/service_tencentcloud_tag.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index a12e97db26..9d4c0b4391 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ckafka" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ciam" @@ -836,9 +837,9 @@ func Provider() *schema.Provider { "tencentcloud_clickhouse_backup_jobs": cdwch.DataSourceTencentCloudClickhouseBackupJobs(), "tencentcloud_clickhouse_backup_job_detail": cdwch.DataSourceTencentCloudClickhouseBackupJobDetail(), "tencentcloud_clickhouse_backup_tables": cdwch.DataSourceTencentCloudClickhouseBackupTables(), - "tencentcloud_cls_shipper_tasks": dataSourceTencentCloudClsShipperTasks(), - "tencentcloud_cls_machines": dataSourceTencentCloudClsMachines(), - "tencentcloud_cls_machine_group_configs": dataSourceTencentCloudClsMachineGroupConfigs(), + "tencentcloud_cls_shipper_tasks": cls.DataSourceTencentCloudClsShipperTasks(), + "tencentcloud_cls_machines": cls.DataSourceTencentCloudClsMachines(), + "tencentcloud_cls_machine_group_configs": cls.DataSourceTencentCloudClsMachineGroupConfigs(), "tencentcloud_eb_search": dataSourceTencentCloudEbSearch(), "tencentcloud_eb_bus": dataSourceTencentCloudEbBus(), "tencentcloud_eb_event_rules": dataSourceTencentCloudEbEventRules(), @@ -1432,20 +1433,20 @@ func Provider() *schema.Provider { "tencentcloud_private_dns_zone": resourceTencentCloudPrivateDnsZone(), "tencentcloud_private_dns_record": resourceTencentCloudPrivateDnsRecord(), "tencentcloud_private_dns_zone_vpc_attachment": resourceTencentCloudPrivateDnsZoneVpcAttachment(), - "tencentcloud_cls_logset": resourceTencentCloudClsLogset(), - "tencentcloud_cls_topic": resourceTencentCloudClsTopic(), - "tencentcloud_cls_config": resourceTencentCloudClsConfig(), - "tencentcloud_cls_config_extra": resourceTencentCloudClsConfigExtra(), - "tencentcloud_cls_config_attachment": resourceTencentCloudClsConfigAttachment(), - "tencentcloud_cls_machine_group": resourceTencentCloudClsMachineGroup(), - "tencentcloud_cls_cos_shipper": resourceTencentCloudClsCosShipper(), - "tencentcloud_cls_index": resourceTencentCloudClsIndex(), - "tencentcloud_cls_alarm": resourceTencentCloudClsAlarm(), - "tencentcloud_cls_alarm_notice": resourceTencentCloudClsAlarmNotice(), - "tencentcloud_cls_ckafka_consumer": resourceTencentCloudClsCkafkaConsumer(), - "tencentcloud_cls_cos_recharge": resourceTencentCloudClsCosRecharge(), - "tencentcloud_cls_export": resourceTencentCloudClsExport(), - "tencentcloud_cls_data_transform": resourceTencentCloudClsDataTransform(), + "tencentcloud_cls_logset": cls.ResourceTencentCloudClsLogset(), + "tencentcloud_cls_topic": cls.ResourceTencentCloudClsTopic(), + "tencentcloud_cls_config": cls.ResourceTencentCloudClsConfig(), + "tencentcloud_cls_config_extra": cls.ResourceTencentCloudClsConfigExtra(), + "tencentcloud_cls_config_attachment": cls.ResourceTencentCloudClsConfigAttachment(), + "tencentcloud_cls_machine_group": cls.ResourceTencentCloudClsMachineGroup(), + "tencentcloud_cls_cos_shipper": cls.ResourceTencentCloudClsCosShipper(), + "tencentcloud_cls_index": cls.ResourceTencentCloudClsIndex(), + "tencentcloud_cls_alarm": cls.ResourceTencentCloudClsAlarm(), + "tencentcloud_cls_alarm_notice": cls.ResourceTencentCloudClsAlarmNotice(), + "tencentcloud_cls_ckafka_consumer": cls.ResourceTencentCloudClsCkafkaConsumer(), + "tencentcloud_cls_cos_recharge": cls.ResourceTencentCloudClsCosRecharge(), + "tencentcloud_cls_export": cls.ResourceTencentCloudClsExport(), + "tencentcloud_cls_data_transform": cls.ResourceTencentCloudClsDataTransform(), "tencentcloud_lighthouse_instance": resourceTencentCloudLighthouseInstance(), "tencentcloud_lighthouse_firewall_template": resourceTencentCloudLighthouseFirewallTemplate(), "tencentcloud_tem_environment": resourceTencentCloudTemEnvironment(), @@ -1763,8 +1764,8 @@ func Provider() *schema.Provider { "tencentcloud_tse_waf_protection": resourceTencentCloudTseWafProtection(), "tencentcloud_tse_waf_domains": resourceTencentCloudTseWafDomains(), "tencentcloud_clickhouse_instance": cdwch.ResourceTencentCloudClickhouseInstance(), - "tencentcloud_cls_kafka_recharge": resourceTencentCloudClsKafkaRecharge(), - "tencentcloud_cls_scheduled_sql": resourceTencentCloudClsScheduledSql(), + "tencentcloud_cls_kafka_recharge": cls.ResourceTencentCloudClsKafkaRecharge(), + "tencentcloud_cls_scheduled_sql": cls.ResourceTencentCloudClsScheduledSql(), "tencentcloud_eb_event_transform": resourceTencentCloudEbEventTransform(), "tencentcloud_eb_event_bus": resourceTencentCloudEbEventBus(), "tencentcloud_eb_event_rule": resourceTencentCloudEbEventRule(), diff --git a/tencentcloud/data_source_tc_cls_machine_group_configs.go b/tencentcloud/services/cls/data_source_tc_cls_machine_group_configs.go similarity index 95% rename from tencentcloud/data_source_tc_cls_machine_group_configs.go rename to tencentcloud/services/cls/data_source_tc_cls_machine_group_configs.go index 36b41d113a..9f1d4bfb4d 100644 --- a/tencentcloud/data_source_tc_cls_machine_group_configs.go +++ b/tencentcloud/services/cls/data_source_tc_cls_machine_group_configs.go @@ -1,15 +1,18 @@ -package tencentcloud +package cls import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClsMachineGroupConfigs() *schema.Resource { +func DataSourceTencentCloudClsMachineGroupConfigs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClsMachineGroupConfigsRead, Schema: map[string]*schema.Schema{ @@ -233,26 +236,26 @@ func dataSourceTencentCloudClsMachineGroupConfigs() *schema.Resource { } func dataSourceTencentCloudClsMachineGroupConfigsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cls_machine_group_configs.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cls_machine_group_configs.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("group_id"); ok { paramMap["GroupId"] = helper.String(v.(string)) } - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var configs []*cls.ConfigInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClsMachineGroupConfigsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } configs = result return nil @@ -441,7 +444,7 @@ func dataSourceTencentCloudClsMachineGroupConfigsRead(d *schema.ResourceData, me d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cls_machine_group_configs_test.go b/tencentcloud/services/cls/data_source_tc_cls_machine_group_configs_test.go similarity index 72% rename from tencentcloud/data_source_tc_cls_machine_group_configs_test.go rename to tencentcloud/services/cls/data_source_tc_cls_machine_group_configs_test.go index 931cb30305..811bde19c7 100644 --- a/tencentcloud/data_source_tc_cls_machine_group_configs_test.go +++ b/tencentcloud/services/cls/data_source_tc_cls_machine_group_configs_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cls_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudClsMachineGroupConfigsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsMachineGroupConfigsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cls_machine_group_configs.machine_group_configs")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cls_machine_group_configs.machine_group_configs")), }, }, }) diff --git a/tencentcloud/data_source_tc_cls_machines.go b/tencentcloud/services/cls/data_source_tc_cls_machines.go similarity index 84% rename from tencentcloud/data_source_tc_cls_machines.go rename to tencentcloud/services/cls/data_source_tc_cls_machines.go index e6df1e5526..1d71b23715 100644 --- a/tencentcloud/data_source_tc_cls_machines.go +++ b/tencentcloud/services/cls/data_source_tc_cls_machines.go @@ -1,15 +1,18 @@ -package tencentcloud +package cls import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClsMachines() *schema.Resource { +func DataSourceTencentCloudClsMachines() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClsMachinesRead, Schema: map[string]*schema.Schema{ @@ -79,26 +82,26 @@ func dataSourceTencentCloudClsMachines() *schema.Resource { } func dataSourceTencentCloudClsMachinesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cls_machines.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cls_machines.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("group_id"); ok { paramMap["GroupId"] = helper.String(v.(string)) } - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var machines []*cls.MachineInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClsMachinesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } machines = result return nil @@ -156,7 +159,7 @@ func dataSourceTencentCloudClsMachinesRead(d *schema.ResourceData, meta interfac d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cls_machines_test.go b/tencentcloud/services/cls/data_source_tc_cls_machines_test.go similarity index 72% rename from tencentcloud/data_source_tc_cls_machines_test.go rename to tencentcloud/services/cls/data_source_tc_cls_machines_test.go index 7368fabfb0..d8500c815e 100644 --- a/tencentcloud/data_source_tc_cls_machines_test.go +++ b/tencentcloud/services/cls/data_source_tc_cls_machines_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cls_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudClsMachinesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsMachinesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cls_machines.machines")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cls_machines.machines")), }, }, }) diff --git a/tencentcloud/data_source_tc_cls_shipper_tasks.go b/tencentcloud/services/cls/data_source_tc_cls_shipper_tasks.go similarity index 86% rename from tencentcloud/data_source_tc_cls_shipper_tasks.go rename to tencentcloud/services/cls/data_source_tc_cls_shipper_tasks.go index e6c4fe0ac7..65cc8a8325 100644 --- a/tencentcloud/data_source_tc_cls_shipper_tasks.go +++ b/tencentcloud/services/cls/data_source_tc_cls_shipper_tasks.go @@ -1,15 +1,18 @@ -package tencentcloud +package cls import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudClsShipperTasks() *schema.Resource { +func DataSourceTencentCloudClsShipperTasks() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudClsShipperTasksRead, Schema: map[string]*schema.Schema{ @@ -96,12 +99,12 @@ func dataSourceTencentCloudClsShipperTasks() *schema.Resource { } func dataSourceTencentCloudClsShipperTasksRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cls_shipper_tasks.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cls_shipper_tasks.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("shipper_id"); ok { @@ -116,14 +119,14 @@ func dataSourceTencentCloudClsShipperTasksRead(d *schema.ResourceData, meta inte paramMap["EndTime"] = helper.IntInt64(v.(int)) } - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var tasks []*cls.ShipperTaskInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClsShipperTasksByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } tasks = result return nil @@ -185,7 +188,7 @@ func dataSourceTencentCloudClsShipperTasksRead(d *schema.ResourceData, meta inte d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cls_shipper_tasks_test.go b/tencentcloud/services/cls/data_source_tc_cls_shipper_tasks_test.go similarity index 63% rename from tencentcloud/data_source_tc_cls_shipper_tasks_test.go rename to tencentcloud/services/cls/data_source_tc_cls_shipper_tasks_test.go index 929617111a..3976b48ca4 100644 --- a/tencentcloud/data_source_tc_cls_shipper_tasks_test.go +++ b/tencentcloud/services/cls/data_source_tc_cls_shipper_tasks_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cls_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudNeedFixClsShipperTasksDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsShipperTasksDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cls_shipper_tasks.shipper_tasks")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cls_shipper_tasks.shipper_tasks")), }, }, }) diff --git a/tencentcloud/services/cls/extension_tags.go b/tencentcloud/services/cls/extension_tags.go new file mode 100644 index 0000000000..d123da9ab7 --- /dev/null +++ b/tencentcloud/services/cls/extension_tags.go @@ -0,0 +1,3 @@ +package cls + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/resource_tc_cls_alarm.go b/tencentcloud/services/cls/resource_tc_cls_alarm.go similarity index 89% rename from tencentcloud/resource_tc_cls_alarm.go rename to tencentcloud/services/cls/resource_tc_cls_alarm.go index a478b92378..7adfc78f22 100644 --- a/tencentcloud/resource_tc_cls_alarm.go +++ b/tencentcloud/services/cls/resource_tc_cls_alarm.go @@ -1,17 +1,20 @@ -package tencentcloud +package cls import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsAlarm() *schema.Resource { +func ResourceTencentCloudClsAlarm() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClsAlarmCreate, Read: resourceTencentCloudClsAlarmRead, @@ -205,10 +208,10 @@ func resourceTencentCloudClsAlarm() *schema.Resource { } func resourceTencentCloudClsAlarmCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_alarm.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_alarm.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewCreateAlarmRequest() @@ -329,10 +332,10 @@ func resourceTencentCloudClsAlarmCreate(d *schema.ResourceData, meta interface{} } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().CreateAlarm(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().CreateAlarm(request) if e != nil { - return retryError(e) + 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()) } @@ -347,10 +350,10 @@ func resourceTencentCloudClsAlarmCreate(d *schema.ResourceData, meta interface{} alarmId = *response.Response.AlarmId d.SetId(alarmId) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::cls:%s:uin/:alarm/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -361,14 +364,14 @@ func resourceTencentCloudClsAlarmCreate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudClsAlarmRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_alarm.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_alarm.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} alarmId := d.Id() @@ -518,7 +521,7 @@ func resourceTencentCloudClsAlarmRead(d *schema.ResourceData, meta interface{}) } - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "cls", "alarm", tcClient.Region, d.Id()) if err != nil { @@ -530,10 +533,10 @@ func resourceTencentCloudClsAlarmRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudClsAlarmUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_alarm.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_alarm.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) needChange := false request := cls.NewModifyAlarmRequest() @@ -671,10 +674,10 @@ func resourceTencentCloudClsAlarmUpdate(d *schema.ResourceData, meta interface{} } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().ModifyAlarm(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyAlarm(request) if e != nil { - return retryError(e) + 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()) } @@ -687,12 +690,12 @@ func resourceTencentCloudClsAlarmUpdate(d *schema.ResourceData, meta interface{} } if d.HasChange("tags") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("cls", "alarm", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("cls", "alarm", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -702,13 +705,13 @@ func resourceTencentCloudClsAlarmUpdate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudClsAlarmDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_alarm.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_alarm.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} alarmId := d.Id() if err := service.DeleteClsAlarmById(ctx, alarmId); err != nil { diff --git a/tencentcloud/resource_tc_cls_alarm_notice.go b/tencentcloud/services/cls/resource_tc_cls_alarm_notice.go similarity index 86% rename from tencentcloud/resource_tc_cls_alarm_notice.go rename to tencentcloud/services/cls/resource_tc_cls_alarm_notice.go index da31771eb7..285176189a 100644 --- a/tencentcloud/resource_tc_cls_alarm_notice.go +++ b/tencentcloud/services/cls/resource_tc_cls_alarm_notice.go @@ -1,17 +1,20 @@ -package tencentcloud +package cls import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsAlarmNotice() *schema.Resource { +func ResourceTencentCloudClsAlarmNotice() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClsAlarmNoticeCreate, Read: resourceTencentCloudClsAlarmNoticeRead, @@ -132,10 +135,10 @@ func resourceTencentCloudClsAlarmNotice() *schema.Resource { } func resourceTencentCloudClsAlarmNoticeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_alarm_notice.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_alarm_notice.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewCreateAlarmNoticeRequest() @@ -214,10 +217,10 @@ func resourceTencentCloudClsAlarmNoticeCreate(d *schema.ResourceData, meta inter } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().CreateAlarmNotice(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().CreateAlarmNotice(request) if e != nil { - return retryError(e) + 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()) } @@ -232,10 +235,10 @@ func resourceTencentCloudClsAlarmNoticeCreate(d *schema.ResourceData, meta inter alarmNoticeId = *response.Response.AlarmNoticeId d.SetId(alarmNoticeId) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::cls:%s:uin/:alarmNotice/%s", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -246,14 +249,14 @@ func resourceTencentCloudClsAlarmNoticeCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudClsAlarmNoticeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_alarm_notice.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_alarm_notice.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} alarmNoticeId := d.Id() @@ -348,7 +351,7 @@ func resourceTencentCloudClsAlarmNoticeRead(d *schema.ResourceData, meta interfa } - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "cls", "alarmNotice", tcClient.Region, d.Id()) if err != nil { @@ -360,10 +363,10 @@ func resourceTencentCloudClsAlarmNoticeRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudClsAlarmNoticeUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_alarm_notice.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_alarm_notice.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cls.NewModifyAlarmNoticeRequest() @@ -455,10 +458,10 @@ func resourceTencentCloudClsAlarmNoticeUpdate(d *schema.ResourceData, meta inter } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().ModifyAlarmNotice(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyAlarmNotice(request) if e != nil { - return retryError(e) + 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()) } @@ -471,12 +474,12 @@ func resourceTencentCloudClsAlarmNoticeUpdate(d *schema.ResourceData, meta inter } if d.HasChange("tags") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("cls", "alarmNotice", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("cls", "alarmNotice", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -486,13 +489,13 @@ func resourceTencentCloudClsAlarmNoticeUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudClsAlarmNoticeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_alarm_notice.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_alarm_notice.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} alarmNoticeId := d.Id() if err := service.DeleteClsAlarmNoticeById(ctx, alarmNoticeId); err != nil { diff --git a/tencentcloud/resource_tc_cls_alarm_notice_test.go b/tencentcloud/services/cls/resource_tc_cls_alarm_notice_test.go similarity index 90% rename from tencentcloud/resource_tc_cls_alarm_notice_test.go rename to tencentcloud/services/cls/resource_tc_cls_alarm_notice_test.go index 614eadc0ad..59b0ed44ab 100644 --- a/tencentcloud/resource_tc_cls_alarm_notice_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_alarm_notice_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cls_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudClsAlarmNoticeResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsAlarmNotice, diff --git a/tencentcloud/resource_tc_cls_alarm_test.go b/tencentcloud/services/cls/resource_tc_cls_alarm_test.go similarity index 93% rename from tencentcloud/resource_tc_cls_alarm_test.go rename to tencentcloud/services/cls/resource_tc_cls_alarm_test.go index a5580b9a54..80210204bc 100644 --- a/tencentcloud/resource_tc_cls_alarm_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_alarm_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cls_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudClsAlarmResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsAlarm, diff --git a/tencentcloud/resource_tc_cls_ckafka_consumer.go b/tencentcloud/services/cls/resource_tc_cls_ckafka_consumer.go similarity index 86% rename from tencentcloud/resource_tc_cls_ckafka_consumer.go rename to tencentcloud/services/cls/resource_tc_cls_ckafka_consumer.go index f10fdc2b45..34d0fd584a 100644 --- a/tencentcloud/resource_tc_cls_ckafka_consumer.go +++ b/tencentcloud/services/cls/resource_tc_cls_ckafka_consumer.go @@ -1,16 +1,19 @@ -package tencentcloud +package cls import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsCkafkaConsumer() *schema.Resource { +func ResourceTencentCloudClsCkafkaConsumer() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClsCkafkaConsumerCreate, Read: resourceTencentCloudClsCkafkaConsumerRead, @@ -118,10 +121,10 @@ func resourceTencentCloudClsCkafkaConsumer() *schema.Resource { } func resourceTencentCloudClsCkafkaConsumerCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_ckafka_consumer.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_ckafka_consumer.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewCreateConsumerRequest() @@ -184,10 +187,10 @@ func resourceTencentCloudClsCkafkaConsumerCreate(d *schema.ResourceData, meta in request.Compression = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().CreateConsumer(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().CreateConsumer(request) if e != nil { - return retryError(e) + 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()) } @@ -204,14 +207,14 @@ func resourceTencentCloudClsCkafkaConsumerCreate(d *schema.ResourceData, meta in } func resourceTencentCloudClsCkafkaConsumerRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_ckafka_consumer.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_ckafka_consumer.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} topicId := d.Id() @@ -292,10 +295,10 @@ func resourceTencentCloudClsCkafkaConsumerRead(d *schema.ResourceData, meta inte } func resourceTencentCloudClsCkafkaConsumerUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_ckafka_consumer.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_ckafka_consumer.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cls.NewModifyConsumerRequest() @@ -367,10 +370,10 @@ func resourceTencentCloudClsCkafkaConsumerUpdate(d *schema.ResourceData, meta in request.Compression = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().ModifyConsumer(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyConsumer(request) if e != nil { - return retryError(e) + 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()) } @@ -386,13 +389,13 @@ func resourceTencentCloudClsCkafkaConsumerUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudClsCkafkaConsumerDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_ckafka_consumer.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_ckafka_consumer.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} topicId := d.Id() if err := service.DeleteClsCkafkaConsumerById(ctx, topicId); err != nil { diff --git a/tencentcloud/resource_tc_cls_ckafka_consumer_test.go b/tencentcloud/services/cls/resource_tc_cls_ckafka_consumer_test.go similarity index 87% rename from tencentcloud/resource_tc_cls_ckafka_consumer_test.go rename to tencentcloud/services/cls/resource_tc_cls_ckafka_consumer_test.go index e5e5d4d99f..d664628850 100644 --- a/tencentcloud/resource_tc_cls_ckafka_consumer_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_ckafka_consumer_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cls_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixClsCkafkaConsumerResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsCkafkaConsumer, diff --git a/tencentcloud/resource_tc_cls_config.go b/tencentcloud/services/cls/resource_tc_cls_config.go similarity index 93% rename from tencentcloud/resource_tc_cls_config.go rename to tencentcloud/services/cls/resource_tc_cls_config.go index e0a1ae6c8a..7fccd42f8c 100644 --- a/tencentcloud/resource_tc_cls_config.go +++ b/tencentcloud/services/cls/resource_tc_cls_config.go @@ -1,17 +1,20 @@ -package tencentcloud +package cls import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsConfig() *schema.Resource { +func ResourceTencentCloudClsConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClsConfigCreate, Read: resourceTencentCloudClsConfigRead, @@ -200,9 +203,9 @@ func resourceTencentCloudClsConfig() *schema.Resource { } func resourceTencentCloudClsConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_config.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cls_config.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewCreateConfigRequest() @@ -329,10 +332,10 @@ func resourceTencentCloudClsConfigCreate(d *schema.ResourceData, meta interface{ request.UserDefineRule = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().CreateConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().CreateConfig(request) if e != nil { - return retryError(e) + 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()) @@ -352,14 +355,14 @@ func resourceTencentCloudClsConfigCreate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudClsConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} configId := d.Id() @@ -525,8 +528,8 @@ func resourceTencentCloudClsConfigRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudClsConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_config.update")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_cls_config.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) request := cls.NewModifyConfigRequest() request.ConfigId = helper.String(d.Id()) @@ -664,10 +667,10 @@ func resourceTencentCloudClsConfigUpdate(d *schema.ResourceData, meta interface{ } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().ModifyConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyConfig(request) if e != nil { - return retryError(e) + 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()) @@ -683,11 +686,11 @@ func resourceTencentCloudClsConfigUpdate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudClsConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_config.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cls_config.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() if err := service.DeleteClsConfig(ctx, id); err != nil { diff --git a/tencentcloud/resource_tc_cls_config_attachment.go b/tencentcloud/services/cls/resource_tc_cls_config_attachment.go similarity index 70% rename from tencentcloud/resource_tc_cls_config_attachment.go rename to tencentcloud/services/cls/resource_tc_cls_config_attachment.go index 00c195b63f..f2384ec63c 100644 --- a/tencentcloud/resource_tc_cls_config_attachment.go +++ b/tencentcloud/services/cls/resource_tc_cls_config_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package cls import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsConfigAttachment() *schema.Resource { +func ResourceTencentCloudClsConfigAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClsConfigAttachmentCreate, Read: resourceTencentCloudClsConfigAttachmentRead, @@ -38,9 +41,9 @@ func resourceTencentCloudClsConfigAttachment() *schema.Resource { } func resourceTencentCloudClsConfigAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_config_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cls_config_attachment.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewApplyConfigToMachineGroupRequest() @@ -58,10 +61,10 @@ func resourceTencentCloudClsConfigAttachmentCreate(d *schema.ResourceData, meta request.GroupId = helper.String(groupId) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().ApplyConfigToMachineGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ApplyConfigToMachineGroup(request) if e != nil { - return retryError(e) + 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()) @@ -80,18 +83,18 @@ func resourceTencentCloudClsConfigAttachmentCreate(d *schema.ResourceData, meta } func resourceTencentCloudClsConfigAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_config_attachment.read")() + defer tccommon.LogElapsed("resource.tencentcloud_cls_config_attachment.read")() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } configId := idSplit[0] groupId := idSplit[1] - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} machineGroup, err := service.DescribeClsMachineGroupByConfigId(ctx, configId, groupId) if err != nil { @@ -111,12 +114,12 @@ func resourceTencentCloudClsConfigAttachmentRead(d *schema.ResourceData, meta in } func resourceTencentCloudClsConfigAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_config_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cls_config_attachment.delete")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cls.NewDeleteConfigFromMachineGroupRequest() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -125,10 +128,10 @@ func resourceTencentCloudClsConfigAttachmentDelete(d *schema.ResourceData, meta request.GroupId = helper.String(groupId) request.ConfigId = helper.String(configId) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().DeleteConfigFromMachineGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().DeleteConfigFromMachineGroup(request) if e != nil { - return retryError(e) + 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()) diff --git a/tencentcloud/resource_tc_cls_config_attachment_test.go b/tencentcloud/services/cls/resource_tc_cls_config_attachment_test.go similarity index 91% rename from tencentcloud/resource_tc_cls_config_attachment_test.go rename to tencentcloud/services/cls/resource_tc_cls_config_attachment_test.go index 029225f55e..0ab538c296 100644 --- a/tencentcloud/resource_tc_cls_config_attachment_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_config_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cls_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ func TestAccTencentCloudClsConfigAttachment_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsConfigAttachment, diff --git a/tencentcloud/resource_tc_cls_config_extra.go b/tencentcloud/services/cls/resource_tc_cls_config_extra.go similarity index 96% rename from tencentcloud/resource_tc_cls_config_extra.go rename to tencentcloud/services/cls/resource_tc_cls_config_extra.go index f12de98e4f..bcff0a228c 100644 --- a/tencentcloud/resource_tc_cls_config_extra.go +++ b/tencentcloud/services/cls/resource_tc_cls_config_extra.go @@ -1,17 +1,20 @@ -package tencentcloud +package cls import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsConfigExtra() *schema.Resource { +func ResourceTencentCloudClsConfigExtra() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClsConfigExtraCreate, Read: resourceTencentCloudClsConfigExtraRead, @@ -357,9 +360,9 @@ func resourceTencentCloudClsConfigExtra() *schema.Resource { } func resourceTencentCloudClsConfigExtraCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_config_extra.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cls_config_extra.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewCreateConfigExtraRequest() @@ -610,10 +613,10 @@ func resourceTencentCloudClsConfigExtraCreate(d *schema.ResourceData, meta inter } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().CreateConfigExtra(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().CreateConfigExtra(request) if e != nil { - return retryError(e) + 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()) @@ -633,14 +636,14 @@ func resourceTencentCloudClsConfigExtraCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudClsConfigExtraRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_config_extra.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_config_extra.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} configExtraId := d.Id() @@ -911,8 +914,8 @@ func resourceTencentCloudClsConfigExtraRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudClsConfigExtraUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_config_extra.update")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_cls_config_extra.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) request := cls.NewModifyConfigExtraRequest() request.ConfigExtraId = helper.String(d.Id()) @@ -1184,10 +1187,10 @@ func resourceTencentCloudClsConfigExtraUpdate(d *schema.ResourceData, meta inter request.GroupId = helper.String(v.(string)) } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().ModifyConfigExtra(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyConfigExtra(request) if e != nil { - return retryError(e) + 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()) @@ -1203,11 +1206,11 @@ func resourceTencentCloudClsConfigExtraUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudClsConfigExtraDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_config.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cls_config.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() if err := service.DeleteClsConfigExtra(ctx, id); err != nil { diff --git a/tencentcloud/resource_tc_cls_config_extra_test.go b/tencentcloud/services/cls/resource_tc_cls_config_extra_test.go similarity index 91% rename from tencentcloud/resource_tc_cls_config_extra_test.go rename to tencentcloud/services/cls/resource_tc_cls_config_extra_test.go index 35823e0343..9ea9e24227 100644 --- a/tencentcloud/resource_tc_cls_config_extra_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_config_extra_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cls_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ func TestAccTencentCloudClsConfigExtra_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsConfigExtra, diff --git a/tencentcloud/resource_tc_cls_config_test.go b/tencentcloud/services/cls/resource_tc_cls_config_test.go similarity index 91% rename from tencentcloud/resource_tc_cls_config_test.go rename to tencentcloud/services/cls/resource_tc_cls_config_test.go index e574ab2e3b..fddc1f7fd1 100644 --- a/tencentcloud/resource_tc_cls_config_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cls_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ func TestAccTencentCloudClsConfig_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsConfig, @@ -32,8 +34,8 @@ func TestAccTencentCloudClsConfig_FullRegex(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsFullRegexConfig, diff --git a/tencentcloud/resource_tc_cls_cos_recharge.go b/tencentcloud/services/cls/resource_tc_cls_cos_recharge.go similarity index 90% rename from tencentcloud/resource_tc_cls_cos_recharge.go rename to tencentcloud/services/cls/resource_tc_cls_cos_recharge.go index 37cea1b698..aa59c2f393 100644 --- a/tencentcloud/resource_tc_cls_cos_recharge.go +++ b/tencentcloud/services/cls/resource_tc_cls_cos_recharge.go @@ -1,4 +1,4 @@ -package tencentcloud +package cls import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsCosRecharge() *schema.Resource { +func ResourceTencentCloudClsCosRecharge() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClsCosRechargeCreate, Read: resourceTencentCloudClsCosRechargeRead, @@ -208,10 +211,10 @@ func resourceTencentCloudClsCosRecharge() *schema.Resource { } func resourceTencentCloudClsCosRechargeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_cos_recharge.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_cos_recharge.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewCreateCosRechargeRequest() @@ -335,10 +338,10 @@ func resourceTencentCloudClsCosRechargeCreate(d *schema.ResourceData, meta inter request.ExtractRuleInfo = &extractRuleInfo } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().CreateCosRecharge(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().CreateCosRecharge(request) if e != nil { - return retryError(e) + 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()) } @@ -352,22 +355,22 @@ func resourceTencentCloudClsCosRechargeCreate(d *schema.ResourceData, meta inter reChargeId = *response.Response.Id - d.SetId(topicId + FILED_SP + reChargeId) + d.SetId(topicId + tccommon.FILED_SP + reChargeId) return resourceTencentCloudClsCosRechargeRead(d, meta) } func resourceTencentCloudClsCosRechargeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_cos_recharge.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_cos_recharge.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -529,14 +532,14 @@ func resourceTencentCloudClsCosRechargeRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudClsCosRechargeUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_cos_recharge.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_cos_recharge.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cls.NewModifyCosRechargeRequest() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -563,10 +566,10 @@ func resourceTencentCloudClsCosRechargeUpdate(d *schema.ResourceData, meta inter } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().ModifyCosRecharge(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyCosRecharge(request) if e != nil { - return retryError(e) + 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()) } @@ -581,8 +584,8 @@ func resourceTencentCloudClsCosRechargeUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudClsCosRechargeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_cos_recharge.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_cos_recharge.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cls_cos_recharge_test.go b/tencentcloud/services/cls/resource_tc_cls_cos_recharge_test.go similarity index 87% rename from tencentcloud/resource_tc_cls_cos_recharge_test.go rename to tencentcloud/services/cls/resource_tc_cls_cos_recharge_test.go index 12687d5899..ceaafbe494 100644 --- a/tencentcloud/resource_tc_cls_cos_recharge_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_cos_recharge_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cls_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixClsCosRechargeResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsCosRecharge, diff --git a/tencentcloud/resource_tc_cls_cos_shipper.go b/tencentcloud/services/cls/resource_tc_cls_cos_shipper.go similarity index 91% rename from tencentcloud/resource_tc_cls_cos_shipper.go rename to tencentcloud/services/cls/resource_tc_cls_cos_shipper.go index 4e7b425e93..0870a58f5e 100644 --- a/tencentcloud/resource_tc_cls_cos_shipper.go +++ b/tencentcloud/services/cls/resource_tc_cls_cos_shipper.go @@ -1,17 +1,20 @@ -package tencentcloud +package cls import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsCosShipper() *schema.Resource { +func ResourceTencentCloudClsCosShipper() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClsCosShipperCreate, Read: resourceTencentCloudClsCosShipperRead, @@ -173,9 +176,9 @@ func resourceTencentCloudClsCosShipper() *schema.Resource { } func resourceTencentCloudClsCosShipperCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_cos_shipper.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cls_cos_shipper.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewCreateShipperRequest() @@ -289,10 +292,10 @@ func resourceTencentCloudClsCosShipperCreate(d *schema.ResourceData, meta interf request.Content = contents[0] } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().CreateShipper(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().CreateShipper(request) if e != nil { - return retryError(e) + 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()) @@ -312,12 +315,12 @@ func resourceTencentCloudClsCosShipperCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudClsCosShipperRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_cos_shipper.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_cos_shipper.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() @@ -394,8 +397,8 @@ func resourceTencentCloudClsCosShipperRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudClsCosShipperUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_cos_shipper.update")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_cls_cos_shipper.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) request := cls.NewModifyShipperRequest() request.ShipperId = helper.String(d.Id()) @@ -521,10 +524,10 @@ func resourceTencentCloudClsCosShipperUpdate(d *schema.ResourceData, meta interf } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().ModifyShipper(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyShipper(request) if e != nil { - return retryError(e) + 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()) @@ -540,11 +543,11 @@ func resourceTencentCloudClsCosShipperUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudClsCosShipperDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_cos_shipper.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cls_cos_shipper.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() if err := service.DeleteClsCosShipper(ctx, id); err != nil { diff --git a/tencentcloud/resource_tc_cls_cos_shipper_test.go b/tencentcloud/services/cls/resource_tc_cls_cos_shipper_test.go similarity index 79% rename from tencentcloud/resource_tc_cls_cos_shipper_test.go rename to tencentcloud/services/cls/resource_tc_cls_cos_shipper_test.go index cf90a1f14d..a9c4ab9f31 100644 --- a/tencentcloud/resource_tc_cls_cos_shipper_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_cos_shipper_test.go @@ -1,20 +1,25 @@ -package tencentcloud +package cls_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + localcls "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls" ) func TestAccTencentCloudClsCosShipper_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsCosShipper, @@ -34,8 +39,8 @@ func TestAccTencentCloudClsCosShipper_basic(t *testing.T) { func testAccCheckClsCosShipperExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -44,9 +49,7 @@ func testAccCheckClsCosShipperExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLS Cos Shipper][Exists] check: CLS Cos Shipper id is not set") } - clsService := ClsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clsService := localcls.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := clsService.DescribeClsCosShipperById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_cls_data_transform.go b/tencentcloud/services/cls/resource_tc_cls_data_transform.go similarity index 81% rename from tencentcloud/resource_tc_cls_data_transform.go rename to tencentcloud/services/cls/resource_tc_cls_data_transform.go index 21be844e75..894c6c1fab 100644 --- a/tencentcloud/resource_tc_cls_data_transform.go +++ b/tencentcloud/services/cls/resource_tc_cls_data_transform.go @@ -1,17 +1,20 @@ -package tencentcloud +package cls import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsDataTransform() *schema.Resource { +func ResourceTencentCloudClsDataTransform() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClsDataTransformCreate, Read: resourceTencentCloudClsDataTransformRead, @@ -81,10 +84,10 @@ func resourceTencentCloudClsDataTransform() *schema.Resource { } func resourceTencentCloudClsDataTransformCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_data_transform.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_data_transform.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewCreateDataTransformRequest() @@ -129,10 +132,10 @@ func resourceTencentCloudClsDataTransformCreate(d *schema.ResourceData, meta int } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().CreateDataTransform(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().CreateDataTransform(request) if e != nil { - return retryError(e) + 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()) } @@ -151,14 +154,14 @@ func resourceTencentCloudClsDataTransformCreate(d *schema.ResourceData, meta int } func resourceTencentCloudClsDataTransformRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_data_transform.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_data_transform.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} dataTransformTaskId := d.Id() @@ -213,10 +216,10 @@ func resourceTencentCloudClsDataTransformRead(d *schema.ResourceData, meta inter } func resourceTencentCloudClsDataTransformUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_data_transform.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_data_transform.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cls.NewModifyDataTransformRequest() @@ -266,10 +269,10 @@ func resourceTencentCloudClsDataTransformUpdate(d *schema.ResourceData, meta int } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().ModifyDataTransform(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyDataTransform(request) if e != nil { - return retryError(e) + 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()) } @@ -284,13 +287,13 @@ func resourceTencentCloudClsDataTransformUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudClsDataTransformDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_data_transform.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_data_transform.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} dataTransformTaskId := d.Id() if err := service.DeleteClsDataTransformById(ctx, dataTransformTaskId); err != nil { diff --git a/tencentcloud/resource_tc_cls_data_transform_test.go b/tencentcloud/services/cls/resource_tc_cls_data_transform_test.go similarity index 83% rename from tencentcloud/resource_tc_cls_data_transform_test.go rename to tencentcloud/services/cls/resource_tc_cls_data_transform_test.go index 6bf9c90be8..432491a574 100644 --- a/tencentcloud/resource_tc_cls_data_transform_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_data_transform_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cls_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcls "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls" + "context" "fmt" "testing" @@ -15,10 +19,10 @@ func TestAccTencentCloudClsDataTransformResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckClsDataTransformDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsDataTransform, @@ -39,12 +43,10 @@ func TestAccTencentCloudClsDataTransformResource_basic(t *testing.T) { } func testAccCheckClsDataTransformDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - clsService := ClsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clsService := localcls.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cls_data_transform" { continue @@ -63,8 +65,8 @@ func testAccCheckClsDataTransformDestroy(s *terraform.State) error { func testAccCheckClsDataTransformExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -73,9 +75,7 @@ func testAccCheckClsDataTransformExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLS dataTransform][Create] check: CLS dataTransform id is not set") } - clsService := ClsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clsService := localcls.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) taskRes, err := clsService.DescribeClsDataTransformById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_cls_export.go b/tencentcloud/services/cls/resource_tc_cls_export.go similarity index 75% rename from tencentcloud/resource_tc_cls_export.go rename to tencentcloud/services/cls/resource_tc_cls_export.go index e9913c5e14..b688ae7b8f 100644 --- a/tencentcloud/resource_tc_cls_export.go +++ b/tencentcloud/services/cls/resource_tc_cls_export.go @@ -1,4 +1,4 @@ -package tencentcloud +package cls import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsExport() *schema.Resource { +func ResourceTencentCloudClsExport() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClsExportCreate, Read: resourceTencentCloudClsExportRead, @@ -74,10 +77,10 @@ func resourceTencentCloudClsExport() *schema.Resource { } func resourceTencentCloudClsExportCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_export.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_export.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewCreateExportRequest() @@ -114,10 +117,10 @@ func resourceTencentCloudClsExportCreate(d *schema.ResourceData, meta interface{ request.Format = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().CreateExport(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().CreateExport(request) if e != nil { - return retryError(e) + 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()) } @@ -130,22 +133,22 @@ func resourceTencentCloudClsExportCreate(d *schema.ResourceData, meta interface{ } exportId = *response.Response.ExportId - d.SetId(topicId + FILED_SP + exportId) + d.SetId(topicId + tccommon.FILED_SP + exportId) return resourceTencentCloudClsExportRead(d, meta) } func resourceTencentCloudClsExportRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_export.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_export.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -195,14 +198,14 @@ func resourceTencentCloudClsExportRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudClsExportDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_export.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_export.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) exportId := idSplit[1] diff --git a/tencentcloud/resource_tc_cls_export_test.go b/tencentcloud/services/cls/resource_tc_cls_export_test.go similarity index 82% rename from tencentcloud/resource_tc_cls_export_test.go rename to tencentcloud/services/cls/resource_tc_cls_export_test.go index ebe2fba989..c4acafc5ab 100644 --- a/tencentcloud/resource_tc_cls_export_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_export_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cls_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudClsExportResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsExport, diff --git a/tencentcloud/resource_tc_cls_index.go b/tencentcloud/services/cls/resource_tc_cls_index.go similarity index 92% rename from tencentcloud/resource_tc_cls_index.go rename to tencentcloud/services/cls/resource_tc_cls_index.go index a5c0d8a1bd..27901d623e 100644 --- a/tencentcloud/resource_tc_cls_index.go +++ b/tencentcloud/services/cls/resource_tc_cls_index.go @@ -1,16 +1,19 @@ -package tencentcloud +package cls import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsIndex() *schema.Resource { +func ResourceTencentCloudClsIndex() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClsIndexCreate, Read: resourceTencentCloudClsIndexRead, @@ -202,10 +205,10 @@ func resourceTencentCloudClsIndex() *schema.Resource { } func resourceTencentCloudClsIndexCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_index.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_index.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewCreateIndexRequest() @@ -315,10 +318,10 @@ func resourceTencentCloudClsIndexCreate(d *schema.ResourceData, meta interface{} request.MetadataFlag = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().CreateIndex(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().CreateIndex(request) if e != nil { - return retryError(e) + 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()) @@ -337,10 +340,10 @@ func resourceTencentCloudClsIndexCreate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudClsIndexRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_index.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_index.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewDescribeIndexRequest() @@ -350,10 +353,10 @@ func resourceTencentCloudClsIndexRead(d *schema.ResourceData, meta interface{}) request.TopicId = &id - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - response, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().DescribeIndex(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().DescribeIndex(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response return nil @@ -468,10 +471,10 @@ func resourceTencentCloudClsIndexRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudClsIndexUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_index.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_index.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewModifyIndexRequest() @@ -586,10 +589,10 @@ func resourceTencentCloudClsIndexUpdate(d *schema.ResourceData, meta interface{} request.MetadataFlag = helper.IntUint64(v.(int)) } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().ModifyIndex(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyIndex(request) if e != nil { - return retryError(e) + 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()) @@ -605,12 +608,12 @@ func resourceTencentCloudClsIndexUpdate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudClsIndexDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_cos_shipper.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_cos_shipper.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() if err := service.DeleteClsIndex(ctx, id); err != nil { diff --git a/tencentcloud/resource_tc_cls_kafka_recharge.go b/tencentcloud/services/cls/resource_tc_cls_kafka_recharge.go similarity index 91% rename from tencentcloud/resource_tc_cls_kafka_recharge.go rename to tencentcloud/services/cls/resource_tc_cls_kafka_recharge.go index 79cb42c2be..f7b8e80039 100644 --- a/tencentcloud/resource_tc_cls_kafka_recharge.go +++ b/tencentcloud/services/cls/resource_tc_cls_kafka_recharge.go @@ -1,4 +1,4 @@ -package tencentcloud +package cls import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsKafkaRecharge() *schema.Resource { +func ResourceTencentCloudClsKafkaRecharge() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClsKafkaRechargeCreate, Read: resourceTencentCloudClsKafkaRechargeRead, @@ -203,10 +206,10 @@ func resourceTencentCloudClsKafkaRecharge() *schema.Resource { } func resourceTencentCloudClsKafkaRechargeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_kafka_recharge.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_kafka_recharge.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewCreateKafkaRechargeRequest() @@ -322,10 +325,10 @@ func resourceTencentCloudClsKafkaRechargeCreate(d *schema.ResourceData, meta int request.LogRechargeRule = &logRechargeRuleInfo } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().CreateKafkaRecharge(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().CreateKafkaRecharge(request) if e != nil { - return retryError(e) + 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()) } @@ -338,21 +341,21 @@ func resourceTencentCloudClsKafkaRechargeCreate(d *schema.ResourceData, meta int } id = *response.Response.Id - d.SetId(id + FILED_SP + topicId) + d.SetId(id + tccommon.FILED_SP + topicId) return resourceTencentCloudClsKafkaRechargeRead(d, meta) } func resourceTencentCloudClsKafkaRechargeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_kafka_recharge.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_kafka_recharge.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -494,10 +497,10 @@ func resourceTencentCloudClsKafkaRechargeRead(d *schema.ResourceData, meta inter } func resourceTencentCloudClsKafkaRechargeUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_kafka_recharge.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_kafka_recharge.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cls.NewModifyKafkaRechargeRequest() @@ -637,10 +640,10 @@ func resourceTencentCloudClsKafkaRechargeUpdate(d *schema.ResourceData, meta int } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().ModifyKafkaRecharge(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyKafkaRecharge(request) if e != nil { - return retryError(e) + 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()) } @@ -655,14 +658,14 @@ func resourceTencentCloudClsKafkaRechargeUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudClsKafkaRechargeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_kafka_recharge.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_kafka_recharge.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_cls_kafka_recharge_test.go b/tencentcloud/services/cls/resource_tc_cls_kafka_recharge_test.go similarity index 79% rename from tencentcloud/resource_tc_cls_kafka_recharge_test.go rename to tencentcloud/services/cls/resource_tc_cls_kafka_recharge_test.go index 8a84adb01b..ce0fd6e485 100644 --- a/tencentcloud/resource_tc_cls_kafka_recharge_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_kafka_recharge_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cls_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcls "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls" + "context" "fmt" "strings" @@ -14,10 +18,10 @@ func TestAccTencentCloudClsKafkaRechargeResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckClsKafkaRechargeDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsKafkaRecharge, @@ -40,17 +44,15 @@ func TestAccTencentCloudClsKafkaRechargeResource_basic(t *testing.T) { } func testAccCheckClsKafkaRechargeDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - clsService := ClsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clsService := localcls.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cls_kafka_recharge" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -70,8 +72,8 @@ func testAccCheckClsKafkaRechargeDestroy(s *terraform.State) error { func testAccCheckClsKafkaRechargeExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -80,10 +82,8 @@ func testAccCheckClsKafkaRechargeExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLS dataTransform][Create] check: CLS KafkaRecharge id is not set") } - clsService := ClsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + clsService := localcls.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) diff --git a/tencentcloud/resource_tc_cls_logset.go b/tencentcloud/services/cls/resource_tc_cls_logset.go similarity index 68% rename from tencentcloud/resource_tc_cls_logset.go rename to tencentcloud/services/cls/resource_tc_cls_logset.go index 2727a7f19a..00f105b810 100644 --- a/tencentcloud/resource_tc_cls_logset.go +++ b/tencentcloud/services/cls/resource_tc_cls_logset.go @@ -1,17 +1,20 @@ -package tencentcloud +package cls import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsLogset() *schema.Resource { +func ResourceTencentCloudClsLogset() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudClsLogsetRead, Create: resourceTencentCloudClsLogsetCreate, @@ -55,10 +58,10 @@ func resourceTencentCloudClsLogset() *schema.Resource { } func resourceTencentCloudClsLogsetCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_logset.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_logset.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewCreateLogsetRequest() @@ -69,10 +72,10 @@ func resourceTencentCloudClsLogsetCreate(d *schema.ResourceData, meta interface{ request.LogsetName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().CreateLogset(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().CreateLogset(request) if e != nil { - return retryError(e) + 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()) @@ -88,10 +91,10 @@ func resourceTencentCloudClsLogsetCreate(d *schema.ResourceData, meta interface{ logsetId := *response.Response.LogsetId - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::cls:%s:uin/:logset/%s", region, logsetId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -102,13 +105,13 @@ func resourceTencentCloudClsLogsetCreate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudClsLogsetRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_logset.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_logset.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} logsetId := d.Id() @@ -139,7 +142,7 @@ func resourceTencentCloudClsLogsetRead(d *schema.ResourceData, meta interface{}) _ = d.Set("role_name", logset.RoleName) } - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "cls", "logset", tcClient.Region, d.Id()) if err != nil { @@ -151,11 +154,11 @@ func resourceTencentCloudClsLogsetRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudClsLogsetUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_logset.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_logset.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cls.NewModifyLogsetRequest() @@ -167,10 +170,10 @@ func resourceTencentCloudClsLogsetUpdate(d *schema.ResourceData, meta interface{ } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().ModifyLogset(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyLogset(request) if e != nil { - return retryError(e) + 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()) @@ -183,11 +186,11 @@ func resourceTencentCloudClsLogsetUpdate(d *schema.ResourceData, meta interface{ } if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("cls", "logset", tcClient.Region, d.Id()) + resourceName := tccommon.BuildTagResourceName("cls", "logset", tcClient.Region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -197,13 +200,13 @@ func resourceTencentCloudClsLogsetUpdate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudClsLogsetDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_logset.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_logset.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} logsetId := d.Id() if err := service.DeleteClsLogsetById(ctx, logsetId); err != nil { diff --git a/tencentcloud/resource_tc_cls_logset_test.go b/tencentcloud/services/cls/resource_tc_cls_logset_test.go similarity index 68% rename from tencentcloud/resource_tc_cls_logset_test.go rename to tencentcloud/services/cls/resource_tc_cls_logset_test.go index f2c1235456..385fed0346 100644 --- a/tencentcloud/resource_tc_cls_logset_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_logset_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cls_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcls "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls" + "context" "fmt" "log" @@ -20,18 +24,16 @@ func init() { } func testSweepClsLogset(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - sharedClient, err := sharedClientForRegion(region) + sharedClient, err := tcacctest.SharedClientForRegion(region) if err != nil { return fmt.Errorf("getting tencentcloud client error: %s", err.Error()) } - client := sharedClient.(*TencentCloudClient) + client := sharedClient.(tccommon.ProviderMeta) - clsService := ClsService{ - client: client.apiV3Conn, - } + clsService := localcls.NewClsService(client.GetAPIV3Conn()) instances, err := clsService.DescribeClsLogsetByFilter(ctx, nil) if err != nil { @@ -44,13 +46,13 @@ func testSweepClsLogset(region string) error { now := time.Now() - createTime := stringTotime(*v.CreateTime) + createTime := tccommon.StringToTime(*v.CreateTime) interval := now.Sub(createTime).Minutes() - if strings.HasPrefix(*instanceName, keepResource) || strings.HasPrefix(*instanceName, defaultResource) { + if strings.HasPrefix(*instanceName, tcacctest.KeepResource) || strings.HasPrefix(*instanceName, tcacctest.DefaultResource) { continue } // less than 30 minute, not delete - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } @@ -66,8 +68,8 @@ func TestAccTencentCloudClsLogset_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsLogset_basic, @@ -88,8 +90,8 @@ func TestAccTencentCloudClsLogset_basic(t *testing.T) { func testAccCheckClsLogsetExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -98,9 +100,7 @@ func testAccCheckClsLogsetExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLS logset][Exists] check: CLS logset id is not set") } - service := ClsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + service := localcls.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) resourceId := rs.Primary.ID instance, err := service.DescribeClsLogset(ctx, resourceId) if err != nil { diff --git a/tencentcloud/resource_tc_cls_machine_group.go b/tencentcloud/services/cls/resource_tc_cls_machine_group.go similarity index 84% rename from tencentcloud/resource_tc_cls_machine_group.go rename to tencentcloud/services/cls/resource_tc_cls_machine_group.go index d8f1ba6b9a..689da4f2d3 100644 --- a/tencentcloud/resource_tc_cls_machine_group.go +++ b/tencentcloud/services/cls/resource_tc_cls_machine_group.go @@ -1,17 +1,20 @@ -package tencentcloud +package cls import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsMachineGroup() *schema.Resource { +func ResourceTencentCloudClsMachineGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClsMachineGroupCreate, Read: resourceTencentCloudClsMachineGroupRead, @@ -84,9 +87,9 @@ func resourceTencentCloudClsMachineGroup() *schema.Resource { } func resourceTencentCloudClsMachineGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_machine_group.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cls_machine_group.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewCreateMachineGroupRequest() @@ -142,10 +145,10 @@ func resourceTencentCloudClsMachineGroupCreate(d *schema.ResourceData, meta inte request.ServiceLogging = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().CreateMachineGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().CreateMachineGroup(request) if e != nil { - return retryError(e) + 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()) @@ -165,12 +168,12 @@ func resourceTencentCloudClsMachineGroupCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudClsMachineGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_machine_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_machine_group.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() @@ -211,8 +214,8 @@ func resourceTencentCloudClsMachineGroupRead(d *schema.ResourceData, meta interf } func resourceTencentCloudClsMachineGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_machine_group.update")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_cls_machine_group.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) request := cls.NewModifyMachineGroupRequest() request.GroupId = helper.String(d.Id()) @@ -261,10 +264,10 @@ func resourceTencentCloudClsMachineGroupUpdate(d *schema.ResourceData, meta inte request.ServiceLogging = helper.Bool(d.Get("service_logging").(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().ModifyMachineGroup(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyMachineGroup(request) if e != nil { - return retryError(e) + 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()) @@ -280,11 +283,11 @@ func resourceTencentCloudClsMachineGroupUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudClsMachineGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_machine_group.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cls_machine_group.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() if err := service.DeleteClsMachineGroup(ctx, id); err != nil { diff --git a/tencentcloud/resource_tc_cls_machine_group_test.go b/tencentcloud/services/cls/resource_tc_cls_machine_group_test.go similarity index 69% rename from tencentcloud/resource_tc_cls_machine_group_test.go rename to tencentcloud/services/cls/resource_tc_cls_machine_group_test.go index 079db56ebb..da31637d80 100644 --- a/tencentcloud/resource_tc_cls_machine_group_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_machine_group_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cls_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcls "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls" + "context" "fmt" "log" @@ -20,18 +24,16 @@ func init() { } func testSweepMachineGroup(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - sharedClient, err := sharedClientForRegion(region) + sharedClient, err := tcacctest.SharedClientForRegion(region) if err != nil { return fmt.Errorf("getting tencentcloud client error: %s", err.Error()) } - client := sharedClient.(*TencentCloudClient) + client := sharedClient.(tccommon.ProviderMeta) - clsService := ClsService{ - client: client.apiV3Conn, - } + clsService := localcls.NewClsService(client.GetAPIV3Conn()) instances, err := clsService.DescribeClsMachineGroupByFilter(ctx, nil) if err != nil { @@ -44,13 +46,13 @@ func testSweepMachineGroup(region string) error { now := time.Now() - createTime := stringTotime(*v.CreateTime) + createTime := tccommon.StringToTime(*v.CreateTime) interval := now.Sub(createTime).Minutes() - if strings.HasPrefix(*instanceName, keepResource) || strings.HasPrefix(*instanceName, defaultResource) { + if strings.HasPrefix(*instanceName, tcacctest.KeepResource) || strings.HasPrefix(*instanceName, tcacctest.DefaultResource) { continue } // less than 30 minute, not delete - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } @@ -66,8 +68,8 @@ func TestAccTencentCloudClsMachineGroup_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsMachineGroup, @@ -87,8 +89,8 @@ func TestAccTencentCloudClsMachineGroup_basic(t *testing.T) { func testAccCheckClsMachineGroupExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -97,9 +99,7 @@ func testAccCheckClsMachineGroupExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLS machine group][Exists] check: CLS machine group id is not set") } - clsService := ClsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clsService := localcls.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := clsService.DescribeClsMachineGroupById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_cls_scheduled_sql.go b/tencentcloud/services/cls/resource_tc_cls_scheduled_sql.go similarity index 87% rename from tencentcloud/resource_tc_cls_scheduled_sql.go rename to tencentcloud/services/cls/resource_tc_cls_scheduled_sql.go index 2159ca8f27..390198a832 100644 --- a/tencentcloud/resource_tc_cls_scheduled_sql.go +++ b/tencentcloud/services/cls/resource_tc_cls_scheduled_sql.go @@ -1,4 +1,4 @@ -package tencentcloud +package cls import ( "context" @@ -6,13 +6,16 @@ import ( "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsScheduledSql() *schema.Resource { +func ResourceTencentCloudClsScheduledSql() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClsScheduledSqlCreate, Read: resourceTencentCloudClsScheduledSqlRead, @@ -130,10 +133,10 @@ func resourceTencentCloudClsScheduledSql() *schema.Resource { } func resourceTencentCloudClsScheduledSqlCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_scheduled_sql.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_scheduled_sql.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewCreateScheduledSqlRequest() @@ -205,10 +208,10 @@ func resourceTencentCloudClsScheduledSqlCreate(d *schema.ResourceData, meta inte request.SyntaxRule = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().CreateScheduledSql(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().CreateScheduledSql(request) if e != nil { - return retryError(e) + 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()) } @@ -227,14 +230,14 @@ func resourceTencentCloudClsScheduledSqlCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudClsScheduledSqlRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_scheduled_sql.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_scheduled_sql.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} scheduledSqlId := d.Id() @@ -336,10 +339,10 @@ func resourceTencentCloudClsScheduledSqlRead(d *schema.ResourceData, meta interf } func resourceTencentCloudClsScheduledSqlUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_scheduled_sql.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_scheduled_sql.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cls.NewModifyScheduledSqlRequest() @@ -428,10 +431,10 @@ func resourceTencentCloudClsScheduledSqlUpdate(d *schema.ResourceData, meta inte } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().ModifyScheduledSql(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyScheduledSql(request) if e != nil { - return retryError(e) + 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()) } @@ -446,13 +449,13 @@ func resourceTencentCloudClsScheduledSqlUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudClsScheduledSqlDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_scheduled_sql.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_scheduled_sql.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} scheduledSqlId := d.Id() var srcTopicId string if v, ok := d.GetOk("src_topic_id"); ok { diff --git a/tencentcloud/resource_tc_cls_scheduled_sql_test.go b/tencentcloud/services/cls/resource_tc_cls_scheduled_sql_test.go similarity index 82% rename from tencentcloud/resource_tc_cls_scheduled_sql_test.go rename to tencentcloud/services/cls/resource_tc_cls_scheduled_sql_test.go index 3f504a22f9..86ba1512ff 100644 --- a/tencentcloud/resource_tc_cls_scheduled_sql_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_scheduled_sql_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cls_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcls "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls" + "context" "fmt" "testing" @@ -14,10 +18,10 @@ func TestAccTencentCloudClsScheduledSqlResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckClsScheduledSqlDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsScheduledSql, @@ -43,12 +47,10 @@ func TestAccTencentCloudClsScheduledSqlResource_basic(t *testing.T) { } func testAccCheckClsScheduledSqlDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - clsService := ClsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clsService := localcls.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cls_scheduled_sql" { continue @@ -66,8 +68,8 @@ func testAccCheckClsScheduledSqlDestroy(s *terraform.State) error { func testAccCheckClsScheduledSqlExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -76,9 +78,7 @@ func testAccCheckClsScheduledSqlExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLS ScheduledSql][Create] check: CLS ScheduledSql id is not set") } - clsService := ClsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clsService := localcls.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) taskRes, err := clsService.DescribeClsScheduledSqlById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_cls_topic.go b/tencentcloud/services/cls/resource_tc_cls_topic.go similarity index 81% rename from tencentcloud/resource_tc_cls_topic.go rename to tencentcloud/services/cls/resource_tc_cls_topic.go index 6e3ac30b78..c549017a94 100644 --- a/tencentcloud/resource_tc_cls_topic.go +++ b/tencentcloud/services/cls/resource_tc_cls_topic.go @@ -1,17 +1,20 @@ -package tencentcloud +package cls import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudClsTopic() *schema.Resource { +func ResourceTencentCloudClsTopic() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudClsTopicCreate, Read: resourceTencentCloudClsTopicRead, @@ -73,9 +76,9 @@ func resourceTencentCloudClsTopic() *schema.Resource { } func resourceTencentCloudClsTopicCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_topic.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cls_topic.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cls.NewCreateTopicRequest() @@ -121,10 +124,10 @@ func resourceTencentCloudClsTopicCreate(d *schema.ResourceData, meta interface{} request.Period = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().CreateTopic(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().CreateTopic(request) if e != nil { - return retryError(e) + 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()) @@ -144,12 +147,12 @@ func resourceTencentCloudClsTopicCreate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudClsTopicRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_topic.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cls_topic.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() @@ -182,8 +185,8 @@ func resourceTencentCloudClsTopicRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudClsTopicUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_topic.update")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_cls_topic.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) request := cls.NewModifyTopicRequest() request.TopicId = helper.String(d.Id()) @@ -226,10 +229,10 @@ func resourceTencentCloudClsTopicUpdate(d *schema.ResourceData, meta interface{} request.Period = helper.IntInt64(d.Get("period").(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseClsClient().ModifyTopic(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClsClient().ModifyTopic(request) if e != nil { - return retryError(e) + 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()) @@ -245,11 +248,11 @@ func resourceTencentCloudClsTopicUpdate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudClsTopicDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cls_topic.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cls_topic.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := ClsService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := ClsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() if err := service.DeleteClsTopic(ctx, id); err != nil { diff --git a/tencentcloud/resource_tc_cls_topic_test.go b/tencentcloud/services/cls/resource_tc_cls_topic_test.go similarity index 69% rename from tencentcloud/resource_tc_cls_topic_test.go rename to tencentcloud/services/cls/resource_tc_cls_topic_test.go index 00047cc8ad..282e70153b 100644 --- a/tencentcloud/resource_tc_cls_topic_test.go +++ b/tencentcloud/services/cls/resource_tc_cls_topic_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cls_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcls "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls" + "context" "fmt" "log" @@ -20,18 +24,16 @@ func init() { } func testSweepClsTopic(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - sharedClient, err := sharedClientForRegion(region) + sharedClient, err := tcacctest.SharedClientForRegion(region) if err != nil { return fmt.Errorf("getting tencentcloud client error: %s", err.Error()) } - client := sharedClient.(*TencentCloudClient) + client := sharedClient.(tccommon.ProviderMeta) - clsService := ClsService{ - client: client.apiV3Conn, - } + clsService := localcls.NewClsService(client.GetAPIV3Conn()) instances, err := clsService.DescribeClsTopicByFilter(ctx, nil) if err != nil { @@ -44,13 +46,13 @@ func testSweepClsTopic(region string) error { now := time.Now() - createTime := stringTotime(*v.CreateTime) + createTime := tccommon.StringToTime(*v.CreateTime) interval := now.Sub(createTime).Minutes() - if strings.HasPrefix(*instanceName, keepResource) || strings.HasPrefix(*instanceName, defaultResource) { + if strings.HasPrefix(*instanceName, tcacctest.KeepResource) || strings.HasPrefix(*instanceName, tcacctest.DefaultResource) { continue } // less than 30 minute, not delete - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } @@ -65,8 +67,8 @@ func TestAccTencentCloudClsTopic_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccClsTopic, @@ -86,8 +88,8 @@ func TestAccTencentCloudClsTopic_basic(t *testing.T) { func testAccCheckClsTopicExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -96,9 +98,7 @@ func testAccCheckClsTopicExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][CLS topic][Exists] check: CLB topic id is not set") } - clsService := ClsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + clsService := localcls.NewClsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := clsService.DescribeClsTopicById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/service_tencentcloud_cls.go b/tencentcloud/services/cls/service_tencentcloud_cls.go similarity index 96% rename from tencentcloud/service_tencentcloud_cls.go rename to tencentcloud/services/cls/service_tencentcloud_cls.go index 7db49f283d..dcf454915d 100644 --- a/tencentcloud/service_tencentcloud_cls.go +++ b/tencentcloud/services/cls/service_tencentcloud_cls.go @@ -1,16 +1,23 @@ -package tencentcloud +package cls import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + cls "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) +func NewClsService(client *connectivity.TencentCloudClient) ClsService { + return ClsService{client: client} +} + type ClsService struct { client *connectivity.TencentCloudClient } @@ -18,7 +25,7 @@ type ClsService struct { // cls logset func (me *ClsService) DescribeClsLogset(ctx context.Context, logsetId string) (logset *cls.LogsetInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cls.NewDescribeLogsetsRequest() ) @@ -76,7 +83,7 @@ func (me *ClsService) DescribeClsLogset(ctx context.Context, logsetId string) (l } func (me *ClsService) DeleteClsLogsetById(ctx context.Context, logsetId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDeleteLogsetRequest() request.LogsetId = &logsetId @@ -102,7 +109,7 @@ func (me *ClsService) DeleteClsLogsetById(ctx context.Context, logsetId string) func (me *ClsService) DescribeClsLogsetByFilter(ctx context.Context, filters map[string]string) (instances []*cls.LogsetInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cls.NewDescribeLogsetsRequest() ) defer func() { @@ -154,7 +161,7 @@ func (me *ClsService) DescribeClsLogsetByFilter(ctx context.Context, filters map // cls topic func (me *ClsService) DescribeClsTopicByFilter(ctx context.Context, filters map[string]string) (instances []*cls.TopicInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cls.NewDescribeTopicsRequest() ) defer func() { @@ -205,7 +212,7 @@ func (me *ClsService) DescribeClsTopicByFilter(ctx context.Context, filters map[ func (me *ClsService) DescribeClsTopicById(ctx context.Context, topicId string) (topic *cls.TopicInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cls.NewDescribeTopicsRequest() ) @@ -261,7 +268,7 @@ func (me *ClsService) DescribeClsTopicById(ctx context.Context, topicId string) } func (me *ClsService) DeleteClsTopic(ctx context.Context, id string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDeleteTopicRequest() request.TopicId = &id @@ -288,7 +295,7 @@ func (me *ClsService) DeleteClsTopic(ctx context.Context, id string) (errRet err // cls machine group func (me *ClsService) DescribeClsMachineGroupByFilter(ctx context.Context, filters map[string]string) (instances []*cls.MachineGroupInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cls.NewDescribeMachineGroupsRequest() ) defer func() { @@ -339,7 +346,7 @@ func (me *ClsService) DescribeClsMachineGroupByFilter(ctx context.Context, filte func (me *ClsService) DescribeClsMachineGroupById(ctx context.Context, id string) (machineGroup *cls.MachineGroupInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cls.NewDescribeMachineGroupsRequest() ) defer func() { @@ -392,7 +399,7 @@ func (me *ClsService) DescribeClsMachineGroupById(ctx context.Context, id string } func (me *ClsService) DeleteClsMachineGroup(ctx context.Context, id string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDeleteMachineGroupRequest() request.GroupId = &id @@ -418,7 +425,7 @@ func (me *ClsService) DeleteClsMachineGroup(ctx context.Context, id string) (err func (me *ClsService) DescribeClsMachineGroupByConfigId(ctx context.Context, configId, groupId string) (machineGroup *cls.MachineGroupInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cls.NewDescribeConfigMachineGroupsRequest() ) defer func() { @@ -455,7 +462,7 @@ func (me *ClsService) DescribeClsMachineGroupByConfigId(ctx context.Context, con // cls cos shipper func (me *ClsService) DescribeClsCosShippersByFilter(ctx context.Context, filters map[string]string) (instances []*cls.ShipperInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cls.NewDescribeShippersRequest() ) defer func() { @@ -506,7 +513,7 @@ func (me *ClsService) DescribeClsCosShippersByFilter(ctx context.Context, filter func (me *ClsService) DescribeClsCosShipperById(ctx context.Context, shipperId string) (instance *cls.ShipperInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cls.NewDescribeShippersRequest() ) defer func() { @@ -559,7 +566,7 @@ func (me *ClsService) DescribeClsCosShipperById(ctx context.Context, shipperId s } func (me *ClsService) DeleteClsCosShipper(ctx context.Context, id string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDeleteShipperRequest() request.ShipperId = &id @@ -585,7 +592,7 @@ func (me *ClsService) DeleteClsCosShipper(ctx context.Context, id string) (errRe // cls config func (me *ClsService) DescribeClsConfigById(ctx context.Context, configId string) (config *cls.ConfigInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDescribeConfigsRequest() @@ -637,7 +644,7 @@ func (me *ClsService) DescribeClsConfigById(ctx context.Context, configId string } func (me *ClsService) DeleteClsConfig(ctx context.Context, id string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDeleteConfigRequest() request.ConfigId = &id @@ -663,7 +670,7 @@ func (me *ClsService) DeleteClsConfig(ctx context.Context, id string) (errRet er // cls config extra func (me *ClsService) DescribeClsConfigExtraById(ctx context.Context, configExtraId string) (config *cls.ConfigExtraInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDescribeConfigExtrasRequest() @@ -715,7 +722,7 @@ func (me *ClsService) DescribeClsConfigExtraById(ctx context.Context, configExtr } func (me *ClsService) DeleteClsConfigExtra(ctx context.Context, id string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDeleteConfigExtraRequest() request.ConfigExtraId = &id @@ -741,7 +748,7 @@ func (me *ClsService) DeleteClsConfigExtra(ctx context.Context, id string) (errR // cls index func (me *ClsService) DeleteClsIndex(ctx context.Context, id string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDeleteIndexRequest() request.TopicId = &id @@ -766,7 +773,7 @@ func (me *ClsService) DeleteClsIndex(ctx context.Context, id string) (errRet err } func (me *ClsService) DescribeClsAlarmById(ctx context.Context, alarmId string) (alarm *cls.AlarmInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDescribeAlarmsRequest() filter := &cls.Filter{ @@ -817,7 +824,7 @@ func (me *ClsService) DescribeClsAlarmById(ctx context.Context, alarmId string) } func (me *ClsService) DeleteClsAlarmById(ctx context.Context, alarmId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDeleteAlarmRequest() request.AlarmId = &alarmId @@ -841,7 +848,7 @@ func (me *ClsService) DeleteClsAlarmById(ctx context.Context, alarmId string) (e } func (me *ClsService) DescribeClsAlarmNoticeById(ctx context.Context, alarmNoticeId string) (alarmNotice *cls.AlarmNotice, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDescribeAlarmNoticesRequest() filter := &cls.Filter{ @@ -892,7 +899,7 @@ func (me *ClsService) DescribeClsAlarmNoticeById(ctx context.Context, alarmNotic } func (me *ClsService) DeleteClsAlarmNoticeById(ctx context.Context, alarmNoticeId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDeleteAlarmNoticeRequest() request.AlarmNoticeId = &alarmNoticeId @@ -916,7 +923,7 @@ func (me *ClsService) DeleteClsAlarmNoticeById(ctx context.Context, alarmNoticeI } func (me *ClsService) DescribeClsCkafkaConsumerById(ctx context.Context, topicId string) (ckafkaConsumer *cls.DescribeConsumerResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDescribeConsumerRequest() request.TopicId = &topicId @@ -941,7 +948,7 @@ func (me *ClsService) DescribeClsCkafkaConsumerById(ctx context.Context, topicId } func (me *ClsService) DeleteClsCkafkaConsumerById(ctx context.Context, topicId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDeleteConsumerRequest() request.TopicId = &topicId @@ -965,7 +972,7 @@ func (me *ClsService) DeleteClsCkafkaConsumerById(ctx context.Context, topicId s } func (me *ClsService) DescribeClsCosRechargeById(ctx context.Context, topicId string, rechargeId string) (cosRecharge *cls.CosRechargeInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDescribeCosRechargesRequest() request.TopicId = &topicId @@ -995,7 +1002,7 @@ func (me *ClsService) DescribeClsCosRechargeById(ctx context.Context, topicId st } func (me *ClsService) DescribeClsExportById(ctx context.Context, topicId string, exportId string) (export *cls.ExportInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDescribeExportsRequest() request.TopicId = &topicId @@ -1026,7 +1033,7 @@ func (me *ClsService) DescribeClsExportById(ctx context.Context, topicId string, } func (me *ClsService) DeleteClsExportById(ctx context.Context, exportId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDeleteExportRequest() request.ExportId = &exportId @@ -1051,7 +1058,7 @@ func (me *ClsService) DeleteClsExportById(ctx context.Context, exportId string) func (me *ClsService) DescribeClsShipperTasksByFilter(ctx context.Context, param map[string]interface{}) (shipperTasks []*cls.ShipperTaskInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cls.NewDescribeShipperTasksRequest() ) @@ -1089,7 +1096,7 @@ func (me *ClsService) DescribeClsShipperTasksByFilter(ctx context.Context, param func (me *ClsService) DescribeClsMachinesByFilter(ctx context.Context, param map[string]interface{}) (machines []*cls.MachineInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cls.NewDescribeMachinesRequest() ) @@ -1120,7 +1127,7 @@ func (me *ClsService) DescribeClsMachinesByFilter(ctx context.Context, param map func (me *ClsService) DescribeClsMachineGroupConfigsByFilter(ctx context.Context, param map[string]interface{}) (machineGroupConfigs []*cls.ConfigInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cls.NewDescribeMachineGroupConfigsRequest() ) @@ -1150,7 +1157,7 @@ func (me *ClsService) DescribeClsMachineGroupConfigsByFilter(ctx context.Context } func (me *ClsService) DescribeClsDataTransformById(ctx context.Context, taskId string) (dataTransform *cls.DataTransformTaskInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDescribeDataTransformInfoRequest() request.TaskId = &taskId @@ -1179,7 +1186,7 @@ func (me *ClsService) DescribeClsDataTransformById(ctx context.Context, taskId s } func (me *ClsService) DeleteClsDataTransformById(ctx context.Context, taskId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDeleteDataTransformRequest() request.TaskId = &taskId @@ -1202,7 +1209,7 @@ func (me *ClsService) DeleteClsDataTransformById(ctx context.Context, taskId str return } func (me *ClsService) DescribeClsKafkaRechargeById(ctx context.Context, id string, topic string) (kafkaRecharge *cls.KafkaRechargeInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDescribeKafkaRechargesRequest() request.Id = &id @@ -1231,7 +1238,7 @@ func (me *ClsService) DescribeClsKafkaRechargeById(ctx context.Context, id strin } func (me *ClsService) DeleteClsKafkaRechargeById(ctx context.Context, id string, topic string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDeleteKafkaRechargeRequest() request.Id = &id @@ -1255,7 +1262,7 @@ func (me *ClsService) DeleteClsKafkaRechargeById(ctx context.Context, id string, } func (me *ClsService) DescribeClsScheduledSqlById(ctx context.Context, taskId string) (scheduledSql *cls.ScheduledSqlTaskInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDescribeScheduledSqlInfoRequest() request.TaskId = &taskId @@ -1284,7 +1291,7 @@ func (me *ClsService) DescribeClsScheduledSqlById(ctx context.Context, taskId st } func (me *ClsService) DeleteClsScheduledSqlById(ctx context.Context, taskId string, srcTopicId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cls.NewDeleteScheduledSqlRequest() request.TaskId = &taskId diff --git a/tencentcloud/services/cls/service_tencentcloud_tag.go b/tencentcloud/services/cls/service_tencentcloud_tag.go new file mode 100644 index 0000000000..e95e82e755 --- /dev/null +++ b/tencentcloud/services/cls/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package cls + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 5f5e788d7a81254d4eb3a861c2fa18e25f48712e Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 14:12:26 +0800 Subject: [PATCH 20/31] refactor: migrate package tencentcloud/services/common --- tencentcloud/provider.go | 49 +- .../data_source_tc_availability_regions.go | 23 +- ...ata_source_tc_availability_regions_test.go | 16 +- .../data_source_tc_availability_zones.go | 21 +- ...source_tc_availability_zones_by_product.go | 21 +- ...e_tc_availability_zones_by_product_test.go | 18 +- .../data_source_tc_availability_zones_test.go | 16 +- tencentcloud/services/common/extension_cvm.go | 118 ++ .../common}/service_tencentcloud_api.go | 7 +- .../common/service_tencentcloud_cvm.go | 1772 +++++++++++++++++ 10 files changed, 1984 insertions(+), 77 deletions(-) rename tencentcloud/{ => services/common}/data_source_tc_availability_regions.go (82%) rename tencentcloud/{ => services/common}/data_source_tc_availability_regions_test.go (73%) rename tencentcloud/{ => services/common}/data_source_tc_availability_zones.go (84%) rename tencentcloud/{ => services/common}/data_source_tc_availability_zones_by_product.go (84%) rename tencentcloud/{ => services/common}/data_source_tc_availability_zones_by_product_test.go (74%) rename tencentcloud/{ => services/common}/data_source_tc_availability_zones_test.go (73%) create mode 100644 tencentcloud/services/common/extension_cvm.go rename tencentcloud/{ => services/common}/service_tencentcloud_api.go (89%) create mode 100644 tencentcloud/services/common/service_tencentcloud_cvm.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 9d4c0b4391..50eed461e7 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,17 +1,6 @@ package tencentcloud import ( - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ckafka" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ciam" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/chdfs" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cfw" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cfs" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdwpg" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdwch" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdn" "encoding/json" "fmt" "io/ioutil" @@ -21,17 +10,9 @@ import ( "strconv" "strings" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cat" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ccn" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdb" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdh" - - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mitchellh/go-homedir" - "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + sdkcommon "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" sts "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sts/v20180813" providercommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" @@ -42,6 +23,24 @@ import ( "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apm" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/bh" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/bi" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cat" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cbs" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ccn" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdb" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdh" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdn" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdwch" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cdwpg" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cfs" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cfw" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/chdfs" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ci" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ciam" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/ckafka" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/common" ) const ( @@ -174,13 +173,13 @@ func Provider() *schema.Provider { }, DataSourcesMap: map[string]*schema.Resource{ - "tencentcloud_availability_regions": dataSourceTencentCloudAvailabilityRegions(), + "tencentcloud_availability_regions": common.DataSourceTencentCloudAvailabilityRegions(), "tencentcloud_emr": dataSourceTencentCloudEmr(), "tencentcloud_emr_nodes": dataSourceTencentCloudEmrNodes(), "tencentcloud_emr_cvm_quota": dataSourceTencentCloudEmrCvmQuota(), "tencentcloud_emr_auto_scale_records": dataSourceTencentCloudEmrAutoScaleRecords(), - "tencentcloud_availability_zones": dataSourceTencentCloudAvailabilityZones(), - "tencentcloud_availability_zones_by_product": dataSourceTencentCloudAvailabilityZonesByProduct(), + "tencentcloud_availability_zones": common.DataSourceTencentCloudAvailabilityZones(), + "tencentcloud_availability_zones_by_product": common.DataSourceTencentCloudAvailabilityZonesByProduct(), "tencentcloud_projects": dataSourceTencentCloudProjects(), "tencentcloud_instances": dataSourceTencentCloudInstances(), "tencentcloud_instances_set": dataSourceTencentCloudInstancesSet(), @@ -1944,7 +1943,7 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) { // standard client var tcClient TencentCloudClient tcClient.apiV3Conn = &connectivity.TencentCloudClient{ - Credential: common.NewTokenCredential( + Credential: sdkcommon.NewTokenCredential( secretId, secretKey, securityToken, @@ -2034,7 +2033,7 @@ func genClientWithSTS(tcClient *TencentCloudClient, assumeRoleArn, assumeRoleSes } // using STS credentials - tcClient.apiV3Conn.Credential = common.NewTokenCredential( + tcClient.apiV3Conn.Credential = sdkcommon.NewTokenCredential( *response.Response.Credentials.TmpSecretId, *response.Response.Credentials.TmpSecretKey, *response.Response.Credentials.Token, diff --git a/tencentcloud/data_source_tc_availability_regions.go b/tencentcloud/services/common/data_source_tc_availability_regions.go similarity index 82% rename from tencentcloud/data_source_tc_availability_regions.go rename to tencentcloud/services/common/data_source_tc_availability_regions.go index ff0240daa6..657f220a36 100644 --- a/tencentcloud/data_source_tc_availability_regions.go +++ b/tencentcloud/services/common/data_source_tc_availability_regions.go @@ -1,16 +1,19 @@ -package tencentcloud +package common import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAvailabilityRegions() *schema.Resource { +func DataSourceTencentCloudAvailabilityRegions() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAvailabilityRegionsRead, @@ -61,12 +64,12 @@ func dataSourceTencentCloudAvailabilityRegions() *schema.Resource { } func dataSourceTencentCloudAvailabilityRegionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_availability_regions.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_availability_regions.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var name string @@ -75,7 +78,7 @@ func dataSourceTencentCloudAvailabilityRegionsRead(d *schema.ResourceData, meta name = v.(string) } if name == "default" { - name = meta.(*TencentCloudClient).apiV3Conn.Region + name = meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region } if v, ok := d.GetOkExists("include_unavailable"); ok { includeUnavailable = v.(bool) @@ -83,10 +86,10 @@ func dataSourceTencentCloudAvailabilityRegionsRead(d *schema.ResourceData, meta var regions []*cvm.RegionInfo var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { regions, errRet = cvmService.DescribeRegions(ctx) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -121,7 +124,7 @@ func dataSourceTencentCloudAvailabilityRegionsRead(d *schema.ResourceData, meta output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), regionList); err != nil { + if err := tccommon.WriteToFile(output.(string), regionList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_availability_regions_test.go b/tencentcloud/services/common/data_source_tc_availability_regions_test.go similarity index 73% rename from tencentcloud/data_source_tc_availability_regions_test.go rename to tencentcloud/services/common/data_source_tc_availability_regions_test.go index 583c02abd6..a8cd3c4cbb 100644 --- a/tencentcloud/data_source_tc_availability_regions_test.go +++ b/tencentcloud/services/common/data_source_tc_availability_regions_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package common_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,28 +12,28 @@ func TestAccTencentCloudAvailabilityRegionsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTencentCloudAvailabilityRegionsDataSourceConfigBasic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_availability_regions.all"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_availability_regions.all"), resource.TestCheckResourceAttrSet("data.tencentcloud_availability_regions.all", "regions.#"), ), }, { Config: testAccTencentCloudAvailabilityRegionsDataSourceConfigFilterWithName, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_availability_regions.filter"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_availability_regions.filter"), resource.TestCheckResourceAttrSet("data.tencentcloud_availability_regions.filter", "regions.#"), ), }, { Config: testAccTencentCloudAvailabilityRegionsDataSourceConfigIncludeUnavailable, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_availability_regions.unavailable"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_availability_regions.unavailable"), resource.TestCheckResourceAttrSet("data.tencentcloud_availability_regions.unavailable", "regions.#"), ), }, @@ -44,7 +46,7 @@ data "tencentcloud_availability_regions" "all" { } ` -const testAccTencentCloudAvailabilityRegionsDataSourceConfigFilterWithName = defaultVpcVariable + ` +const testAccTencentCloudAvailabilityRegionsDataSourceConfigFilterWithName = tcacctest.DefaultVpcVariable + ` data "tencentcloud_availability_regions" "filter" { name = var.availability_region } diff --git a/tencentcloud/data_source_tc_availability_zones.go b/tencentcloud/services/common/data_source_tc_availability_zones.go similarity index 84% rename from tencentcloud/data_source_tc_availability_zones.go rename to tencentcloud/services/common/data_source_tc_availability_zones.go index 49cdb5f819..72468d4e07 100644 --- a/tencentcloud/data_source_tc_availability_zones.go +++ b/tencentcloud/services/common/data_source_tc_availability_zones.go @@ -1,16 +1,19 @@ -package tencentcloud +package common import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAvailabilityZones() *schema.Resource { +func DataSourceTencentCloudAvailabilityZones() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This data source will been deprecated in Terraform TencentCloud provider later version. Please use `tencentcloud_availability_zones_by_product` instead.", @@ -68,12 +71,12 @@ func dataSourceTencentCloudAvailabilityZones() *schema.Resource { } func dataSourceTencentCloudAvailabilityZonesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_availability_zones.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_availability_zones.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var name string @@ -87,10 +90,10 @@ func dataSourceTencentCloudAvailabilityZonesRead(d *schema.ResourceData, meta in var zones []*cvm.ZoneInfo var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { zones, errRet = cvmService.DescribeZones(ctx) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -126,7 +129,7 @@ func dataSourceTencentCloudAvailabilityZonesRead(d *schema.ResourceData, meta in output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), zoneList); err != nil { + if err := tccommon.WriteToFile(output.(string), zoneList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_availability_zones_by_product.go b/tencentcloud/services/common/data_source_tc_availability_zones_by_product.go similarity index 84% rename from tencentcloud/data_source_tc_availability_zones_by_product.go rename to tencentcloud/services/common/data_source_tc_availability_zones_by_product.go index 35351a9826..1269760064 100644 --- a/tencentcloud/data_source_tc_availability_zones_by_product.go +++ b/tencentcloud/services/common/data_source_tc_availability_zones_by_product.go @@ -1,16 +1,19 @@ -package tencentcloud +package common import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" api "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/api/v20201106" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAvailabilityZonesByProduct() *schema.Resource { +func DataSourceTencentCloudAvailabilityZonesByProduct() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAvailabilityZonesByProductRead, @@ -71,12 +74,12 @@ func dataSourceTencentCloudAvailabilityZonesByProduct() *schema.Resource { } func dataSourceTencentCloudAvailabilityZonesByProductRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_availability_zones.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_availability_zones.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) apiService := APIService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var name string @@ -94,10 +97,10 @@ func dataSourceTencentCloudAvailabilityZonesByProductRead(d *schema.ResourceData var zones []*api.ZoneInfo var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { zones, errRet = apiService.DescribeZonesWithProduct(ctx, product) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -133,7 +136,7 @@ func dataSourceTencentCloudAvailabilityZonesByProductRead(d *schema.ResourceData output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), zoneList); err != nil { + if err := tccommon.WriteToFile(output.(string), zoneList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_availability_zones_by_product_test.go b/tencentcloud/services/common/data_source_tc_availability_zones_by_product_test.go similarity index 74% rename from tencentcloud/data_source_tc_availability_zones_by_product_test.go rename to tencentcloud/services/common/data_source_tc_availability_zones_by_product_test.go index 770b8d98d6..38e663a480 100644 --- a/tencentcloud/data_source_tc_availability_zones_by_product_test.go +++ b/tencentcloud/services/common/data_source_tc_availability_zones_by_product_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package common_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,35 +12,35 @@ func TestAccTencentCloudAvailabilityZonesByProductDataSource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTencentCloudAvailabilityZonesByProductByProductDataSourceConfigBasic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_availability_zones_by_product.all"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_availability_zones_by_product.all"), resource.TestCheckResourceAttrSet("data.tencentcloud_availability_zones_by_product.all", "zones.#"), ), }, { Config: testAccTencentCloudAvailabilityZonesByProductByProductDataSourceConfigFilterWithName, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_availability_zones_by_product.filter"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_availability_zones_by_product.filter"), resource.TestCheckResourceAttrSet("data.tencentcloud_availability_zones_by_product.filter", "zones.#"), ), }, { Config: testAccTencentCloudAvailabilityZonesByProductDataSourceConfigIncludeUnavailable, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_availability_zones_by_product.unavailable"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_availability_zones_by_product.unavailable"), resource.TestCheckResourceAttrSet("data.tencentcloud_availability_zones_by_product.unavailable", "zones.#"), ), }, { Config: testAccTencentCloudAvailabilityZonesByProductDataSourceConfigIncludeUnavailable, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_availability_zones_by_product.unavailable"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_availability_zones_by_product.unavailable"), resource.TestCheckResourceAttrSet("data.tencentcloud_availability_zones_by_product.unavailable", "zones.#"), ), }, @@ -52,7 +54,7 @@ data "tencentcloud_availability_zones_by_product" "basic" { } ` -const testAccTencentCloudAvailabilityZonesByProductByProductDataSourceConfigFilterWithName = defaultVpcVariable + ` +const testAccTencentCloudAvailabilityZonesByProductByProductDataSourceConfigFilterWithName = tcacctest.DefaultVpcVariable + ` data "tencentcloud_availability_zones_by_product" "filter" { product = var.cvm_product name = var.availability_zone diff --git a/tencentcloud/data_source_tc_availability_zones_test.go b/tencentcloud/services/common/data_source_tc_availability_zones_test.go similarity index 73% rename from tencentcloud/data_source_tc_availability_zones_test.go rename to tencentcloud/services/common/data_source_tc_availability_zones_test.go index 11d10fff69..28bc242bdc 100644 --- a/tencentcloud/data_source_tc_availability_zones_test.go +++ b/tencentcloud/services/common/data_source_tc_availability_zones_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package common_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,28 +12,28 @@ func TestAccTencentCloudAvailabilityZonesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTencentCloudAvailabilityZonesDataSourceConfigBasic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_availability_zones.all"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_availability_zones.all"), resource.TestCheckResourceAttrSet("data.tencentcloud_availability_zones.all", "zones.#"), ), }, { Config: testAccTencentCloudAvailabilityZonesDataSourceConfigFilterWithName, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_availability_zones.filter"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_availability_zones.filter"), resource.TestCheckResourceAttrSet("data.tencentcloud_availability_zones.filter", "zones.#"), ), }, { Config: testAccTencentCloudAvailabilityZonesDataSourceConfigIncludeUnavailable, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_availability_zones.unavailable"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_availability_zones.unavailable"), resource.TestCheckResourceAttrSet("data.tencentcloud_availability_zones.unavailable", "zones.#"), ), }, @@ -44,7 +46,7 @@ data "tencentcloud_availability_zones" "all" { } ` -const testAccTencentCloudAvailabilityZonesDataSourceConfigFilterWithName = defaultVpcVariable + ` +const testAccTencentCloudAvailabilityZonesDataSourceConfigFilterWithName = tcacctest.DefaultVpcVariable + ` data "tencentcloud_availability_zones" "filter" { name = var.availability_zone } diff --git a/tencentcloud/services/common/extension_cvm.go b/tencentcloud/services/common/extension_cvm.go new file mode 100644 index 0000000000..de9142aea6 --- /dev/null +++ b/tencentcloud/services/common/extension_cvm.go @@ -0,0 +1,118 @@ +package common + +const ( + CVM_CHARGE_TYPE_PREPAID = "PREPAID" + CVM_CHARGE_TYPE_POSTPAID = "POSTPAID_BY_HOUR" + CVM_CHARGE_TYPE_SPOTPAID = "SPOTPAID" + CVM_CHARGE_TYPE_CDHPAID = "CDHPAID" + + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PREPAID = "BANDWIDTH_PREPAID" + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_POSTPAID = "BANDWIDTH_POSTPAID_BY_HOUR" + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PACKAGE = "BANDWIDTH_PACKAGE" + CVM_INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID = "TRAFFIC_POSTPAID_BY_HOUR" + + CVM_STATUS_RUNNING = "RUNNING" + CVM_STATUS_STOPPED = "STOPPED" + CVM_STATUS_SHUTDOWN = "SHUTDOWN" + CVM_STATUS_TERMINATING = "TERMINATING" + CVM_STATUS_LAUNCH_FAILED = "LAUNCH_FAILED" + + CVM_LATEST_OPERATION_STATE_OPERATING = "OPERATING" + CVM_LATEST_OPERATION_STATE_SUCCESS = "SUCCESS" + CVM_LATEST_OPERATION_STATE_FAILED = "FAILED" + + CVM_PREPAID_RENEW_FLAG_NOTIFY_NOTIFY_AND_AUTO_RENEW = "NOTIFY_AND_AUTO_RENEW" + CVM_PREPAID_RENEW_FLAG_NOTIFY_AND_MANUAL_RENEW = "NOTIFY_AND_MANUAL_RENEW" + CVM_PREPAID_RENEW_FLAG_DISABLE_NOTIFY_AND_MANUAL_RENEW = "DISABLE_NOTIFY_AND_MANUAL_RENEW" + + CVM_DISK_TYPE_LOCAL_BASIC = "LOCAL_BASIC" + CVM_DISK_TYPE_LOCAL_SSD = "LOCAL_SSD" + CVM_DISK_TYPE_CLOUD_BASIC = "CLOUD_BASIC" + CVM_DISK_TYPE_CLOUD_SSD = "CLOUD_SSD" + CVM_DISK_TYPE_CLOUD_PREMIUM = "CLOUD_PREMIUM" + CVM_DISK_TYPE_CLOUD_BSSD = "CLOUD_BSSD" + CVM_DISK_TYPE_CLOUD_HSSD = "CLOUD_HSSD" + CVM_DISK_TYPE_CLOUD_TSSD = "CLOUD_TSSD" + + CVM_PLACEMENT_GROUP_TYPE_HOST = "HOST" + CVM_PLACEMENT_GROUP_TYPE_SW = "SW" + CVM_PLACEMENT_GROUP_TYPE_RACK = "RACK" + + ZONE_STATE_AVAILABLE = "AVAILABLE" + ZONE_STATE_UNAVAILABLE = "UNAVAILABLE" + + CVM_NOT_FOUND_ERROR = "InvalidInstanceId.NotFound" + KEY_PAIR_NOT_SUPPORT_ERROR = "InvalidParameterValue.KeyPairNotSupported" + KYE_PAIR_INVALID_ERROR = "InvalidKeyPair" + + CVM_SPOT_INSTANCE_TYPE_ONE_TIME = "ONE-TIME" + + CVM_MARKET_TYPE_SPOT = "spot" + + CVM_IMAGE_LOGIN = "TRUE" + CVM_IMAGE_LOGIN_NOT = "FALSE" + + // @Deprecated use cvm.INVALIDPARAMETERVALUE_ZONENOTSUPPORTED + CVM_ZONE_NOT_SUPPORT_ERROR = "InvalidParameterValue.ZoneNotSupported" + // @Deprecated use cvm.RESOURCEINSUFFICIENT_CLOUDDISKSOLDOUT instead + CVM_CLOUD_DISK_SOLD_OUT_ERROR = "ResourceInsufficient.CloudDiskSoldOut" + + CVM_STOP_MODE_KEEP_CHARGING = "KEEP_CHARGING" + CVM_STOP_MODE_STOP_CHARGING = "STOP_CHARGING" + CVM_SELL_STATUS = "SELL" + CVM_SOLD_OUT_STATUS = "SOLD_OUT" + MIDLINE = "-" + UNDERLINE = "_" + IMAGE_SHARE_PERMISSION_SHARE = "SHARE" + IMAGE_SHARE_PERMISSION_CANCEL = "CANCEL" +) + +// Only client error can cvm retry, others will directly returns +var CVM_RETRYABLE_ERROR = []string{ + // client + //"ClientError.NetworkError", + "ClientError.HttpStatusCodeError", +} + +var CVM_CHARGE_TYPE = []string{ + CVM_CHARGE_TYPE_PREPAID, + CVM_CHARGE_TYPE_POSTPAID, + CVM_CHARGE_TYPE_SPOTPAID, + CVM_CHARGE_TYPE_CDHPAID, +} + +var CVM_INTERNET_CHARGE_TYPE = []string{ + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PREPAID, + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_POSTPAID, + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PACKAGE, + CVM_INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID, +} + +var CVM_PREPAID_PERIOD = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36} + +var CVM_PREPAID_RENEW_FLAG = []string{ + CVM_PREPAID_RENEW_FLAG_NOTIFY_NOTIFY_AND_AUTO_RENEW, + CVM_PREPAID_RENEW_FLAG_NOTIFY_AND_MANUAL_RENEW, + CVM_PREPAID_RENEW_FLAG_DISABLE_NOTIFY_AND_MANUAL_RENEW, +} + +var CVM_DISK_TYPE = []string{ + CVM_DISK_TYPE_LOCAL_BASIC, + CVM_DISK_TYPE_LOCAL_SSD, + CVM_DISK_TYPE_CLOUD_BASIC, + CVM_DISK_TYPE_CLOUD_SSD, + CVM_DISK_TYPE_CLOUD_PREMIUM, + CVM_DISK_TYPE_CLOUD_BSSD, + CVM_DISK_TYPE_CLOUD_HSSD, + CVM_DISK_TYPE_CLOUD_TSSD, +} + +var CVM_PLACEMENT_GROUP_TYPE = []string{ + CVM_PLACEMENT_GROUP_TYPE_HOST, + CVM_PLACEMENT_GROUP_TYPE_SW, + CVM_PLACEMENT_GROUP_TYPE_RACK, +} + +var CVM_SPOT_INSTANCE_TYPE = []string{ + CVM_SPOT_INSTANCE_TYPE_ONE_TIME, +} diff --git a/tencentcloud/service_tencentcloud_api.go b/tencentcloud/services/common/service_tencentcloud_api.go similarity index 89% rename from tencentcloud/service_tencentcloud_api.go rename to tencentcloud/services/common/service_tencentcloud_api.go index 350c743946..5170ad2297 100644 --- a/tencentcloud/service_tencentcloud_api.go +++ b/tencentcloud/services/common/service_tencentcloud_api.go @@ -1,11 +1,14 @@ -package tencentcloud +package common import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + api "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/api/v20201106" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) @@ -15,7 +18,7 @@ type APIService struct { } func (me *APIService) DescribeZonesWithProduct(ctx context.Context, product string) (zones []*api.ZoneInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := api.NewDescribeZonesRequest() request.Product = common.StringPtr(product) diff --git a/tencentcloud/services/common/service_tencentcloud_cvm.go b/tencentcloud/services/common/service_tencentcloud_cvm.go new file mode 100644 index 0000000000..083ce860c6 --- /dev/null +++ b/tencentcloud/services/common/service_tencentcloud_cvm.go @@ -0,0 +1,1772 @@ +package common + +import ( + "context" + "fmt" + "log" + "sort" + "strings" + "sync" + "time" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + sdkError "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +type CvmService struct { + client *connectivity.TencentCloudClient +} + +func (me *CvmService) DescribeInstanceSetByIds(ctx context.Context, instanceSetIds string) (instance []*cvm.Instance, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeInstancesRequest() + + instanceSet, err := helper.StrToStrList(instanceSetIds) + if err != nil { + return + } + + for _, v := range instanceSet { + ins := v + instanceId := &ins + request.InstanceIds = append(request.InstanceIds, instanceId) + } + + request.Limit = helper.IntInt64(100) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.InstanceSet) < 1 { + return + } + instance = response.Response.InstanceSet + return +} + +func (me *CvmService) DescribeInstanceById(ctx context.Context, instanceId string) (instance *cvm.Instance, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeInstancesRequest() + request.InstanceIds = []*string{&instanceId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.InstanceSet) < 1 { + return + } + instance = response.Response.InstanceSet[0] + return +} + +func (me *CvmService) DescribeInstanceByFilter(ctx context.Context, instancesId []*string, filters map[string]string) (instances []*cvm.Instance, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeInstancesRequest() + if instancesId != nil { + request.InstanceIds = instancesId + } else { + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + filter := cvm.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + } + + var offset int64 = 0 + var pageSize int64 = 100 + instances = make([]*cvm.Instance, 0) + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.InstanceSet) < 1 { + break + } + instances = append(instances, response.Response.InstanceSet...) + if len(response.Response.InstanceSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *CvmService) DescribeInstanceInParallelByFilter(ctx context.Context, filters map[string]string) (instances []*cvm.Instance, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeInstancesRequest() + + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + filter := cvm.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + response, err := me.client.UseCvmClient().DescribeInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + if response == nil || len(response.Response.InstanceSet) < 1 { + return + } + + total := response.Response.TotalCount + + var limit = 100 + + num := int(*total) / limit + + maxConcurrentNum := 50 + //g := tccommon.NewGoRoutine(num + 1) + g := tccommon.NewGoRoutine(maxConcurrentNum) + wg := sync.WaitGroup{} + + var instanceSetList = make([]interface{}, num+1) + + for i := 0; i <= num; i++ { + wg.Add(1) + value := i + goFunc := func() { + offset := value * limit + request := cvm.NewDescribeInstancesRequest() + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + filter := cvm.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + request.Offset = helper.IntInt64(offset) + request.Limit = helper.IntInt64(limit) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + instanceSetList[value] = response.Response.InstanceSet + + wg.Done() + log.Printf("[DEBUG]%s thread %d finished", logId, value) + } + g.Run(goFunc) + } + wg.Wait() + + log.Printf("[DEBUG]%s DescribeInstance requet finished", logId) + for _, v := range instanceSetList { + instances = append(instances, v.([]*cvm.Instance)...) + } + log.Printf("[DEBUG]%s transfer Instance finished", logId) + return +} + +func (me *CvmService) ModifyInstanceName(ctx context.Context, instanceId, instanceName string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyInstancesAttributeRequest() + request.InstanceIds = []*string{&instanceId} + request.InstanceName = &instanceName + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyInstancesAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ModifySecurityGroups(ctx context.Context, instanceId string, securityGroups []*string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyInstancesAttributeRequest() + request.InstanceIds = []*string{&instanceId} + request.SecurityGroups = securityGroups + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyInstancesAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ModifyDisableApiTermination(ctx context.Context, instanceId string, disableApiTermination bool) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyInstancesAttributeRequest() + request.InstanceIds = []*string{&instanceId} + request.DisableApiTermination = &disableApiTermination + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyInstancesAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ModifyProjectId(ctx context.Context, instanceId string, projectId int64) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyInstancesProjectRequest() + request.InstanceIds = []*string{&instanceId} + request.ProjectId = &projectId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyInstancesProject(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ModifyInstanceType(ctx context.Context, instanceId, instanceType string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewResetInstancesTypeRequest() + request.InstanceIds = []*string{&instanceId} + request.InstanceType = &instanceType + request.ForceStop = helper.Bool(true) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ResetInstancesType(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ModifyPassword(ctx context.Context, instanceId, password string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewResetInstancesPasswordRequest() + request.InstanceIds = []*string{&instanceId} + request.Password = &password + forceStop := true + request.ForceStop = &forceStop + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ResetInstancesPassword(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ModifyInternetMaxBandwidthOut(ctx context.Context, instanceId, internetChargeType string, internetMaxBandWidthOut int64) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewResetInstancesInternetMaxBandwidthRequest() + request.InstanceIds = []*string{&instanceId} + request.InternetAccessible = &cvm.InternetAccessible{ + InternetChargeType: &internetChargeType, + InternetMaxBandwidthOut: &internetMaxBandWidthOut, + } + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseCvmClient().ResetInstancesInternetMaxBandwidth(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *CvmService) ModifyVpc(ctx context.Context, instanceId, vpcId, subnetId, privateIp string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyInstancesVpcAttributeRequest() + request.InstanceIds = []*string{&instanceId} + request.VirtualPrivateCloud = &cvm.VirtualPrivateCloud{ + VpcId: &vpcId, + SubnetId: &subnetId, + } + if privateIp != "" { + request.VirtualPrivateCloud.PrivateIpAddresses = []*string{&privateIp} + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyInstancesVpcAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) StopInstance(ctx context.Context, instanceId string, stoppedMode string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewStopInstancesRequest() + request.InstanceIds = []*string{&instanceId} + if stoppedMode != "" { + request.StoppedMode = &stoppedMode + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().StopInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) StartInstance(ctx context.Context, instanceId string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewStartInstancesRequest() + request.InstanceIds = []*string{&instanceId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().StartInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) DeleteInstance(ctx context.Context, instanceId string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewTerminateInstancesRequest() + request.InstanceIds = []*string{&instanceId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().TerminateInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) DeleteInstanceSetByIds(ctx context.Context, instanceSetIds string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewTerminateInstancesRequest() + + instanceSet, err := helper.StrToStrList(instanceSetIds) + if err != nil { + return err + } + + for _, v := range instanceSet { + ins := v + instanceId := &ins + request.InstanceIds = append(request.InstanceIds, instanceId) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().TerminateInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ResetInstance(ctx context.Context, request *cvm.ResetInstanceRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCvmClient().ResetInstance(request) + + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) DescribeInstanceTypes(ctx context.Context, zone string) (instanceTypes []*cvm.InstanceTypeConfig, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeInstanceTypeConfigsRequest() + if zone != "" { + request.Filters = make([]*cvm.Filter, 0, 1) + filter := &cvm.Filter{ + Name: helper.String("zone"), + Values: []*string{&zone}, + } + request.Filters = append(request.Filters, filter) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeInstanceTypeConfigs(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + instanceTypes = response.Response.InstanceTypeConfigSet + return +} + +func (me *CvmService) DescribeInstanceTypesByFilter(ctx context.Context, filters map[string][]string) (instanceTypes []*cvm.InstanceTypeConfig, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeInstanceTypeConfigsRequest() + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + values := make([]*string, 0, len(v)) + for _, value := range v { + values = append(values, helper.String(value)) + } + filter := &cvm.Filter{ + Name: helper.String(k), + Values: values, + } + request.Filters = append(request.Filters, filter) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeInstanceTypeConfigs(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + instanceTypes = response.Response.InstanceTypeConfigSet + return +} + +func (me *CvmService) DescribeInstancesSellTypeByFilter(ctx context.Context, filters map[string][]string) (instanceTypes []*cvm.InstanceTypeQuotaItem, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeZoneInstanceConfigInfosRequest() + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + values := make([]*string, 0, len(v)) + for _, value := range v { + values = append(values, helper.String(value)) + } + filter := &cvm.Filter{ + Name: helper.String(k), + Values: values, + } + request.Filters = append(request.Filters, filter) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeZoneInstanceConfigInfos(request) + if err != nil { + //deal with not supported error + e, ok := err.(*sdkErrors.TencentCloudSDKError) + if ok && e.Code == CVM_ZONE_NOT_SUPPORT_ERROR { + return + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + + instanceTypes = response.Response.InstanceTypeQuotaSet + return +} + +func (me *CvmService) DescribeKeyPairById(ctx context.Context, keyId string) (keyPair *cvm.KeyPair, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeKeyPairsRequest() + request.KeyIds = []*string{&keyId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeKeyPairs(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.KeyPairSet) > 0 { + keyPair = response.Response.KeyPairSet[0] + } + return +} + +func (me *CvmService) DescribeKeyPairByFilter(ctx context.Context, id, name string, projectId *int) (keyPairs []*cvm.KeyPair, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeKeyPairsRequest() + if id != "" { + request.KeyIds = []*string{&id} + } + request.Filters = make([]*cvm.Filter, 0) + if name != "" { + filter := &cvm.Filter{ + Name: helper.String("key-name"), + Values: []*string{&name}, + } + request.Filters = append(request.Filters, filter) + } + if projectId != nil { + filter := &cvm.Filter{ + Name: helper.String("project-id"), + Values: []*string{helper.String(fmt.Sprintf("%d", *projectId))}, + } + request.Filters = append(request.Filters, filter) + } + + var offset int64 = 0 + var pageSize int64 = 100 + keyPairs = make([]*cvm.KeyPair, 0) + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeKeyPairs(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.KeyPairSet) < 1 { + break + } + keyPairs = append(keyPairs, response.Response.KeyPairSet...) + if len(response.Response.KeyPairSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *CvmService) ModifyKeyPairName(ctx context.Context, keyId, keyName string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyKeyPairAttributeRequest() + request.KeyId = &keyId + request.KeyName = &keyName + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyKeyPairAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) DeleteKeyPair(ctx context.Context, keyId string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDeleteKeyPairsRequest() + request.KeyIds = []*string{&keyId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DeleteKeyPairs(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) UnbindKeyPair(ctx context.Context, keyIds []*string, instanceIds []*string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDisassociateInstancesKeyPairsRequest() + request.KeyIds = keyIds + request.InstanceIds = instanceIds + request.ForceStop = helper.Bool(true) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DisassociateInstancesKeyPairs(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) BindKeyPair(ctx context.Context, keyIds []*string, instanceId string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewAssociateInstancesKeyPairsRequest() + request.KeyIds = keyIds + request.InstanceIds = []*string{&instanceId} + request.ForceStop = helper.Bool(true) + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseCvmClient().AssociateInstancesKeyPairs(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + + return nil +} + +func (me *CvmService) CreatePlacementGroup(ctx context.Context, placementName, placementType string) (placementId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewCreateDisasterRecoverGroupRequest() + request.Name = &placementName + request.Type = &placementType + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().CreateDisasterRecoverGroup(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response.Response.DisasterRecoverGroupId == nil { + errRet = fmt.Errorf("placement group id is nil") + return + } + placementId = *response.Response.DisasterRecoverGroupId + return +} + +func (me *CvmService) DescribePlacementGroupById(ctx context.Context, placementId string) (placementGroup *cvm.DisasterRecoverGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeDisasterRecoverGroupsRequest() + request.DisasterRecoverGroupIds = []*string{&placementId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeDisasterRecoverGroups(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.DisasterRecoverGroupSet) < 1 { + return + } + placementGroup = response.Response.DisasterRecoverGroupSet[0] + return +} + +func (me *CvmService) DescribePlacementGroupByFilter(ctx context.Context, id, name string) (placementGroups []*cvm.DisasterRecoverGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeDisasterRecoverGroupsRequest() + if id != "" { + request.DisasterRecoverGroupIds = []*string{&id} + } + if name != "" { + request.Name = &name + } + + var offset int64 = 0 + var pageSize int64 = 100 + placementGroups = make([]*cvm.DisasterRecoverGroup, 0) + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeDisasterRecoverGroups(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.DisasterRecoverGroupSet) < 1 { + break + } + placementGroups = append(placementGroups, response.Response.DisasterRecoverGroupSet...) + if len(response.Response.DisasterRecoverGroupSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *CvmService) ModifyPlacementGroup(ctx context.Context, placementId, name string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyDisasterRecoverGroupAttributeRequest() + request.DisasterRecoverGroupId = &placementId + request.Name = &name + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyDisasterRecoverGroupAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) DeletePlacementGroup(ctx context.Context, placementId string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDeleteDisasterRecoverGroupsRequest() + request.DisasterRecoverGroupIds = []*string{&placementId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DeleteDisasterRecoverGroups(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) DescribeRegions(ctx context.Context) (zones []*cvm.RegionInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeRegionsRequest() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeRegions(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + zones = response.Response.RegionSet + return +} + +func (me *CvmService) DescribeZones(ctx context.Context) (zones []*cvm.ZoneInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeZonesRequest() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeZones(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + zones = response.Response.ZoneSet + return +} + +func (me *CvmService) CreateReservedInstance(ctx context.Context, configId string, count int64, extendParams map[string]interface{}) (instanceId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewPurchaseReservedInstancesOfferingRequest() + request.ReservedInstancesOfferingId = &configId + request.InstanceCount = &count + if v, ok := extendParams["reserved_instance_name"]; ok { + reservedInstanceName := v.(string) + request.ReservedInstanceName = &reservedInstanceName + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().PurchaseReservedInstancesOffering(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response.Response.ReservedInstanceId == nil { + errRet = fmt.Errorf("reserved instance id is nil") + return + } + instanceId = *response.Response.ReservedInstanceId + return +} + +func (me *CvmService) DescribeReservedInstanceByFilter(ctx context.Context, filters map[string]string) (instances []*cvm.ReservedInstances, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeReservedInstancesRequest() + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + filter := cvm.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset int64 = 0 + var pageSize int64 = 100 + instances = make([]*cvm.ReservedInstances, 0) + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeReservedInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.ReservedInstancesSet) < 1 { + break + } + instances = append(instances, response.Response.ReservedInstancesSet...) + if len(response.Response.ReservedInstancesSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *CvmService) DescribeReservedInstanceConfigs(ctx context.Context, filters map[string]string) (configs []*cvm.ReservedInstancesOffering, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeReservedInstancesOfferingsRequest() + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + filter := cvm.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset int64 = 0 + var pageSize int64 = 100 + configs = make([]*cvm.ReservedInstancesOffering, 0) + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeReservedInstancesOfferings(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.ReservedInstancesOfferingsSet) < 1 { + break + } + configs = append(configs, response.Response.ReservedInstancesOfferingsSet...) + if len(response.Response.ReservedInstancesOfferingsSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func flattenCvmTagsMapping(tags []*cvm.Tag) (mapping map[string]string) { + mapping = make(map[string]string) + for _, tag := range tags { + mapping[*tag.Key] = *tag.Value + } + return +} + +type cvmImages []*cvm.Image + +func (a cvmImages) Len() int { + return len(a) +} + +func (a cvmImages) Swap(i, j int) { + a[i], a[j] = a[j], a[i] +} + +func (a cvmImages) Less(i, j int) bool { + if a[i].CreatedTime == nil || a[j].CreatedTime == nil { + return false + } + + itime, _ := time.Parse(time.RFC3339, *a[i].CreatedTime) + jtime, _ := time.Parse(time.RFC3339, *a[j].CreatedTime) + + return itime.Unix() < jtime.Unix() +} + +// Sort images by creation date, in descending order. +func sortImages(images cvmImages) cvmImages { + sortedImages := images + sort.Sort(sort.Reverse(sortedImages)) + return sortedImages +} + +func (me *CvmService) ModifyImage(ctx context.Context, instanceId, imageName, imageDesc string) (errRet error) { + logId := tccommon.GetLogId(ctx) + var request = cvm.NewModifyImageAttributeRequest() + request.ImageId = helper.String(instanceId) + request.ImageName = helper.String(imageName) + request.ImageDescription = helper.String(imageDesc) + + err := resource.Retry(6*tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, e := me.client.UseCvmClient().ModifyImageAttribute(request) + if e != nil { + if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { + if ee.Code == "InvalidImageId.Malformed" || ee.Code == "InvalidImageId.NotFound" || + ee.Code == "InvalidImageName.Duplicate" || ee.Code == "InvalidParameter.ValueTooLarge" { + return resource.NonRetryableError(e) + } + } + log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), e.Error()) + return resource.RetryableError(e) + } + return nil + }) + if err != nil { + return err + } + return nil +} + +func (me *CvmService) DeleteImage(ctx context.Context, imageId string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDeleteImagesRequest() + request.ImageIds = []*string{&imageId} + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseCvmClient().DeleteImages(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + + return nil +} + +func (me *CvmService) DescribeImageById(ctx context.Context, keyId string, isDelete bool) (image *cvm.Image, has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeImagesRequest() + request.ImageIds = []*string{&keyId} + + var imgRsp *cvm.DescribeImagesResponse + err := resource.Retry(20*tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeImages(request) + if err != nil { + return resource.RetryableError(err) + } + if response != nil && response.Response != nil { + if len(response.Response.ImageSet) == 0 && !isDelete { + return resource.RetryableError(fmt.Errorf("iamge instance status is processing")) + } + if len(response.Response.ImageSet) > 0 { + if *response.Response.ImageSet[0].ImageState == "CREATEFAILED" { + return resource.NonRetryableError(fmt.Errorf("[CRITAL]%s Create Image is failed", logId)) + } + if *response.Response.ImageSet[0].ImageState != "NORMAL" { + return resource.RetryableError(fmt.Errorf("iamge instance status is processing")) + } + } + + imgRsp = response + return nil + } + return resource.NonRetryableError(fmt.Errorf("response is null")) + }) + + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + + if imgRsp == nil { + return + } + + if len(imgRsp.Response.ImageSet) > 0 && len(imgRsp.Response.ImageSet[0].SnapshotSet) != 0 { + has = true + image = imgRsp.Response.ImageSet[0] + } + return +} + +func (me *CvmService) DescribeImagesByFilter(ctx context.Context, filters map[string][]string, instanceType string) (images []*cvm.Image, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDescribeImagesRequest() + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + filter := cvm.Filter{ + Name: helper.String(k), + Values: []*string{}, + } + for _, vv := range v { + filter.Values = append(filter.Values, helper.String(vv)) + } + request.Filters = append(request.Filters, &filter) + } + if instanceType != "" { + request.InstanceType = helper.String(instanceType) + } + var offset uint64 = 0 + var pageSize uint64 = 100 + images = make([]*cvm.Image, 0) + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeImages(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.ImageSet) < 1 { + break + } + images = append(images, response.Response.ImageSet...) + if len(response.Response.ImageSet) < int(pageSize) { + break + } + offset += pageSize + } + + return +} + +func (me *CvmService) ModifyRenewParam(ctx context.Context, instanceId string, renewFlag string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyInstancesRenewFlagRequest() + request.InstanceIds = []*string{&instanceId} + request.RenewFlag = &renewFlag + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyInstancesRenewFlag(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ModifyInstanceChargeType(ctx context.Context, instanceId string, chargeType string, period int, + renewFlag string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyInstancesChargeTypeRequest() + request.InstanceIds = []*string{&instanceId} + request.InstanceChargeType = &chargeType + if chargeType == CVM_CHARGE_TYPE_PREPAID { + request.InstanceChargePrepaid = &cvm.InstanceChargePrepaid{} + if period != -1 { + request.InstanceChargePrepaid.Period = helper.IntInt64(period) + } + if renewFlag != "" { + request.InstanceChargePrepaid.RenewFlag = &renewFlag + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyInstancesChargeType(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ResizeInstanceDisks(ctx context.Context, request *cvm.ResizeInstanceDisksRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + + 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.UseCvmClient().ResizeInstanceDisks(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 +} + +func (me *CvmService) DescribeCvmHpcClusterById(ctx context.Context, hpcClusterId string) (hpcCluster *cvm.HpcClusterInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDescribeHpcClustersRequest() + request.HpcClusterIds = []*string{&hpcClusterId} + + 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()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*cvm.HpcClusterInfo, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCvmClient().DescribeHpcClusters(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()) + + if response == nil || len(response.Response.HpcClusterSet) < 1 { + break + } + instances = append(instances, response.Response.HpcClusterSet...) + if len(response.Response.HpcClusterSet) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + hpcCluster = instances[0] + return +} + +func (me *CvmService) DeleteCvmHpcClusterById(ctx context.Context, hpcClusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDeleteHpcClustersRequest() + request.HpcClusterIds = []*string{&hpcClusterId} + + 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.UseCvmClient().DeleteHpcClusters(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 +} + +func (me *CvmService) DescribeCvmLaunchTemplateById(ctx context.Context, launchTemplateId string) (launchTemplate *cvm.LaunchTemplateInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDescribeLaunchTemplatesRequest() + request.LaunchTemplateIds = []*string{&launchTemplateId} + + 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.UseCvmClient().DescribeLaunchTemplates(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()) + + if len(response.Response.LaunchTemplateSet) < 1 { + return + } + + launchTemplate = response.Response.LaunchTemplateSet[0] + return +} + +func (me *CvmService) DescribeLaunchTemplateVersionsById(ctx context.Context, launchTemplateId string) (launchTemplate *cvm.LaunchTemplateVersionInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDescribeLaunchTemplateVersionsRequest() + request.LaunchTemplateId = &launchTemplateId + + 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.UseCvmClient().DescribeLaunchTemplateVersions(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()) + + if len(response.Response.LaunchTemplateVersionSet) < 1 { + return + } + + launchTemplate = response.Response.LaunchTemplateVersionSet[0] + return +} + +func (me *CvmService) DescribeLaunchTemplateVersions(ctx context.Context, launchTemplateId string) (launchTemplates []*cvm.LaunchTemplateVersionInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDescribeLaunchTemplateVersionsRequest() + request.LaunchTemplateId = &launchTemplateId + + 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()) + } + }() + + offect := 0 + limit := 50 + for { + ratelimit.Check(request.GetAction()) + request.Offset = helper.IntUint64(offect) + request.Limit = helper.IntUint64(limit) + response, err := me.client.UseCvmClient().DescribeLaunchTemplateVersions(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()) + if response == nil || response.Response == nil || len(response.Response.LaunchTemplateVersionSet) == 0 { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + return + } + + launchTemplates = append(launchTemplates, response.Response.LaunchTemplateVersionSet...) + + if len(response.Response.LaunchTemplateVersionSet) < limit { + break + } + } + + return +} + +func (me *CvmService) DeleteCvmLaunchTemplateById(ctx context.Context, launchTemplateId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDeleteLaunchTemplateRequest() + request.LaunchTemplateId = &launchTemplateId + + 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.UseCvmClient().DeleteLaunchTemplate(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 +} + +func (me *CvmService) DescribeCvmLaunchTemplateVersionById(ctx context.Context, launchTemplateId, launchTemplateVersionNumber string) (launchTemplateVersion *cvm.LaunchTemplateVersionInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDescribeLaunchTemplateVersionsRequest() + request.LaunchTemplateId = &launchTemplateId + request.LaunchTemplateVersions = []*uint64{helper.StrToUint64Point(launchTemplateVersionNumber)} + + 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.UseCvmClient().DescribeLaunchTemplateVersions(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()) + + if len(response.Response.LaunchTemplateVersionSet) < 1 { + return + } + + launchTemplateVersion = response.Response.LaunchTemplateVersionSet[0] + return +} + +func (me *CvmService) DeleteCvmLaunchTemplateVersionById(ctx context.Context, launchTemplateId, launchTemplateVersionNumber string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDeleteLaunchTemplateVersionsRequest() + request.LaunchTemplateId = &launchTemplateId + request.LaunchTemplateVersions = []*int64{helper.StrToInt64Point(launchTemplateVersionNumber)} + + 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.UseCvmClient().DeleteLaunchTemplateVersions(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 +} + +func (me *CvmService) ModifyLaunchTemplateDefaultVersion(ctx context.Context, launchTemplateId string, defaultVersion int) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyLaunchTemplateDefaultVersionRequest() + request.LaunchTemplateId = helper.String(launchTemplateId) + request.DefaultVersion = helper.IntInt64(defaultVersion) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyLaunchTemplateDefaultVersion(request) + if err != nil { + if sdkErr, ok := err.(*sdkError.TencentCloudSDKError); ok { + if sdkErr.Code == "InvalidParameterValue.LaunchTemplateIdVerSetAlready" && strings.Contains(sdkErr.Message, "The specified launch template version had been set to default") { + return nil + } + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) DescribeCvmChcHostsByFilter(ctx context.Context, param map[string]interface{}) (chcHosts []*cvm.ChcHost, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cvm.NewDescribeChcHostsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "chc_ids" { + request.ChcIds = helper.Strings(v.([]string)) + } + if k == "filters" { + request.Filters = v.([]*cvm.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCvmClient().DescribeChcHosts(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()) + + if response == nil || len(response.Response.ChcHostSet) < 1 { + break + } + chcHosts = append(chcHosts, response.Response.ChcHostSet...) + if len(response.Response.ChcHostSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *CvmService) DescribeCvmChcDeniedActionsByFilter(ctx context.Context, param map[string]interface{}) (chcDeniedActions []*cvm.ChcHostDeniedActions, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cvm.NewDescribeChcDeniedActionsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "chc_ids" { + request.ChcIds = helper.Strings(v.([]string)) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCvmClient().DescribeChcDeniedActions(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()) + + if response == nil || len(response.Response.ChcHostDeniedActionSet) < 1 { + return + } + chcDeniedActions = append(chcDeniedActions, response.Response.ChcHostDeniedActionSet...) + + return +} + +func (me *CvmService) DeleteCvmChcAssistVpcById(ctx context.Context, chcId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewRemoveChcAssistVpcRequest() + request.ChcIds = []*string{&chcId} + + 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.UseCvmClient().RemoveChcAssistVpc(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 +} + +func (me *CvmService) CvmChcInstanceStateRefreshFunc(chcId string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + request := cvm.NewDescribeChcHostsRequest() + request.ChcIds = []*string{&chcId} + response, err := me.client.UseCvmClient().DescribeChcHosts(request) + + if err != nil { + return nil, "", err + } + + if response == nil || response.Response == nil || len(response.Response.ChcHostSet) < 1 { + return nil, "", fmt.Errorf("Not found instance.") + } + return response.Response.ChcHostSet[0], helper.PString(response.Response.ChcHostSet[0].InstanceState), nil + } +} + +func (me *CvmService) CvmChcInstanceDeployVpcStateRefreshFunc(chcId string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + request := cvm.NewDescribeChcHostsRequest() + request.ChcIds = []*string{&chcId} + response, err := me.client.UseCvmClient().DescribeChcHosts(request) + + if err != nil { + return nil, "", err + } + + if response == nil || response.Response == nil || len(response.Response.ChcHostSet) < 1 { + return nil, "", fmt.Errorf("Not found instance.") + } + + if response.Response.ChcHostSet[0].DeployVirtualPrivateCloud == nil { + return response.Response.ChcHostSet[0], "", nil + } + return response.Response.ChcHostSet[0], helper.PString(response.Response.ChcHostSet[0].DeployVirtualPrivateCloud.VpcId), nil + } +} + +func (me *CvmService) CvmSyncImagesStateRefreshFunc(imageId string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + request := cvm.NewDescribeImagesRequest() + request.ImageIds = []*string{&imageId} + response, err := me.client.UseCvmClient().DescribeImages(request) + + if err != nil { + return nil, "", err + } + + if response == nil || response.Response == nil || len(response.Response.ImageSet) < 1 { + return nil, "", fmt.Errorf("Not found instance.") + } + + if response.Response.ImageSet[0].ImageState == nil { + return response.Response.ImageSet[0], "", nil + } + return response.Response.ImageSet[0], helper.PString(response.Response.ImageSet[0].ImageState), nil + } +} + +func (me *CvmService) DescribeCvmImageQuotaByFilter(ctx context.Context, param map[string]interface{}) (imageQuota int64, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cvm.NewDescribeImageQuotaRequest() + ) + + 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.UseCvmClient().DescribeImageQuota(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()) + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("Response is null") + return + } + imageQuota = *response.Response.ImageNumQuota + + return +} + +func (me *CvmService) DescribeCvmImageSharePermissionByFilter(ctx context.Context, param map[string]interface{}) (imageSharePermission []*cvm.SharePermission, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cvm.NewDescribeImageSharePermissionRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "ImageId" { + request.ImageId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCvmClient().DescribeImageSharePermission(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()) + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("Response is null") + } + imageSharePermission = response.Response.SharePermissionSet + + return +} + +func (me *CvmService) ModifyImageSharePermission(ctx context.Context, imageId, permission string, accountIds []string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyImageSharePermissionRequest() + + 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()) + } + }() + request.ImageId = helper.String(imageId) + request.Permission = helper.String(permission) + request.AccountIds = helper.StringsStringsPoint(accountIds) + ratelimit.Check(request.GetAction()) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseCvmClient().ModifyImageSharePermission(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 cvm ModifyImageSharePermission failed, reason:%+v", logId, err) + return err + } + return +} From 47ecee75389e704edd4005140064a0cba141a5b0 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 14:36:43 +0800 Subject: [PATCH 21/31] refactor: migrate package tencentcloud/services/cos --- tencentcloud/provider.go | 37 +- .../cos}/data_source_tc_cos_batchs.go | 15 +- .../cos}/data_source_tc_cos_batchs_test.go | 9 +- .../data_source_tc_cos_bucket_inventorys.go | 15 +- ...ta_source_tc_cos_bucket_inventorys_test.go | 9 +- ..._source_tc_cos_bucket_multipart_uploads.go | 15 +- ...ce_tc_cos_bucket_multipart_uploads_test.go | 9 +- .../cos}/data_source_tc_cos_bucket_object.go | 15 +- .../data_source_tc_cos_bucket_object_test.go | 10 +- .../cos}/data_source_tc_cos_buckets.go | 19 +- .../cos}/data_source_tc_cos_buckets_test.go | 22 +- tencentcloud/services/cos/extension_cam.go | 26 + .../{ => services/cos}/extension_cos.go | 2 +- .../cos}/resource_tc_cos_batch.go | 61 +- .../cos}/resource_tc_cos_batch_test.go | 7 +- .../cos}/resource_tc_cos_bucket.go | 115 +- ...os_bucket_domain_certificate_attachment.go | 43 +- ...cket_domain_certificate_attachment_test.go | 35 +- ...enerate_inventory_immediately_operation.go | 31 +- ...te_inventory_immediately_operation_test.go | 7 +- .../cos}/resource_tc_cos_bucket_inventory.go | 65 +- .../resource_tc_cos_bucket_inventory_test.go | 7 +- .../cos}/resource_tc_cos_bucket_object.go | 43 +- .../resource_tc_cos_bucket_object_test.go | 52 +- .../cos}/resource_tc_cos_bucket_policy.go | 47 +- .../resource_tc_cos_bucket_policy_test.go | 30 +- .../cos}/resource_tc_cos_bucket_referer.go | 37 +- .../resource_tc_cos_bucket_referer_test.go | 24 +- .../cos}/resource_tc_cos_bucket_test.go | 118 +- .../cos}/resource_tc_cos_bucket_version.go | 37 +- .../resource_tc_cos_bucket_version_test.go | 9 +- ...object_abort_multipart_upload_operation.go | 23 +- .../resource_tc_cos_object_copy_operation.go | 25 +- ...ource_tc_cos_object_copy_operation_test.go | 7 +- ...source_tc_cos_object_download_operation.go | 25 +- ...e_tc_cos_object_download_operation_test.go | 7 +- ...esource_tc_cos_object_restore_operation.go | 25 +- ...ce_tc_cos_object_restore_operation_test.go | 7 +- .../services/cos/service_tencentcloud_cam.go | 1967 +++++++++++++++++ .../cos}/service_tencentcloud_cos.go | 109 +- tencentcloud/services/cos/validators.go | 81 + tencentcloud/validators.go | 76 - 42 files changed, 2686 insertions(+), 637 deletions(-) rename tencentcloud/{ => services/cos}/data_source_tc_cos_batchs.go (90%) rename tencentcloud/{ => services/cos}/data_source_tc_cos_batchs_test.go (69%) rename tencentcloud/{ => services/cos}/data_source_tc_cos_bucket_inventorys.go (92%) rename tencentcloud/{ => services/cos}/data_source_tc_cos_bucket_inventorys_test.go (69%) rename tencentcloud/{ => services/cos}/data_source_tc_cos_bucket_multipart_uploads.go (89%) rename tencentcloud/{ => services/cos}/data_source_tc_cos_bucket_multipart_uploads_test.go (65%) rename tencentcloud/{ => services/cos}/data_source_tc_cos_bucket_object.go (88%) rename tencentcloud/{ => services/cos}/data_source_tc_cos_bucket_object_test.go (84%) rename tencentcloud/{ => services/cos}/data_source_tc_cos_buckets.go (95%) rename tencentcloud/{ => services/cos}/data_source_tc_cos_buckets_test.go (92%) create mode 100644 tencentcloud/services/cos/extension_cam.go rename tencentcloud/{ => services/cos}/extension_cos.go (93%) rename tencentcloud/{ => services/cos}/resource_tc_cos_batch.go (93%) rename tencentcloud/{ => services/cos}/resource_tc_cos_batch_test.go (90%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket.go (93%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket_domain_certificate_attachment.go (75%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket_domain_certificate_attachment_test.go (71%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket_generate_inventory_immediately_operation.go (67%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket_generate_inventory_immediately_operation_test.go (79%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket_inventory.go (87%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket_inventory_test.go (85%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket_object.go (85%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket_object_test.go (80%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket_policy.go (73%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket_policy_test.go (81%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket_referer.go (75%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket_referer_test.go (80%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket_test.go (92%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket_version.go (66%) rename tencentcloud/{ => services/cos}/resource_tc_cos_bucket_version_test.go (87%) rename tencentcloud/{ => services/cos}/resource_tc_cos_object_abort_multipart_upload_operation.go (64%) rename tencentcloud/{ => services/cos}/resource_tc_cos_object_copy_operation.go (61%) rename tencentcloud/{ => services/cos}/resource_tc_cos_object_copy_operation_test.go (77%) rename tencentcloud/{ => services/cos}/resource_tc_cos_object_download_operation.go (66%) rename tencentcloud/{ => services/cos}/resource_tc_cos_object_download_operation_test.go (77%) rename tencentcloud/{ => services/cos}/resource_tc_cos_object_restore_operation.go (74%) rename tencentcloud/{ => services/cos}/resource_tc_cos_object_restore_operation_test.go (77%) create mode 100644 tencentcloud/services/cos/service_tencentcloud_cam.go rename tencentcloud/{ => services/cos}/service_tencentcloud_cos.go (95%) create mode 100644 tencentcloud/services/cos/validators.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 50eed461e7..f707ea29c2 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cos" "encoding/json" "fmt" "io/ioutil" @@ -301,11 +302,11 @@ func Provider() *schema.Provider { "tencentcloud_mysql_error_log": cdb.DataSourceTencentCloudMysqlErrorLog(), "tencentcloud_mysql_project_security_group": cdb.DataSourceTencentCloudMysqlProjectSecurityGroup(), "tencentcloud_mysql_ro_min_scale": cdb.DataSourceTencentCloudMysqlRoMinScale(), - "tencentcloud_cos_bucket_object": dataSourceTencentCloudCosBucketObject(), - "tencentcloud_cos_buckets": dataSourceTencentCloudCosBuckets(), - "tencentcloud_cos_batchs": dataSourceTencentCloudCosBatchs(), - "tencentcloud_cos_bucket_inventorys": dataSourceTencentCloudCosBucketInventorys(), - "tencentcloud_cos_bucket_multipart_uploads": dataSourceTencentCloudCosBucketMultipartUploads(), + "tencentcloud_cos_bucket_object": cos.DataSourceTencentCloudCosBucketObject(), + "tencentcloud_cos_buckets": cos.DataSourceTencentCloudCosBuckets(), + "tencentcloud_cos_batchs": cos.DataSourceTencentCloudCosBatchs(), + "tencentcloud_cos_bucket_inventorys": cos.DataSourceTencentCloudCosBucketInventorys(), + "tencentcloud_cos_bucket_multipart_uploads": cos.DataSourceTencentCloudCosBucketMultipartUploads(), "tencentcloud_cfs_file_systems": cfs.DataSourceTencentCloudCfsFileSystems(), "tencentcloud_cfs_access_groups": cfs.DataSourceTencentCloudCfsAccessGroups(), "tencentcloud_cfs_access_rules": cfs.DataSourceTencentCloudCfsAccessRules(), @@ -1079,10 +1080,10 @@ func Provider() *schema.Provider { "tencentcloud_mysql_ro_start_replication": cdb.ResourceTencentCloudMysqlRoStartReplication(), "tencentcloud_mysql_ro_stop_replication": cdb.ResourceTencentCloudMysqlRoStopReplication(), "tencentcloud_mysql_switch_proxy": cdb.ResourceTencentCloudMysqlSwitchProxy(), - "tencentcloud_cos_bucket": resourceTencentCloudCosBucket(), - "tencentcloud_cos_bucket_object": resourceTencentCloudCosBucketObject(), - "tencentcloud_cos_bucket_referer": resourceTencentCloudCosBucketReferer(), - "tencentcloud_cos_bucket_version": resourceTencentCloudCosBucketVersion(), + "tencentcloud_cos_bucket": cos.ResourceTencentCloudCosBucket(), + "tencentcloud_cos_bucket_object": cos.ResourceTencentCloudCosBucketObject(), + "tencentcloud_cos_bucket_referer": cos.ResourceTencentCloudCosBucketReferer(), + "tencentcloud_cos_bucket_version": cos.ResourceTencentCloudCosBucketVersion(), "tencentcloud_cfs_file_system": cfs.ResourceTencentCloudCfsFileSystem(), "tencentcloud_cfs_access_group": cfs.ResourceTencentCloudCfsAccessGroup(), "tencentcloud_cfs_access_rule": cfs.ResourceTencentCloudCfsAccessRule(), @@ -1395,15 +1396,15 @@ func Provider() *schema.Provider { "tencentcloud_tdmq_rabbitmq_vip_instance": resourceTencentCloudTdmqRabbitmqVipInstance(), "tencentcloud_tdmq_send_rocketmq_message": resourceTencentCloudTdmqSendRocketmqMessage(), "tencentcloud_tdmq_professional_cluster": resourceTencentCloudTdmqProfessionalCluster(), - "tencentcloud_cos_bucket_policy": resourceTencentCloudCosBucketPolicy(), - "tencentcloud_cos_bucket_domain_certificate_attachment": resourceTencentCloudCosBucketDomainCertificateAttachment(), - "tencentcloud_cos_bucket_inventory": resourceTencentCloudCosBucketInventory(), - "tencentcloud_cos_batch": resourceTencentCloudCosBatch(), - "tencentcloud_cos_object_abort_multipart_upload_operation": resourceTencentCloudCosObjectAbortMultipartUploadOperation(), - "tencentcloud_cos_object_copy_operation": resourceTencentCloudCosObjectCopyOperation(), - "tencentcloud_cos_object_restore_operation": resourceTencentCloudCosObjectRestoreOperation(), - "tencentcloud_cos_bucket_generate_inventory_immediately_operation": resourceTencentCloudCosBucketGenerateInventoryImmediatelyOperation(), - "tencentcloud_cos_object_download_operation": resourceTencentCloudCosObjectDownloadOperation(), + "tencentcloud_cos_bucket_policy": cos.ResourceTencentCloudCosBucketPolicy(), + "tencentcloud_cos_bucket_domain_certificate_attachment": cos.ResourceTencentCloudCosBucketDomainCertificateAttachment(), + "tencentcloud_cos_bucket_inventory": cos.ResourceTencentCloudCosBucketInventory(), + "tencentcloud_cos_batch": cos.ResourceTencentCloudCosBatch(), + "tencentcloud_cos_object_abort_multipart_upload_operation": cos.ResourceTencentCloudCosObjectAbortMultipartUploadOperation(), + "tencentcloud_cos_object_copy_operation": cos.ResourceTencentCloudCosObjectCopyOperation(), + "tencentcloud_cos_object_restore_operation": cos.ResourceTencentCloudCosObjectRestoreOperation(), + "tencentcloud_cos_bucket_generate_inventory_immediately_operation": cos.ResourceTencentCloudCosBucketGenerateInventoryImmediatelyOperation(), + "tencentcloud_cos_object_download_operation": cos.ResourceTencentCloudCosObjectDownloadOperation(), "tencentcloud_address_template": resourceTencentCloudAddressTemplate(), "tencentcloud_address_template_group": resourceTencentCloudAddressTemplateGroup(), "tencentcloud_protocol_template": resourceTencentCloudProtocolTemplate(), diff --git a/tencentcloud/data_source_tc_cos_batchs.go b/tencentcloud/services/cos/data_source_tc_cos_batchs.go similarity index 90% rename from tencentcloud/data_source_tc_cos_batchs.go rename to tencentcloud/services/cos/data_source_tc_cos_batchs.go index 1248155319..347656bd9b 100644 --- a/tencentcloud/data_source_tc_cos_batchs.go +++ b/tencentcloud/services/cos/data_source_tc_cos_batchs.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/json" "log" @@ -10,7 +11,7 @@ import ( "github.com/tencentyun/cos-go-sdk-v5" ) -func dataSourceTencentCloudCosBatchs() *schema.Resource { +func DataSourceTencentCloudCosBatchs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCosBatchsRead, @@ -108,10 +109,10 @@ func dataSourceTencentCloudCosBatchs() *schema.Resource { } func dataSourceTencentCloudCosBatchsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cos_batchs.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cos_batchs.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) uin := d.Get("uin").(string) appid := d.Get("appid").(int) jobs := make([]map[string]interface{}, 0) @@ -126,7 +127,7 @@ func dataSourceTencentCloudCosBatchsRead(d *schema.ResourceData, meta interface{ ids := make([]string, 0) for { req, _ := json.Marshal(opt) - result, response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosBatchClient(uin).Batch.ListJobs(ctx, nil, headers) + result, response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosBatchClient(uin).Batch.ListJobs(ctx, nil, headers) responseBody, _ := json.Marshal(response.Body) log.Printf("[DEBUG]%s api[ListJobs] success, request body [%s], response body [%v]\n", logId, req, responseBody) if err != nil { @@ -161,7 +162,7 @@ func dataSourceTencentCloudCosBatchsRead(d *schema.ResourceData, meta interface{ _ = d.Set("jobs", jobs) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), jobs); err != nil { + if err := tccommon.WriteToFile(output.(string), jobs); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_cos_batchs_test.go b/tencentcloud/services/cos/data_source_tc_cos_batchs_test.go similarity index 69% rename from tencentcloud/data_source_tc_cos_batchs_test.go rename to tencentcloud/services/cos/data_source_tc_cos_batchs_test.go index eadd038aa4..0268815a1b 100644 --- a/tencentcloud/data_source_tc_cos_batchs_test.go +++ b/tencentcloud/services/cos/data_source_tc_cos_batchs_test.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -10,14 +11,14 @@ func TestAccTencentCloudCosBatchsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCosBatchsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cos_batchs.cos_batchs"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cos_batchs.cos_batchs"), resource.TestCheckResourceAttrSet("data.tencentcloud_cos_batchs.cos_batchs", "jobs.#"), ), }, diff --git a/tencentcloud/data_source_tc_cos_bucket_inventorys.go b/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys.go similarity index 92% rename from tencentcloud/data_source_tc_cos_bucket_inventorys.go rename to tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys.go index 13449946f2..c13965e4ee 100644 --- a/tencentcloud/data_source_tc_cos_bucket_inventorys.go +++ b/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/json" "log" @@ -10,7 +11,7 @@ import ( "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCosBucketInventorys() *schema.Resource { +func DataSourceTencentCloudCosBucketInventorys() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCosBucketInventorysRead, @@ -161,16 +162,16 @@ func dataSourceTencentCloudCosBucketInventorys() *schema.Resource { } func dataSourceTencentCloudCosBucketInventorysRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cos_bucket_inventorys.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cos_bucket_inventorys.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Get("bucket").(string) inventoryConfigurations := make([]map[string]interface{}, 0) token := "" ids := make([]string, 0) for { - result, response, err := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Bucket.ListInventoryConfigurations(ctx, token) + result, response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Bucket.ListInventoryConfigurations(ctx, token) responseBody, _ := json.Marshal(response.Body) log.Printf("[DEBUG]%s api[ListInventoryConfigurations] success, response body [%s]\n", logId, responseBody) if err != nil { @@ -243,7 +244,7 @@ func dataSourceTencentCloudCosBucketInventorysRead(d *schema.ResourceData, meta _ = d.Set("inventorys", inventoryConfigurations) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), inventoryConfigurations); err != nil { + if err := tccommon.WriteToFile(output.(string), inventoryConfigurations); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_cos_bucket_inventorys_test.go b/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys_test.go similarity index 69% rename from tencentcloud/data_source_tc_cos_bucket_inventorys_test.go rename to tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys_test.go index 09ae2579bd..3e70811da8 100644 --- a/tencentcloud/data_source_tc_cos_bucket_inventorys_test.go +++ b/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys_test.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -10,14 +11,14 @@ func TestAccTencentCloudCosBucketInventorysDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCosBucketInventorysDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cos_bucket_inventorys.cos_bucket_inventorys"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cos_bucket_inventorys.cos_bucket_inventorys"), resource.TestCheckResourceAttrSet("data.tencentcloud_cos_bucket_inventorys.cos_bucket_inventorys", "inventorys.#"), ), }, diff --git a/tencentcloud/data_source_tc_cos_bucket_multipart_uploads.go b/tencentcloud/services/cos/data_source_tc_cos_bucket_multipart_uploads.go similarity index 89% rename from tencentcloud/data_source_tc_cos_bucket_multipart_uploads.go rename to tencentcloud/services/cos/data_source_tc_cos_bucket_multipart_uploads.go index a5c258bf53..d031acc482 100644 --- a/tencentcloud/data_source_tc_cos_bucket_multipart_uploads.go +++ b/tencentcloud/services/cos/data_source_tc_cos_bucket_multipart_uploads.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/json" "log" @@ -10,7 +11,7 @@ import ( "github.com/tencentyun/cos-go-sdk-v5" ) -func dataSourceTencentCloudCosBucketMultipartUploads() *schema.Resource { +func DataSourceTencentCloudCosBucketMultipartUploads() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCosBucketMultipartUploadsRead, @@ -112,10 +113,10 @@ func dataSourceTencentCloudCosBucketMultipartUploads() *schema.Resource { } func dataSourceTencentCloudCosBucketMultipartUploadsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cos_bucket_multipart_uploads.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cos_bucket_multipart_uploads.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Get("bucket").(string) multipartUploads := make([]map[string]interface{}, 0) opt := &cos.ListMultipartUploadsOptions{} @@ -130,7 +131,7 @@ func dataSourceTencentCloudCosBucketMultipartUploadsRead(d *schema.ResourceData, } ids := make([]string, 0) for { - result, response, err := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Bucket.ListMultipartUploads(ctx, opt) + result, response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Bucket.ListMultipartUploads(ctx, opt) responseBody, _ := json.Marshal(response.Body) if err != nil { return err @@ -171,7 +172,7 @@ func dataSourceTencentCloudCosBucketMultipartUploadsRead(d *schema.ResourceData, _ = d.Set("uploads", multipartUploads) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), multipartUploads); err != nil { + if err := tccommon.WriteToFile(output.(string), multipartUploads); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_cos_bucket_multipart_uploads_test.go b/tencentcloud/services/cos/data_source_tc_cos_bucket_multipart_uploads_test.go similarity index 65% rename from tencentcloud/data_source_tc_cos_bucket_multipart_uploads_test.go rename to tencentcloud/services/cos/data_source_tc_cos_bucket_multipart_uploads_test.go index 10929a6bb9..24df6d3ebb 100644 --- a/tencentcloud/data_source_tc_cos_bucket_multipart_uploads_test.go +++ b/tencentcloud/services/cos/data_source_tc_cos_bucket_multipart_uploads_test.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -10,14 +11,14 @@ func TestAccTencentCloudCosBucketMultipartUploadsDataSource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCosBucketMultipartUploadsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cos_bucket_multipart_uploads.cos_bucket_multipart_uploads"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cos_bucket_multipart_uploads.cos_bucket_multipart_uploads"), ), }, }, diff --git a/tencentcloud/data_source_tc_cos_bucket_object.go b/tencentcloud/services/cos/data_source_tc_cos_bucket_object.go similarity index 88% rename from tencentcloud/data_source_tc_cos_bucket_object.go rename to tencentcloud/services/cos/data_source_tc_cos_bucket_object.go index 6b74d5bf7b..25f7caa3cc 100644 --- a/tencentcloud/data_source_tc_cos_bucket_object.go +++ b/tencentcloud/services/cos/data_source_tc_cos_bucket_object.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "strings" "time" @@ -10,7 +11,7 @@ import ( "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCosBucketObject() *schema.Resource { +func DataSourceTencentCloudCosBucketObject() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCosBucketObjectsRead, @@ -70,10 +71,10 @@ func dataSourceTencentCloudCosBucketObject() *schema.Resource { } func dataSourceTencentCloudCosBucketObjectsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cos_bucket_object.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cos_bucket_object.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Get("bucket").(string) key := d.Get("key").(string) @@ -81,7 +82,7 @@ func dataSourceTencentCloudCosBucketObjectsRead(d *schema.ResourceData, meta int outputMap["bucket"] = bucket outputMap["key"] = key cosService := CosService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } info, err := cosService.HeadObject(ctx, bucket, key) if err != nil { @@ -112,7 +113,7 @@ func dataSourceTencentCloudCosBucketObjectsRead(d *schema.ResourceData, meta int output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err = writeToFile(output.(string), outputMap); err != nil { + if err = tccommon.WriteToFile(output.(string), outputMap); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_cos_bucket_object_test.go b/tencentcloud/services/cos/data_source_tc_cos_bucket_object_test.go similarity index 84% rename from tencentcloud/data_source_tc_cos_bucket_object_test.go rename to tencentcloud/services/cos/data_source_tc_cos_bucket_object_test.go index afaad3be80..cd96ef784f 100644 --- a/tencentcloud/data_source_tc_cos_bucket_object_test.go +++ b/tencentcloud/services/cos/data_source_tc_cos_bucket_object_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package cos_test import ( "fmt" "regexp" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -13,11 +15,11 @@ func TestAccTencentCloudCosBucketObjectDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - Config: testAccCosBucketObjectDataSource(appid), + Config: testAccCosBucketObjectDataSource(tcacctest.Appid), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckCosBucketObjectExists("tencentcloud_cos_bucket_object.object_content"), resource.TestCheckResourceAttr("data.tencentcloud_cos_bucket_object.object", "content_type", "binary/octet-stream"), diff --git a/tencentcloud/data_source_tc_cos_buckets.go b/tencentcloud/services/cos/data_source_tc_cos_buckets.go similarity index 95% rename from tencentcloud/data_source_tc_cos_buckets.go rename to tencentcloud/services/cos/data_source_tc_cos_buckets.go index 62e792bdbf..0401441697 100644 --- a/tencentcloud/data_source_tc_cos_buckets.go +++ b/tencentcloud/services/cos/data_source_tc_cos_buckets.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/xml" "fmt" @@ -11,7 +12,7 @@ import ( "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCosBuckets() *schema.Resource { +func DataSourceTencentCloudCosBuckets() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCosBucketsRead, @@ -289,7 +290,7 @@ func dataSourceTencentCloudCosBuckets() *schema.Resource { Optional: true, Default: "ENABLED", Description: "Domain status, default: `ENABLED`.", - ValidateFunc: validateAllowedStringValue([]string{"ENABLED", "DISABLED"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"ENABLED", "DISABLED"}), }, }, }, @@ -322,12 +323,12 @@ func dataSourceTencentCloudCosBuckets() *schema.Resource { } func dataSourceTencentCloudCosBucketsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cos_buckets.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cos_buckets.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cosService := CosService{client: meta.(*TencentCloudClient).apiV3Conn} + cosService := CosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} buckets, err := cosService.ListBuckets(ctx) if err != nil { @@ -410,7 +411,7 @@ func dataSourceTencentCloudCosBucketsRead(d *schema.ResourceData, meta interface } bucket["tags"] = respTags - bucket["cos_bucket_url"] = fmt.Sprintf("%s.cos.%s.myqcloud.com", *v.Name, meta.(*TencentCloudClient).apiV3Conn.Region) + bucket["cos_bucket_url"] = fmt.Sprintf("%s.cos.%s.myqcloud.com", *v.Name, meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region) bucketList = append(bucketList, bucket) } @@ -424,7 +425,7 @@ func dataSourceTencentCloudCosBucketsRead(d *schema.ResourceData, meta interface output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err = writeToFile(output.(string), bucketList); err != nil { + if err = tccommon.WriteToFile(output.(string), bucketList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_cos_buckets_test.go b/tencentcloud/services/cos/data_source_tc_cos_buckets_test.go similarity index 92% rename from tencentcloud/data_source_tc_cos_buckets_test.go rename to tencentcloud/services/cos/data_source_tc_cos_buckets_test.go index 914982fb32..3ebd660cbc 100644 --- a/tencentcloud/data_source_tc_cos_buckets_test.go +++ b/tencentcloud/services/cos/data_source_tc_cos_buckets_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package cos_test import ( "fmt" "regexp" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -13,11 +15,11 @@ func TestAccTencentCloudCosBucketDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - Config: testAccCosBucketDataSource_basic(appid), + Config: testAccCosBucketDataSource_basic(tcacctest.Appid), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckCosBucketExists("tencentcloud_cos_bucket.bucket_basic"), resource.TestCheckResourceAttr("data.tencentcloud_cos_buckets.bucket_list", "bucket_list.#", "1"), @@ -34,8 +36,8 @@ func TestAccTencentCloudCosBucketDataSource_basic(t *testing.T) { func TestAccTencentCloudCosBucketDataSource_tags(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCosBucketDataSource_tags(), @@ -52,11 +54,11 @@ func TestAccTencentCloudCosBucketDataSource_full(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - Config: testAccCosBucketDataSource_full(appid), + Config: testAccCosBucketDataSource_full(tcacctest.Appid), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckCosBucketExists("tencentcloud_cos_bucket.bucket_full"), resource.TestCheckResourceAttr("data.tencentcloud_cos_buckets.bucket_list", "bucket_list.#", "1"), @@ -110,7 +112,7 @@ func testAccCosBucketDataSource_tags() string { data "tencentcloud_cos_buckets" "bucket_list" { tags = var.fixed_tags } -`, fixedTagVariable) +`, tcacctest.FixedTagVariable) } func testAccCosBucketDataSource_full(appid string) string { diff --git a/tencentcloud/services/cos/extension_cam.go b/tencentcloud/services/cos/extension_cam.go new file mode 100644 index 0000000000..e210061891 --- /dev/null +++ b/tencentcloud/services/cos/extension_cam.go @@ -0,0 +1,26 @@ +package cos + +const PAGE_ITEM = 200 + +const ( + CAM_POLICY_CREATE_STRATEGY_CUSTOM = "User" + CAM_POLICY_CREATE_STRATEGY_PRESET = "QCS" + CAM_POLICY_CREATE_STRATEGY_NULL = "" +) + +var CAM_POLICY_CREATE_STRATEGY = []string{ + CAM_POLICY_CREATE_STRATEGY_CUSTOM, + CAM_POLICY_CREATE_STRATEGY_PRESET, + CAM_POLICY_CREATE_STRATEGY_NULL, +} + +type Principal struct { + Service []string `json:"service"` +} +type Statement struct { + Principal Principal `json:"principal"` +} +type Document struct { + Version string `json:"version"` + Statement []Statement `json:"statement"` +} diff --git a/tencentcloud/extension_cos.go b/tencentcloud/services/cos/extension_cos.go similarity index 93% rename from tencentcloud/extension_cos.go rename to tencentcloud/services/cos/extension_cos.go index 8f6caafe99..06953dced8 100644 --- a/tencentcloud/extension_cos.go +++ b/tencentcloud/services/cos/extension_cos.go @@ -1,4 +1,4 @@ -package tencentcloud +package cos const ( COS_ACL_GRANTEE_TYPE_USER = "CanonicalUser" diff --git a/tencentcloud/resource_tc_cos_batch.go b/tencentcloud/services/cos/resource_tc_cos_batch.go similarity index 93% rename from tencentcloud/resource_tc_cos_batch.go rename to tencentcloud/services/cos/resource_tc_cos_batch.go index e18c438598..e16ae7448e 100644 --- a/tencentcloud/resource_tc_cos_batch.go +++ b/tencentcloud/services/cos/resource_tc_cos_batch.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/json" "fmt" @@ -15,7 +16,7 @@ import ( "github.com/tencentyun/cos-go-sdk-v5" ) -func resourceTencentCloudCosBatch() *schema.Resource { +func ResourceTencentCloudCosBatch() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudCosBatchRead, Create: resourceTencentCloudCosBatchCreate, @@ -379,12 +380,12 @@ func resourceTencentCloudCosBatch() *schema.Resource { } func resourceTencentCloudCosBatchRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_batch.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_batch.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - idSplit := strings.Split(d.Id(), FILED_SP) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -395,7 +396,7 @@ func resourceTencentCloudCosBatchRead(d *schema.ResourceData, meta interface{}) XCosAppid: appid, } - result, response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosBatchClient(uin).Batch.DescribeJob(ctx, jobId, headers) + result, response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosBatchClient(uin).Batch.DescribeJob(ctx, jobId, headers) responseBody, _ := json.Marshal(response.Body) if err != nil { log.Printf("[DEBUG]%s api[DescribeJob] success, request body [%s], response body [%s], err: [%s]\n", logId, jobId, responseBody, err.Error()) @@ -517,11 +518,11 @@ func resourceTencentCloudCosBatchRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudCosBatchCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_batch.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_batch.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) uin := d.Get("uin").(string) opt := &cos.BatchCreateJobOptions{ ClientRequestToken: uuid.New().String(), @@ -715,13 +716,13 @@ func resourceTencentCloudCosBatchCreate(d *schema.ResourceData, meta interface{} XCosAppid: appid, } var batchCreateJobResult *cos.BatchCreateJobResult - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { req, _ := json.Marshal(opt) - result, response, e := meta.(*TencentCloudClient).apiV3Conn.UseCosBatchClient(uin).Batch.CreateJob(ctx, opt, headers) + result, response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosBatchClient(uin).Batch.CreateJob(ctx, opt, headers) responseBody, _ := json.Marshal(response.Body) log.Printf("[DEBUG]%s api[CreateJob], request body [%s], response body [%s]\n", logId, req, responseBody) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } batchCreateJobResult = result @@ -737,24 +738,24 @@ func resourceTencentCloudCosBatchCreate(d *schema.ResourceData, meta interface{} RequestedJobStatus: v.(string), } req, _ := json.Marshal(opt) - _, response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosBatchClient(uin).Batch.UpdateJobStatus(ctx, opt, headers) + _, response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosBatchClient(uin).Batch.UpdateJobStatus(ctx, opt, headers) responseBody, _ := json.Marshal(response.Body) if err != nil { log.Printf("[DEBUG]%s api[UpdateJobStatus] error, request body [%s], response body [%s], err: [%s]\n", logId, req, responseBody, err.Error()) return err } } - d.SetId(uin + FILED_SP + strconv.Itoa(appid) + FILED_SP + batchCreateJobResult.JobId) + d.SetId(uin + tccommon.FILED_SP + strconv.Itoa(appid) + tccommon.FILED_SP + batchCreateJobResult.JobId) return resourceTencentCloudCosBatchRead(d, meta) } func resourceTencentCloudCosBatchUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_batch.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_batch.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - idSplit := strings.Split(d.Id(), FILED_SP) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -770,7 +771,7 @@ func resourceTencentCloudCosBatchUpdate(d *schema.ResourceData, meta interface{} Priority: d.Get("priority").(int), } req, _ := json.Marshal(opt) - _, response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosBatchClient(uin).Batch.UpdateJobPriority(ctx, opt, headers) + _, response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosBatchClient(uin).Batch.UpdateJobPriority(ctx, opt, headers) responseBody, _ := json.Marshal(response.Body) if err != nil { log.Printf("[DEBUG]%s api[UpdateJobPriority] error, request body [%s], response body [%s], err: [%s]\n", logId, req, responseBody, err.Error()) @@ -783,7 +784,7 @@ func resourceTencentCloudCosBatchUpdate(d *schema.ResourceData, meta interface{} RequestedJobStatus: d.Get("status").(string), } req, _ := json.Marshal(opt) - _, response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosBatchClient(uin).Batch.UpdateJobStatus(ctx, opt, headers) + _, response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosBatchClient(uin).Batch.UpdateJobStatus(ctx, opt, headers) responseBody, _ := json.Marshal(response.Body) if err != nil { log.Printf("[DEBUG]%s api[UpdateJobStatus] error, request body [%s], response body [%s], err: [%s]\n", logId, req, responseBody, err.Error()) @@ -794,11 +795,11 @@ func resourceTencentCloudCosBatchUpdate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudCosBatchDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_batch.delete")() - defer inconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - idSplit := strings.Split(d.Id(), FILED_SP) + defer tccommon.LogElapsed("resource.tencentcloud_cos_batch.delete")() + defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -808,7 +809,7 @@ func resourceTencentCloudCosBatchDelete(d *schema.ResourceData, meta interface{} headers := &cos.BatchRequestHeaders{ XCosAppid: appid, } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosBatchClient(uin).Batch.DeleteJob(ctx, jobId, headers) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosBatchClient(uin).Batch.DeleteJob(ctx, jobId, headers) responseBody, _ := json.Marshal(response.Body) if err != nil { log.Printf("[DEBUG]%s api[DeleteJob] success, response body [%s], err: [%s]\n", logId, responseBody, err.Error()) diff --git a/tencentcloud/resource_tc_cos_batch_test.go b/tencentcloud/services/cos/resource_tc_cos_batch_test.go similarity index 90% rename from tencentcloud/resource_tc_cos_batch_test.go rename to tencentcloud/services/cos/resource_tc_cos_batch_test.go index bed50cceba..c8f9cb059c 100644 --- a/tencentcloud/resource_tc_cos_batch_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_batch_test.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -10,9 +11,9 @@ func TestAccTencentCloudCosBatchResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCosBatchResource, diff --git a/tencentcloud/resource_tc_cos_bucket.go b/tencentcloud/services/cos/resource_tc_cos_bucket.go similarity index 93% rename from tencentcloud/resource_tc_cos_bucket.go rename to tencentcloud/services/cos/resource_tc_cos_bucket.go index 391c72430c..ec3e09171d 100644 --- a/tencentcloud/resource_tc_cos_bucket.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "bytes" "context" "encoding/json" @@ -139,7 +140,7 @@ func originPullRules() *schema.Resource { // } //} -func resourceTencentCloudCosBucket() *schema.Resource { +func ResourceTencentCloudCosBucket() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCosBucketCreate, Read: resourceTencentCloudCosBucketRead, @@ -156,14 +157,14 @@ func resourceTencentCloudCosBucket() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateCosBucketName, + ValidateFunc: tccommon.ValidateCosBucketName, Description: "The name of a bucket to be created. Bucket format should be [custom name]-[appid], for example `mycos-1258798060`.", }, "acl": { Type: schema.TypeString, Optional: true, Default: s3.ObjectCannedACLPrivate, - ValidateFunc: validateAllowedStringValue([]string{ + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{ s3.ObjectCannedACLPrivate, s3.ObjectCannedACLPublicRead, s3.ObjectCannedACLPublicReadWrite, @@ -311,7 +312,7 @@ func resourceTencentCloudCosBucket() *schema.Resource { Optional: true, Default: "ENABLED", Description: "Domain status, default: `ENABLED`.", - ValidateFunc: validateAllowedStringValue([]string{"ENABLED", "DISABLED"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"ENABLED", "DISABLED"}), }, //"force_replacement": { // Type: schema.TypeString, @@ -347,13 +348,13 @@ func resourceTencentCloudCosBucket() *schema.Resource { "date": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateCosBucketLifecycleTimestamp, + ValidateFunc: tccommon.ValidateCosBucketLifecycleTimestamp, Description: "Specifies the date after which you want the corresponding action to take effect.", }, "days": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerMin(0), + ValidateFunc: tccommon.ValidateIntegerMin(0), Description: "Specifies the number of days after object creation when the specific rule action takes effect.", }, "storage_class": { @@ -375,13 +376,13 @@ func resourceTencentCloudCosBucket() *schema.Resource { "date": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateCosBucketLifecycleTimestamp, + ValidateFunc: tccommon.ValidateCosBucketLifecycleTimestamp, Description: "Specifies the date after which you want the corresponding action to take effect.", }, "days": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerMin(0), + ValidateFunc: tccommon.ValidateIntegerMin(0), Description: "Specifies the number of days after object creation when the specific rule action takes effect.", }, "delete_marker": { @@ -402,7 +403,7 @@ func resourceTencentCloudCosBucket() *schema.Resource { "non_current_days": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerMin(0), + ValidateFunc: tccommon.ValidateIntegerMin(0), Description: "Number of days after non current object creation when the specific rule action takes effect.", }, "storage_class": { @@ -424,7 +425,7 @@ func resourceTencentCloudCosBucket() *schema.Resource { "non_current_days": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerMin(0), + ValidateFunc: tccommon.ValidateIntegerMin(0), Description: "Number of days after non current object creation when the specific rule action takes effect. The maximum value is 3650.", }, }, @@ -516,12 +517,12 @@ func resourceTencentCloudCosBucket() *schema.Resource { } func resourceTencentCloudCosBucketCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket.create")() var err error - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Get("bucket").(string) acl := d.Get("acl").(string) @@ -537,7 +538,7 @@ func resourceTencentCloudCosBucketCreate(d *schema.ResourceData, meta interface{ } } - cosService := CosService{client: meta.(*TencentCloudClient).apiV3Conn} + cosService := CosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} useCosService, createOptions := getBucketPutOptions(d) @@ -562,14 +563,14 @@ func resourceTencentCloudCosBucketCreate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCosBucketRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Id() - cosService := CosService{client: meta.(*TencentCloudClient).apiV3Conn} + cosService := CosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} code, header, err := cosService.TencentcloudHeadBucket(ctx, bucket) if err != nil { @@ -586,7 +587,7 @@ func resourceTencentCloudCosBucketRead(d *schema.ResourceData, meta interface{}) _ = d.Set("multi_az", true) } - cosBucketUrl := fmt.Sprintf("%s.cos.%s.myqcloud.com", d.Id(), meta.(*TencentCloudClient).apiV3Conn.Region) + cosBucketUrl := fmt.Sprintf("%s.cos.%s.myqcloud.com", d.Id(), meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region) _ = d.Set("cos_bucket_url", cosBucketUrl) // set bucket in the import case if _, ok := d.GetOk("bucket"); !ok { @@ -658,7 +659,7 @@ func resourceTencentCloudCosBucketRead(d *schema.ResourceData, meta interface{}) } if len(website) > 0 { // {bucket}.cos-website.{region}.myqcloud.com - endPointUrl := fmt.Sprintf("%s.cos-website.%s.myqcloud.com", d.Id(), meta.(*TencentCloudClient).apiV3Conn.Region) + endPointUrl := fmt.Sprintf("%s.cos-website.%s.myqcloud.com", d.Id(), meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region) website[0]["endpoint"] = endPointUrl } if err = d.Set("website", website); err != nil { @@ -747,12 +748,12 @@ func resourceTencentCloudCosBucketRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudCosBucketUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cosService := CosService{client: meta.(*TencentCloudClient).apiV3Conn} + cosService := CosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} d.Partial(true) @@ -888,7 +889,7 @@ func resourceTencentCloudCosBucketUpdate(d *schema.ResourceData, meta interface{ if d.HasChange("tags") { bucket := d.Id() - cosService := CosService{client: meta.(*TencentCloudClient).apiV3Conn} + cosService := CosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if err := cosService.SetBucketTags(ctx, bucket, helper.GetTags(d, "tags")); err != nil { return err } @@ -913,9 +914,9 @@ func resourceTencentCloudCosBucketUpdate(d *schema.ResourceData, meta interface{ } func waitAclEnable(ctx context.Context, meta interface{}, bucket string) error { - logId := getLogId(ctx) - cosService := CosService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + logId := tccommon.GetLogId(ctx) + cosService := CosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { aclResult, e := cosService.GetBucketACL(ctx, bucket) if e != nil { sdkError, ok := e.(*errors.TencentCloudSDKError) @@ -939,16 +940,16 @@ func waitAclEnable(ctx context.Context, meta interface{}, bucket string) error { } func resourceTencentCloudCosBucketDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Id() forced := d.Get("force_clean").(bool) versioned := d.Get("versioning_enable").(bool) cosService := CosService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } err := cosService.DeleteBucket(ctx, bucket, forced, versioned) if err != nil { @@ -963,7 +964,7 @@ func resourceTencentCloudCosBucketDelete(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCosBucketEncryptionUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) bucket := d.Get("bucket").(string) encryption := d.Get("encryption_algorithm").(string) @@ -971,7 +972,7 @@ func resourceTencentCloudCosBucketEncryptionUpdate(ctx context.Context, meta int request := s3.DeleteBucketEncryptionInput{ Bucket: aws.String(bucket), } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().DeleteBucketEncryption(&request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosClient().DeleteBucketEncryption(&request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "delete bucket encryption", request.String(), err.Error()) @@ -997,7 +998,7 @@ func resourceTencentCloudCosBucketEncryptionUpdate(ctx context.Context, meta int rules = append(rules, rule) request.ServerSideEncryptionConfiguration.Rules = rules - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketEncryption(&request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosClient().PutBucketEncryption(&request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "put bucket encryption", request.String(), err.Error()) @@ -1010,7 +1011,7 @@ func resourceTencentCloudCosBucketEncryptionUpdate(ctx context.Context, meta int } func resourceTencentCloudCosBucketVersioningUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) bucket := d.Get("bucket").(string) versioning := d.Get("versioning_enable").(bool) @@ -1024,7 +1025,7 @@ func resourceTencentCloudCosBucketVersioningUpdate(ctx context.Context, meta int Status: aws.String(status), }, } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketVersioning(&request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosClient().PutBucketVersioning(&request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "put bucket encryption", request.String(), err.Error()) @@ -1037,7 +1038,7 @@ func resourceTencentCloudCosBucketVersioningUpdate(ctx context.Context, meta int } func resourceTencentCloudCosBucketAccelerationUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) bucket := d.Get("bucket").(string) enabled := d.Get("acceleration_enable").(bool) @@ -1049,7 +1050,7 @@ func resourceTencentCloudCosBucketAccelerationUpdate(ctx context.Context, meta i opt := &cos.BucketPutAccelerateOptions{ Status: status, } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Bucket.PutAccelerate(ctx, opt) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Bucket.PutAccelerate(ctx, opt) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, status [%s], reason[%s]\n", logId, "put bucket acceleration", opt.Status, err.Error()) @@ -1095,7 +1096,7 @@ func resourceTencentCloudCosBucketReplicaUpdate(ctx context.Context, service Cos } func resourceTencentCloudCosBucketAclUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) bucket := d.Get("bucket").(string) acl := d.Get("acl").(string) @@ -1103,7 +1104,7 @@ func resourceTencentCloudCosBucketAclUpdate(ctx context.Context, meta interface{ Bucket: aws.String(bucket), ACL: aws.String(acl), } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketAcl(&request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosClient().PutBucketAcl(&request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "put bucket acl", request.String(), err.Error()) @@ -1116,7 +1117,7 @@ func resourceTencentCloudCosBucketAclUpdate(ctx context.Context, meta interface{ } func resourceTencentCloudCosBucketCorsUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) bucket := d.Get("bucket").(string) cors := d.Get("cors_rules").([]interface{}) @@ -1125,7 +1126,7 @@ func resourceTencentCloudCosBucketCorsUpdate(ctx context.Context, meta interface request := s3.DeleteBucketCorsInput{ Bucket: aws.String(bucket), } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().DeleteBucketCors(&request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosClient().DeleteBucketCors(&request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "delete bucket cors", request.String(), err.Error()) @@ -1168,7 +1169,7 @@ func resourceTencentCloudCosBucketCorsUpdate(ctx context.Context, meta interface CORSRules: rules, }, } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketCors(&request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosClient().PutBucketCors(&request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "put bucket cors", request.String(), err.Error()) @@ -1181,7 +1182,7 @@ func resourceTencentCloudCosBucketCorsUpdate(ctx context.Context, meta interface } func resourceTencentCloudCosBucketLifecycleUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) bucket := d.Get("bucket").(string) lifecycleRules := d.Get("lifecycle_rules").([]interface{}) @@ -1189,7 +1190,7 @@ func resourceTencentCloudCosBucketLifecycleUpdate(ctx context.Context, meta inte request := s3.DeleteBucketLifecycleInput{ Bucket: aws.String(bucket), } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().DeleteBucketLifecycle(&request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosClient().DeleteBucketLifecycle(&request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "delete bucket lifecycle", request.String(), err.Error()) @@ -1298,7 +1299,7 @@ func resourceTencentCloudCosBucketLifecycleUpdate(ctx context.Context, meta inte Rules: rules, }, } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketLifecycleConfiguration(&request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosClient().PutBucketLifecycleConfiguration(&request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "put bucket lifecycle", request.String(), err.Error()) @@ -1312,7 +1313,7 @@ func resourceTencentCloudCosBucketLifecycleUpdate(ctx context.Context, meta inte } func resourceTencentCloudCosBucketWebsiteUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) bucket := d.Get("bucket").(string) website := d.Get("website").([]interface{}) @@ -1321,7 +1322,7 @@ func resourceTencentCloudCosBucketWebsiteUpdate(ctx context.Context, meta interf request := s3.DeleteBucketWebsiteInput{ Bucket: aws.String(bucket), } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().DeleteBucketWebsite(&request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosClient().DeleteBucketWebsite(&request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "delete bucket website", request.String(), err.Error()) @@ -1354,7 +1355,7 @@ func resourceTencentCloudCosBucketWebsiteUpdate(ctx context.Context, meta interf }, }, } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketWebsite(&request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosClient().PutBucketWebsite(&request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "put bucket website", request.String(), err.Error()) @@ -1368,7 +1369,7 @@ func resourceTencentCloudCosBucketWebsiteUpdate(ctx context.Context, meta interf } func resourceTencentCloudCosBucketLogStatusUpdate(ctx context.Context, meta interface{}, d *schema.ResourceData) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) bucket := d.Id() @@ -1394,7 +1395,7 @@ func resourceTencentCloudCosBucketLogStatusUpdate(ctx context.Context, meta inte }, } - resp, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketLogging(request) + resp, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosClient().PutBucketLogging(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, "cos enable log error", request.String(), err.Error()) @@ -1416,7 +1417,7 @@ func resourceTencentCloudCosBucketLogStatusUpdate(ctx context.Context, meta inte BucketLoggingStatus: &s3.BucketLoggingStatus{}, } - resp, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutBucketLogging(request) + resp, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosClient().PutBucketLogging(request) if err != nil { return fmt.Errorf("cos disable log error: %s, bucket: %s", err.Error(), bucket) } @@ -1429,7 +1430,7 @@ func resourceTencentCloudCosBucketLogStatusUpdate(ctx context.Context, meta inte } func resourceTencentCloudCosBucketOriginACLBodyUpdate(ctx context.Context, service CosService, d *schema.ResourceData) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) aclHeader := "" aclBody := "" body, bodyOk := d.GetOk("acl_body") @@ -1741,7 +1742,7 @@ func setBucketReplication(d *schema.ResourceData, result cos.GetBucketReplicatio } func ACLBodyDiffFunc(olds, news string, d *schema.ResourceData) (result bool) { - defer logElapsed("resource.tencentcloud_cos_bucket.ACLBodyDiffFunc")() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket.ACLBodyDiffFunc")() log.Printf("[DEBUG] ACLBodyDiffFunc called, before:[\n%s\n], after:[\n%s\n]\n", olds, news) oldDoc := etree.NewDocument() diff --git a/tencentcloud/resource_tc_cos_bucket_domain_certificate_attachment.go b/tencentcloud/services/cos/resource_tc_cos_bucket_domain_certificate_attachment.go similarity index 75% rename from tencentcloud/resource_tc_cos_bucket_domain_certificate_attachment.go rename to tencentcloud/services/cos/resource_tc_cos_bucket_domain_certificate_attachment.go index 9c6a971d27..e08fb49fea 100644 --- a/tencentcloud/resource_tc_cos_bucket_domain_certificate_attachment.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_domain_certificate_attachment.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/xml" "fmt" @@ -14,7 +15,7 @@ import ( cos "github.com/tencentyun/cos-go-sdk-v5" ) -func resourceTencentCloudCosBucketDomainCertificateAttachment() *schema.Resource { +func ResourceTencentCloudCosBucketDomainCertificateAttachment() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudCosBucketDomainCertificateAttachmentRead, Create: resourceTencentCloudCosBucketDomainCertificateAttachmentCreate, @@ -28,7 +29,7 @@ func resourceTencentCloudCosBucketDomainCertificateAttachment() *schema.Resource Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateCosBucketName, + ValidateFunc: tccommon.ValidateCosBucketName, Description: "Bucket name.", }, "domain_certificate": { @@ -87,11 +88,11 @@ func resourceTencentCloudCosBucketDomainCertificateAttachment() *schema.Resource } func resourceTencentCloudCosBucketDomainCertificateAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_domain_certificate_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_domain_certificate_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var bucket string if v, ok := d.GetOk("bucket"); ok { @@ -125,10 +126,10 @@ func resourceTencentCloudCosBucketDomainCertificateAttachmentCreate(d *schema.Re } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Bucket.PutDomainCertificate(ctx, &option) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Bucket.PutDomainCertificate(ctx, &option) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { request, _ := xml.Marshal(option) log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", @@ -142,20 +143,20 @@ func resourceTencentCloudCosBucketDomainCertificateAttachmentCreate(d *schema.Re return err } - ids := strings.Join([]string{bucket, option.DomainList[0]}, FILED_SP) + ids := strings.Join([]string{bucket, option.DomainList[0]}, tccommon.FILED_SP) d.SetId(ids) return nil } func resourceTencentCloudCosBucketDomainCertificateAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_domain_certificate_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_domain_certificate_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CosService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() @@ -177,13 +178,13 @@ func resourceTencentCloudCosBucketDomainCertificateAttachmentRead(d *schema.Reso func resourceTencentCloudCosBucketDomainCertificateAttachmentDelete(d *schema.ResourceData, meta interface{}) error { id := d.Id() - defer logElapsed("resource.tencentcloud_cos_bucket_domain_certificate_attachment.delete id:", id)() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_domain_certificate_attachment.delete id:", id)() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CosService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if err := service.DeleteCosBucketDomainCertificate(ctx, id); err != nil { return err diff --git a/tencentcloud/resource_tc_cos_bucket_domain_certificate_attachment_test.go b/tencentcloud/services/cos/resource_tc_cos_bucket_domain_certificate_attachment_test.go similarity index 71% rename from tencentcloud/resource_tc_cos_bucket_domain_certificate_attachment_test.go rename to tencentcloud/services/cos/resource_tc_cos_bucket_domain_certificate_attachment_test.go index 97df57ac6e..58f2623a54 100644 --- a/tencentcloud/resource_tc_cos_bucket_domain_certificate_attachment_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_domain_certificate_attachment_test.go @@ -1,21 +1,26 @@ -package tencentcloud +package cos_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" "github.com/pkg/errors" + + localcos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cos" ) func TestAccTencentCloudCosBucketDomainCertificate_basic(t *testing.T) { id := new(string) resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketDoaminCertificateDestroy(id), Steps: []resource.TestStep{ { @@ -34,9 +39,9 @@ func TestAccTencentCloudCosBucketDomainCertificate_basic(t *testing.T) { func testAccCheckCosBucketDoaminCertificateDestroy(configId *string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CosService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localcos.NewCosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) ret, _, err := service.DescribeCosBucketDomainCertificate(ctx, *configId) @@ -48,7 +53,7 @@ func testAccCheckCosBucketDoaminCertificateDestroy(configId *string) resource.Te return fmt.Errorf("cosBucketDoaminCertificate's status can not found! id:[%s]", *configId) } - if ret.Status == CERT_ENABLED { + if ret.Status == localcos.CERT_ENABLED { return errors.New("the cosBucketDoaminCertificate still exists") } return nil @@ -57,9 +62,9 @@ func testAccCheckCosBucketDoaminCertificateDestroy(configId *string) resource.Te func testAccCheckCosBucketDoaminCertificateExists(n string, id *string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CosService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localcos.NewCosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[n] if !ok { @@ -81,7 +86,7 @@ func testAccCheckCosBucketDoaminCertificateExists(n string, id *string) resource return fmt.Errorf("cosBucketDoaminCertificate's status can not found: %s", rs.Primary.ID) } - if ret.Status == CERT_DISABLED { + if ret.Status == localcos.CERT_DISABLED { return fmt.Errorf("cosBucketDoaminCertificate does not exist: %s", rs.Primary.ID) } @@ -101,7 +106,7 @@ provider "tencentcloud" { // name = "keep-c-ssl"keep-cos-domain-cert const testAccSSLCertificate = ` data "tencentcloud_ssl_certificates" "foo1" { - name = "` + defaultCosCertificateName + `" + name = "` + tcacctest.DefaultCosCertificateName + `" } locals { @@ -111,11 +116,11 @@ locals { ` -const testAccCosBucketDomainCertificate_basic = userInfoData + testAccCosDomain + testAccSSLCertificate + ` +const testAccCosBucketDomainCertificate_basic = tcacctest.UserInfoData + testAccCosDomain + testAccSSLCertificate + ` resource "tencentcloud_cos_bucket_domain_certificate_attachment" "basic" { - bucket = "` + defaultCosCertificateBucketPrefix + `-${local.app_id}" + bucket = "` + tcacctest.DefaultCosCertificateBucketPrefix + `-${local.app_id}" domain_certificate { - domain = "` + defaultCosCertDomainName + `" + domain = "` + tcacctest.DefaultCosCertDomainName + `" certificate { cert_type = "CustomCert" custom_cert { diff --git a/tencentcloud/resource_tc_cos_bucket_generate_inventory_immediately_operation.go b/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation.go similarity index 67% rename from tencentcloud/resource_tc_cos_bucket_generate_inventory_immediately_operation.go rename to tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation.go index b7a7e609b7..c8a63e8e4b 100644 --- a/tencentcloud/resource_tc_cos_bucket_generate_inventory_immediately_operation.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "fmt" "log" @@ -12,7 +13,7 @@ import ( "github.com/tencentyun/cos-go-sdk-v5" ) -func resourceTencentCloudCosBucketGenerateInventoryImmediatelyOperation() *schema.Resource { +func ResourceTencentCloudCosBucketGenerateInventoryImmediatelyOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCosBucketGenerateInventoryImmediatelyOperationCreate, Read: resourceTencentCloudCosBucketGenerateInventoryImmediatelyOperationRead, @@ -36,14 +37,14 @@ func resourceTencentCloudCosBucketGenerateInventoryImmediatelyOperation() *schem } func resourceTencentCloudCosBucketGenerateInventoryImmediatelyOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_generate_inventory_immediately_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_generate_inventory_immediately_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) inventoryId := d.Get("inventory_id").(string) bucket := d.Get("bucket").(string) - result, _, err := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Bucket.GetInventory(ctx, inventoryId) + result, _, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Bucket.GetInventory(ctx, inventoryId) if err != nil { log.Printf("[CRITAL]%s get cos bucketInventory failed, reason:%+v", logId, err) return err @@ -56,7 +57,7 @@ func resourceTencentCloudCosBucketGenerateInventoryImmediatelyOperationCreate(d OptionalFields: result.OptionalFields, Destination: result.Destination, } - _, err = meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Bucket.PostInventory(ctx, id, inventoryOpt) + _, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Bucket.PostInventory(ctx, id, inventoryOpt) if err != nil { return err } @@ -64,13 +65,13 @@ func resourceTencentCloudCosBucketGenerateInventoryImmediatelyOperationCreate(d targetBucket := items[len(items)-1] targetBucketItems := strings.Split(targetBucket, "-") objectId := fmt.Sprintf("%s/%s/%s/%s/%s/manifest.json", result.Destination.Prefix, targetBucketItems[len(targetBucketItems)-1], strings.Join(targetBucketItems[:len(targetBucketItems)-1], "-"), id, time.Now().Format("20060102")) - err = resource.Retry(10*readRetryTimeout, func() *resource.RetryError { - resp, e := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(targetBucket).Object.Head(ctx, objectId, nil) + err = resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { + resp, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(targetBucket).Object.Head(ctx, objectId, nil) if resp.StatusCode == 404 { return resource.RetryableError(fmt.Errorf("Inventory still creating!")) } if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil @@ -85,15 +86,15 @@ func resourceTencentCloudCosBucketGenerateInventoryImmediatelyOperationCreate(d } func resourceTencentCloudCosBucketGenerateInventoryImmediatelyOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_generate_inventory_immediately_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_generate_inventory_immediately_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCosBucketGenerateInventoryImmediatelyOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_generate_inventory_immediately_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_generate_inventory_immediately_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cos_bucket_generate_inventory_immediately_operation_test.go b/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation_test.go similarity index 79% rename from tencentcloud/resource_tc_cos_bucket_generate_inventory_immediately_operation_test.go rename to tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation_test.go index e82f981c47..f8e5570a8d 100644 --- a/tencentcloud/resource_tc_cos_bucket_generate_inventory_immediately_operation_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation_test.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -9,8 +10,8 @@ import ( func TestAccTencentCloudCosBucketGenerateInventoryImmediatelyOperationResource(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCosBucketGenerateInventoryImmediatelyOperation, diff --git a/tencentcloud/resource_tc_cos_bucket_inventory.go b/tencentcloud/services/cos/resource_tc_cos_bucket_inventory.go similarity index 87% rename from tencentcloud/resource_tc_cos_bucket_inventory.go rename to tencentcloud/services/cos/resource_tc_cos_bucket_inventory.go index 51600c8657..6dc3d44fcb 100644 --- a/tencentcloud/resource_tc_cos_bucket_inventory.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_inventory.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/json" "fmt" @@ -13,7 +14,7 @@ import ( cos "github.com/tencentyun/cos-go-sdk-v5" ) -func resourceTencentCloudCosBucketInventory() *schema.Resource { +func ResourceTencentCloudCosBucketInventory() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCosBucketInventoryCreate, Read: resourceTencentCloudCosBucketInventoryRead, @@ -163,11 +164,11 @@ func resourceTencentCloudCosBucketInventory() *schema.Resource { } func resourceTencentCloudCosBucketInventoryCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_inventory.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_inventory.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Get("bucket").(string) name := d.Get("name").(string) isEnabled := d.Get("is_enabled").(string) @@ -254,13 +255,13 @@ func resourceTencentCloudCosBucketInventoryCreate(d *schema.ResourceData, meta i Destination: &destination, } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { req, _ := json.Marshal(opt) - resp, e := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Bucket.PutInventory(ctx, name, opt) + resp, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Bucket.PutInventory(ctx, name, opt) responseBody, _ := json.Marshal(resp.Body) if e != nil { log.Printf("[DEBUG]%s api[PutInventory] success, request body [%s], response body [%s], err: [%s]\n", logId, req, responseBody, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -268,25 +269,25 @@ func resourceTencentCloudCosBucketInventoryCreate(d *schema.ResourceData, meta i log.Printf("[CRITAL]%s create cos bucketInventory failed, reason:%+v", logId, err) return err } - d.SetId(bucket + FILED_SP + name) + d.SetId(bucket + tccommon.FILED_SP + name) return resourceTencentCloudCosBucketInventoryRead(d, meta) } func resourceTencentCloudCosBucketInventoryRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_inventory.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_inventory.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } bucket := idSplit[0] name := idSplit[1] - result, _, err := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Bucket.GetInventory(ctx, name) + result, _, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Bucket.GetInventory(ctx, name) if err != nil { log.Printf("[CRITAL]%s get cos bucketInventory failed, reason:%+v", logId, err) return err @@ -346,11 +347,11 @@ func resourceTencentCloudCosBucketInventoryRead(d *schema.ResourceData, meta int } func resourceTencentCloudCosBucketInventoryUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_inventory.update")() - defer inconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - idSplit := strings.Split(d.Id(), FILED_SP) + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_inventory.update")() + defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -443,13 +444,13 @@ func resourceTencentCloudCosBucketInventoryUpdate(d *schema.ResourceData, meta i Destination: &destination, } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { req, _ := json.Marshal(opt) - resp, e := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Bucket.PutInventory(ctx, name, opt) + resp, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Bucket.PutInventory(ctx, name, opt) responseBody, _ := json.Marshal(resp.Body) if e != nil { log.Printf("[DEBUG]%s api[PutInventory] success, request body [%s], response body [%s], err: [%s]\n", logId, req, responseBody, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -462,25 +463,25 @@ func resourceTencentCloudCosBucketInventoryUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudCosBucketInventoryDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_inventory.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_inventory.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } bucket := idSplit[0] name := idSplit[1] - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - resp, e := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Bucket.DeleteInventory(ctx, name) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + resp, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Bucket.DeleteInventory(ctx, name) if e != nil { log.Printf("[CRITAL][retry]%s api[%s] fail, resp body [%s], reason[%s]\n", logId, "DeleteInventory ", resp.Body, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) diff --git a/tencentcloud/resource_tc_cos_bucket_inventory_test.go b/tencentcloud/services/cos/resource_tc_cos_bucket_inventory_test.go similarity index 85% rename from tencentcloud/resource_tc_cos_bucket_inventory_test.go rename to tencentcloud/services/cos/resource_tc_cos_bucket_inventory_test.go index 29978e42e6..f94f21eb48 100644 --- a/tencentcloud/resource_tc_cos_bucket_inventory_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_inventory_test.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -10,8 +11,8 @@ func TestAccTencentCloudCosBucketInventoryResource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCosBucketInventory, diff --git a/tencentcloud/resource_tc_cos_bucket_object.go b/tencentcloud/services/cos/resource_tc_cos_bucket_object.go similarity index 85% rename from tencentcloud/resource_tc_cos_bucket_object.go rename to tencentcloud/services/cos/resource_tc_cos_bucket_object.go index fe12d4795a..49313008eb 100644 --- a/tencentcloud/resource_tc_cos_bucket_object.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_object.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "bytes" "context" "fmt" @@ -16,7 +17,7 @@ import ( "github.com/mitchellh/go-homedir" ) -func resourceTencentCloudCosBucketObject() *schema.Resource { +func ResourceTencentCloudCosBucketObject() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCosBucketObjectCreate, Read: resourceTencentCloudCosBucketObjectRead, @@ -52,7 +53,7 @@ func resourceTencentCloudCosBucketObject() *schema.Resource { Type: schema.TypeString, Optional: true, Default: s3.ObjectCannedACLPrivate, - ValidateFunc: validateAllowedStringValue([]string{ + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{ s3.ObjectCannedACLPrivate, s3.ObjectCannedACLPublicRead, s3.ObjectCannedACLPublicReadWrite, @@ -103,9 +104,9 @@ func resourceTencentCloudCosBucketObject() *schema.Resource { } func resourceTencentCloudCosBucketObjectCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_object.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_object.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) bucket := d.Get("bucket").(string) key := d.Get("key").(string) @@ -159,7 +160,7 @@ func resourceTencentCloudCosBucketObjectCreate(d *schema.ResourceData, meta inte request.StorageClass = aws.String(v.(string)) } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCosClient().PutObject(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCosClient().PutObject(request) if err != nil { return fmt.Errorf("putting object (%s) in cos bucket (%s) error: %s", key, bucket, err.Error()) } @@ -167,9 +168,9 @@ func resourceTencentCloudCosBucketObjectCreate(d *schema.ResourceData, meta inte logId, "put object", request.String(), response.String()) if v, ok := d.GetOk("tags"); ok { - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) service := CosService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } tags := make(map[string]string) @@ -187,16 +188,16 @@ func resourceTencentCloudCosBucketObjectCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudCosBucketObjectRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_object.read")() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_object.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Get("bucket").(string) key := d.Get("key").(string) cosService := CosService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } response, err := cosService.HeadObject(ctx, bucket, key) if err != nil { @@ -218,7 +219,7 @@ func resourceTencentCloudCosBucketObjectRead(d *schema.ResourceData, meta interf _ = d.Set("storage_class", response.StorageClass) } - _, aclResponse, aclErr := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Object.GetACL(ctx, key) + _, aclResponse, aclErr := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Object.GetACL(ctx, key) if aclErr != nil { return fmt.Errorf("cos [GetACL] error: %s, bucket: %s, object: %s", aclErr.Error(), bucket, key) } @@ -245,10 +246,10 @@ func resourceTencentCloudCosBucketObjectRead(d *schema.ResourceData, meta interf } func resourceTencentCloudCosBucketObjectUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_object.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_object.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) fields := []string{ "cache_control", @@ -269,7 +270,7 @@ func resourceTencentCloudCosBucketObjectUpdate(d *schema.ResourceData, meta inte bucket := d.Get("bucket").(string) key := d.Get("key").(string) cosService := CosService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if d.HasChange("acl") { @@ -295,16 +296,16 @@ func resourceTencentCloudCosBucketObjectUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudCosBucketObjectDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_object.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_object.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Get("bucket").(string) key := d.Get("key").(string) cosService := CosService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } err := cosService.DeleteObject(ctx, bucket, key) if err != nil { diff --git a/tencentcloud/resource_tc_cos_bucket_object_test.go b/tencentcloud/services/cos/resource_tc_cos_bucket_object_test.go similarity index 80% rename from tencentcloud/resource_tc_cos_bucket_object_test.go rename to tencentcloud/services/cos/resource_tc_cos_bucket_object_test.go index 0bb8840091..7f4216c054 100644 --- a/tencentcloud/resource_tc_cos_bucket_object_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_object_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cos_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cos" + "context" "fmt" "io/ioutil" @@ -35,12 +39,12 @@ func TestAccTencentCloudCosBucketObjectResource_source(t *testing.T) { } resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketObjectDestroy, Steps: []resource.TestStep{ { - Config: testAccCosBucketObject_source(appid, path), + Config: testAccCosBucketObject_source(tcacctest.Appid, path), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckCosBucketObjectExists("tencentcloud_cos_bucket_object.object_source"), resource.TestCheckResourceAttr("tencentcloud_cos_bucket_object.object_source", "content_type", "binary/octet-stream"), @@ -54,12 +58,12 @@ func TestAccTencentCloudCosBucketObjectResource_content(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketObjectDestroy, Steps: []resource.TestStep{ { - Config: testAccCosBucketObject_content(appid), + Config: testAccCosBucketObject_content(tcacctest.Appid), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckCosBucketObjectExists("tencentcloud_cos_bucket_object.object_content"), resource.TestCheckResourceAttr("tencentcloud_cos_bucket_object.object_content", "content", "aaaaaaaaaaaaaaaa"), @@ -74,12 +78,12 @@ func TestAccTencentCloudCosBucketObjectResource_tags(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketObjectDestroy, Steps: []resource.TestStep{ { - Config: testAccCosBucketObject_tags(appid), + Config: testAccCosBucketObject_tags(tcacctest.Appid), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckCosBucketObjectExists("tencentcloud_cos_bucket_object.object_with_tags"), resource.TestCheckResourceAttr("tencentcloud_cos_bucket_object.object_with_tags", "tags.test", "test"), @@ -94,12 +98,12 @@ func TestAccTencentCloudCosBucketObjectResource_storageClass(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketObjectDestroy, Steps: []resource.TestStep{ { - Config: testAccCosBucketObject_storageClass(appid), + Config: testAccCosBucketObject_storageClass(tcacctest.Appid), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckCosBucketObjectExists("tencentcloud_cos_bucket_object.object_storage"), resource.TestCheckResourceAttr("tencentcloud_cos_bucket_object.object_storage", "storage_class", "STANDARD_IA"), @@ -113,12 +117,12 @@ func TestAccTencentCloudCosBucketObjectResource_acl(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketObjectDestroy, Steps: []resource.TestStep{ { - Config: testAccCosBucketObject_acl(appid, "private"), + Config: testAccCosBucketObject_acl(tcacctest.Appid, "private"), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckCosBucketObjectExists("tencentcloud_cos_bucket_object.object_acl"), resource.TestCheckResourceAttr("tencentcloud_cos_bucket_object.object_acl", "acl", "private"), @@ -126,7 +130,7 @@ func TestAccTencentCloudCosBucketObjectResource_acl(t *testing.T) { }, // test update acl { - Config: testAccCosBucketObject_acl(appid, "public-read"), + Config: testAccCosBucketObject_acl(tcacctest.Appid, "public-read"), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckCosBucketObjectExists("tencentcloud_cos_bucket_object.object_acl"), resource.TestCheckResourceAttr("tencentcloud_cos_bucket_object.object_acl", "acl", "public-read"), @@ -138,8 +142,8 @@ func TestAccTencentCloudCosBucketObjectResource_acl(t *testing.T) { func testAccCheckCosBucketObjectExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -148,7 +152,7 @@ func testAccCheckCosBucketObjectExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cos object id is not set") } - cosService := CosService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + cosService := localcos.NewCosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) bucket := rs.Primary.Attributes["bucket"] key := rs.Primary.Attributes["key"] @@ -161,12 +165,10 @@ func testAccCheckCosBucketObjectExists(n string) resource.TestCheckFunc { } func testAccCheckCosBucketObjectDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cosService := CosService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cosService := localcos.NewCosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cos_bucket_object" { continue diff --git a/tencentcloud/resource_tc_cos_bucket_policy.go b/tencentcloud/services/cos/resource_tc_cos_bucket_policy.go similarity index 73% rename from tencentcloud/resource_tc_cos_bucket_policy.go rename to tencentcloud/services/cos/resource_tc_cos_bucket_policy.go index 9e8c9a946b..a835180480 100644 --- a/tencentcloud/resource_tc_cos_bucket_policy.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_policy.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/json" "log" @@ -12,7 +13,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" ) -func resourceTencentCloudCosBucketPolicy() *schema.Resource { +func ResourceTencentCloudCosBucketPolicy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCosBucketPolicyCreate, Read: resourceTencentCloudCosBucketPolicyRead, @@ -27,7 +28,7 @@ func resourceTencentCloudCosBucketPolicy() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateCosBucketName, + ValidateFunc: tccommon.ValidateCosBucketName, Description: "The name of a bucket to be created. Bucket format should be [custom name]-[appid], for example `mycos-1258798060`.", }, "policy": { @@ -55,18 +56,18 @@ func resourceTencentCloudCosBucketPolicy() *schema.Resource { } func resourceTencentCloudCosBucketPolicyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_policy.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_policy.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Get("bucket").(string) policy := d.Get("policy").(string) cosService := CosService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } policyErr := camService.PolicyDocumentForceCheck(policy) if policyErr != nil { @@ -83,19 +84,19 @@ func resourceTencentCloudCosBucketPolicyCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudCosBucketPolicyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_policy.read")() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_policy.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Id() - cosService := CosService{client: meta.(*TencentCloudClient).apiV3Conn} + cosService := CosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var result string - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { policy, e := cosService.DescribePolicyByBucket(ctx, bucket) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = policy return nil @@ -120,17 +121,17 @@ func resourceTencentCloudCosBucketPolicyRead(d *schema.ResourceData, meta interf } func resourceTencentCloudCosBucketPolicyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_policy.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_policy.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cosService := CosService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cosService := CosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} bucket := d.Id() if d.HasChange("policy") { policy := d.Get("policy").(string) camService := CamService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } policyErr := camService.PolicyDocumentForceCheck(policy) if policyErr != nil { @@ -150,14 +151,14 @@ func resourceTencentCloudCosBucketPolicyUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudCosBucketPolicyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_policy.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_policy.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Id() cosService := CosService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } err := cosService.DeleteBucketPolicy(ctx, bucket) if err != nil { diff --git a/tencentcloud/resource_tc_cos_bucket_policy_test.go b/tencentcloud/services/cos/resource_tc_cos_bucket_policy_test.go similarity index 81% rename from tencentcloud/resource_tc_cos_bucket_policy_test.go rename to tencentcloud/services/cos/resource_tc_cos_bucket_policy_test.go index 1172b8687c..63c82a9de0 100644 --- a/tencentcloud/resource_tc_cos_bucket_policy_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_policy_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cos_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cos" + "context" "fmt" "testing" @@ -12,8 +16,8 @@ import ( func TestAccTencentCloudCosBucketPolicy(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketPolicyDestroy, Steps: []resource.TestStep{ { @@ -41,12 +45,10 @@ func TestAccTencentCloudCosBucketPolicy(t *testing.T) { } func testAccCheckCosBucketPolicyDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cosService := CosService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cosService := localcos.NewCosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cos_bucket_policy" { continue @@ -62,8 +64,8 @@ func testAccCheckCosBucketPolicyDestroy(s *terraform.State) error { func testAccCheckCosBucketPolicyExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -72,9 +74,7 @@ func testAccCheckCosBucketPolicyExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][cos bucket policy][Exists] check: cos bucket policy id is not set") } - cosService := CosService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cosService := localcos.NewCosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) policy, err := cosService.DescribePolicyByBucket(ctx, rs.Primary.ID) if err != nil { return err @@ -87,7 +87,7 @@ func testAccCheckCosBucketPolicyExists(n string) resource.TestCheckFunc { } func testAccCosBucketPolicyBasic() string { - return userInfoData + ` + return tcacctest.UserInfoData + ` resource "tencentcloud_cos_bucket" "bucket" { bucket = "test-tf-policy-${local.app_id}" acl = "private" @@ -125,7 +125,7 @@ EOF ` } func testAccCosBucketPolicyUpdate() string { - return userInfoData + ` + return tcacctest.UserInfoData + ` resource "tencentcloud_cos_bucket" "bucket" { bucket = "test-tf-policy-${local.app_id}" acl = "private" diff --git a/tencentcloud/resource_tc_cos_bucket_referer.go b/tencentcloud/services/cos/resource_tc_cos_bucket_referer.go similarity index 75% rename from tencentcloud/resource_tc_cos_bucket_referer.go rename to tencentcloud/services/cos/resource_tc_cos_bucket_referer.go index 81a9b12c60..28eccf02c3 100644 --- a/tencentcloud/resource_tc_cos_bucket_referer.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_referer.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "log" @@ -9,7 +10,7 @@ import ( cos "github.com/tencentyun/cos-go-sdk-v5" ) -func resourceTencentCloudCosBucketReferer() *schema.Resource { +func ResourceTencentCloudCosBucketReferer() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCosBucketRefererCreate, Read: resourceTencentCloudCosBucketRefererRead, @@ -52,8 +53,8 @@ func resourceTencentCloudCosBucketReferer() *schema.Resource { } func resourceTencentCloudCosBucketRefererCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_referer.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_referer.create")() + defer tccommon.InconsistentCheck(d, meta)() var bucket string if v, ok := d.GetOk("bucket"); ok { @@ -66,13 +67,13 @@ func resourceTencentCloudCosBucketRefererCreate(d *schema.ResourceData, meta int } func resourceTencentCloudCosBucketRefererRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_referer.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_referer.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CosService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} bucket := d.Id() @@ -109,11 +110,11 @@ func resourceTencentCloudCosBucketRefererRead(d *schema.ResourceData, meta inter } func resourceTencentCloudCosBucketRefererUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_referer.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_referer.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Id() @@ -135,10 +136,10 @@ func resourceTencentCloudCosBucketRefererUpdate(d *schema.ResourceData, meta int request.EmptyReferConfiguration = v.(string) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Bucket.PutReferer(ctx, &request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Bucket.PutReferer(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%+v], response status [%s]\n", logId, "PutReferer", request, result.Status) } @@ -153,8 +154,8 @@ func resourceTencentCloudCosBucketRefererUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudCosBucketRefererDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_referer.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_referer.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cos_bucket_referer_test.go b/tencentcloud/services/cos/resource_tc_cos_bucket_referer_test.go similarity index 80% rename from tencentcloud/resource_tc_cos_bucket_referer_test.go rename to tencentcloud/services/cos/resource_tc_cos_bucket_referer_test.go index 5fee5e7cd8..3188b634a2 100644 --- a/tencentcloud/resource_tc_cos_bucket_referer_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_referer_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cos_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cos" + "context" "fmt" "testing" @@ -14,8 +18,8 @@ func TestAccTencentCloudCosBucketRefererResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketRefererDestroy, Steps: []resource.TestStep{ { @@ -49,9 +53,9 @@ func TestAccTencentCloudCosBucketRefererResource_basic(t *testing.T) { } func testAccCheckCosBucketRefererDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CosService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localcos.NewCosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cos_bucket_referer" { continue @@ -71,9 +75,9 @@ func testAccCheckCosBucketRefererDestroy(s *terraform.State) error { func testAccCheckCosBucketRefererExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CosService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := localcos.NewCosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -102,7 +106,7 @@ func testAccCheckCosBucketRefererExists(re string) resource.TestCheckFunc { const testAccCosBucketRefererVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` diff --git a/tencentcloud/resource_tc_cos_bucket_test.go b/tencentcloud/services/cos/resource_tc_cos_bucket_test.go similarity index 92% rename from tencentcloud/resource_tc_cos_bucket_test.go rename to tencentcloud/services/cos/resource_tc_cos_bucket_test.go index baeb1f01f9..92a9308ddb 100644 --- a/tencentcloud/resource_tc_cos_bucket_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cos_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + localcos "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cos" + "context" "fmt" "log" @@ -20,18 +24,16 @@ func init() { } func testSweepCosBuckets(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - sharedClient, err := sharedClientForRegion(region) + sharedClient, err := tcacctest.SharedClientForRegion(region) if err != nil { return fmt.Errorf("getting tencentcloud client error: %s", err.Error()) } - client := sharedClient.(*TencentCloudClient) + client := sharedClient.(tccommon.ProviderMeta) - cosService := CosService{ - client: client.apiV3Conn, - } + cosService := localcos.NewCosService(client.GetAPIV3Conn()) buckets, err := cosService.ListBuckets(ctx) if err != nil { return fmt.Errorf("list buckets error: %s", err.Error()) @@ -68,8 +70,8 @@ func TestAccTencentCloudCosBucketResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketDestroy, Steps: []resource.TestStep{ { @@ -105,8 +107,8 @@ func TestAccTencentCloudCosBucketResource_ACL(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketDestroy, Steps: []resource.TestStep{ { @@ -140,8 +142,8 @@ func TestAccTencentCloudCosBucketResource_tags(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketDestroy, Steps: []resource.TestStep{ { @@ -174,8 +176,8 @@ func TestAccTencentCloudCosBucketResource_cors(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketDestroy, Steps: []resource.TestStep{ { @@ -223,8 +225,8 @@ func TestAccTencentCloudCosBucketResource_lifecycle(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketDestroy, Steps: []resource.TestStep{ { @@ -293,8 +295,8 @@ func TestAccTencentCloudCosBucketResource_website(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketDestroy, Steps: []resource.TestStep{ { @@ -332,8 +334,8 @@ func TestAccTencentCloudCosBucketResource_MAZ(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketDestroy, Steps: []resource.TestStep{ { @@ -357,8 +359,8 @@ func TestAccTencentCloudCosBucketResource_originPull(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketDestroy, Steps: []resource.TestStep{ { @@ -414,8 +416,8 @@ func TestAccTencentCloudCosBucket_originDomain(t *testing.T) { randomName := acctest.RandInt() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketDestroy, Steps: []resource.TestStep{ { @@ -451,8 +453,8 @@ func TestAccTencentCloudCosBucketResource_replication(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCosBucketDestroy, Steps: []resource.TestStep{ { @@ -494,8 +496,8 @@ func TestAccTencentCloudCosBucketResource_replication(t *testing.T) { func testAccCheckCosBucketExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -504,7 +506,7 @@ func testAccCheckCosBucketExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cos bucket id is not set") } - cosService := CosService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + cosService := localcos.NewCosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) err := cosService.HeadBucket(ctx, rs.Primary.ID) if err != nil { return err @@ -514,12 +516,10 @@ func testAccCheckCosBucketExists(n string) resource.TestCheckFunc { } func testAccCheckCosBucketDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cosService := CosService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cosService := localcos.NewCosService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cos_bucket" { continue @@ -542,7 +542,7 @@ resource "tencentcloud_cos_bucket" "bucket_basic" { acl = "public-read" enable_intelligent_tiering = true } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccCosBucket_basicUpdate() string { @@ -557,7 +557,7 @@ resource "tencentcloud_cos_bucket" "bucket_basic" { acceleration_enable = true force_clean = true } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccCosBucket_ACL() string { @@ -592,13 +592,13 @@ resource "tencentcloud_cos_bucket" "bucket_acl" { qcs::cam::uin/${local.uin}:uin/${local.uin} qcs::cam::uin/${local.uin}:uin/${local.uin} - FULL_CONTROL + tcacctest.FULL_CONTROL EOF } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccCosBucket_ACLUpdate() string { @@ -626,20 +626,20 @@ resource "tencentcloud_cos_bucket" "bucket_acl" { qcs::cam::uin/${local.uin}:uin/${local.uin} qcs::cam::uin/${local.uin}:uin/${local.uin} - FULL_CONTROL + tcacctest.FULL_CONTROL qcs::cam::uin/${local.uin}:uin/${local.uin} qcs::cam::uin/${local.uin}:uin/${local.uin} - WRITE_ACP + tcacctest.WRITE_ACP http://cam.qcloud.com/groups/global/AllUsers - READ_ACP + tcacctest.READ_ACP @@ -659,7 +659,7 @@ resource "tencentcloud_cos_bucket" "bucket_acl" { EOF } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccCosBucket_tags() string { @@ -674,7 +674,7 @@ resource "tencentcloud_cos_bucket" "bucket_tags" { "test" = "test" } } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccCosBucket_tagsReplace() string { @@ -688,7 +688,7 @@ resource "tencentcloud_cos_bucket" "bucket_tags" { "abc" = "abc" } } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccCosBucket_tagsDelete() string { @@ -699,7 +699,7 @@ resource "tencentcloud_cos_bucket" "bucket_tags" { bucket = "tf-bucket-tags-${local.app_id}" acl = "public-read" } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccCosBucket_cors() string { @@ -718,7 +718,7 @@ resource "tencentcloud_cos_bucket" "bucket_cors" { max_age_seconds = 300 } } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccCosBucket_corsUpdate() string { @@ -736,7 +736,7 @@ resource "tencentcloud_cos_bucket" "bucket_cors" { max_age_seconds = 100 } } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccBucket_lifecycle() string { @@ -763,7 +763,7 @@ resource "tencentcloud_cos_bucket" "bucket_lifecycle" { } } } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccBucket_lifecycleUpdate() string { @@ -804,7 +804,7 @@ resource "tencentcloud_cos_bucket" "bucket_lifecycle" { } } } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccBucket_website() string { @@ -819,7 +819,7 @@ resource "tencentcloud_cos_bucket" "bucket_website" { error_document = "error.html" } } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccBucket_websiteUpdate() string { @@ -834,7 +834,7 @@ resource "tencentcloud_cos_bucket" "bucket_website" { error_document = "testerror.html" } } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccBucket_MAZ() string { @@ -847,7 +847,7 @@ resource "tencentcloud_cos_bucket" "bucket_maz" { multi_az = true versioning_enable = true } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccBucket_originPull() string { @@ -871,7 +871,7 @@ resource "tencentcloud_cos_bucket" "with_origin" { } } } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccBucket_originPullUpdate() string { @@ -895,7 +895,7 @@ resource "tencentcloud_cos_bucket" "with_origin" { } } } -`, userInfoData) +`, tcacctest.UserInfoData) } func testAccBucketReplication() string { @@ -919,7 +919,7 @@ resource "tencentcloud_cos_bucket" "with_replication" { destination_bucket = "qcs::cos:%s::${tencentcloud_cos_bucket.replica1.bucket}" } } -`, userInfoData, defaultRegion) +`, tcacctest.UserInfoData, tcacctest.DefaultRegion) } func testAccBucketReplicationUpdate() string { @@ -944,7 +944,7 @@ resource "tencentcloud_cos_bucket" "with_replication" { destination_bucket = "qcs::cos:%s::${tencentcloud_cos_bucket.replica1.bucket}" } } -`, userInfoData, defaultRegion) +`, tcacctest.UserInfoData, tcacctest.DefaultRegion) } func testAccBucketReplicationRemove() string { @@ -962,5 +962,5 @@ resource "tencentcloud_cos_bucket" "with_replication" { acl = "private" versioning_enable = true } -`, userInfoData) +`, tcacctest.UserInfoData) } diff --git a/tencentcloud/resource_tc_cos_bucket_version.go b/tencentcloud/services/cos/resource_tc_cos_bucket_version.go similarity index 66% rename from tencentcloud/resource_tc_cos_bucket_version.go rename to tencentcloud/services/cos/resource_tc_cos_bucket_version.go index 156bf2bac3..de2d2ed526 100644 --- a/tencentcloud/resource_tc_cos_bucket_version.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_version.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "log" @@ -9,7 +10,7 @@ import ( cos "github.com/tencentyun/cos-go-sdk-v5" ) -func resourceTencentCloudCosBucketVersion() *schema.Resource { +func ResourceTencentCloudCosBucketVersion() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCosBucketVersionCreate, Read: resourceTencentCloudCosBucketVersionRead, @@ -35,8 +36,8 @@ func resourceTencentCloudCosBucketVersion() *schema.Resource { } func resourceTencentCloudCosBucketVersionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_version.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_version.create")() + defer tccommon.InconsistentCheck(d, meta)() var bucket string if v, ok := d.GetOk("bucket"); ok { @@ -49,13 +50,13 @@ func resourceTencentCloudCosBucketVersionCreate(d *schema.ResourceData, meta int } func resourceTencentCloudCosBucketVersionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_version.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_version.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CosService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CosService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} bucket := d.Id() @@ -80,11 +81,11 @@ func resourceTencentCloudCosBucketVersionRead(d *schema.ResourceData, meta inter } func resourceTencentCloudCosBucketVersionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_version.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_version.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Id() @@ -93,10 +94,10 @@ func resourceTencentCloudCosBucketVersionUpdate(d *schema.ResourceData, meta int request.Status = v.(string) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Bucket.PutVersioning(ctx, &request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Bucket.PutVersioning(ctx, &request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%+v], response status [%s]\n", logId, "PutVersioning", request, result.Status) } @@ -111,8 +112,8 @@ func resourceTencentCloudCosBucketVersionUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudCosBucketVersionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_bucket_version.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_bucket_version.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cos_bucket_version_test.go b/tencentcloud/services/cos/resource_tc_cos_bucket_version_test.go similarity index 87% rename from tencentcloud/resource_tc_cos_bucket_version_test.go rename to tencentcloud/services/cos/resource_tc_cos_bucket_version_test.go index 713fdb009f..8b5d9a2a09 100644 --- a/tencentcloud/resource_tc_cos_bucket_version_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_version_test.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -11,9 +12,9 @@ func TestAccTencentCloudCosBucketVersionResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCosBucketVersion, @@ -40,7 +41,7 @@ func TestAccTencentCloudCosBucketVersionResource_basic(t *testing.T) { const testAccCosBucketVersionVar = ` variable "bucket" { - default = "` + defaultCiBucket + `" + default = "` + tcacctest.DefaultCiBucket + `" } ` diff --git a/tencentcloud/resource_tc_cos_object_abort_multipart_upload_operation.go b/tencentcloud/services/cos/resource_tc_cos_object_abort_multipart_upload_operation.go similarity index 64% rename from tencentcloud/resource_tc_cos_object_abort_multipart_upload_operation.go rename to tencentcloud/services/cos/resource_tc_cos_object_abort_multipart_upload_operation.go index 4bdded2107..25e2b401bb 100644 --- a/tencentcloud/resource_tc_cos_object_abort_multipart_upload_operation.go +++ b/tencentcloud/services/cos/resource_tc_cos_object_abort_multipart_upload_operation.go @@ -1,13 +1,14 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "log" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudCosObjectAbortMultipartUploadOperation() *schema.Resource { +func ResourceTencentCloudCosObjectAbortMultipartUploadOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCosObjectAbortMultipartUploadOperationCreate, Read: resourceTencentCloudCosObjectAbortMultipartUploadOperationRead, @@ -37,15 +38,15 @@ func resourceTencentCloudCosObjectAbortMultipartUploadOperation() *schema.Resour } func resourceTencentCloudCosObjectAbortMultipartUploadOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_object_abort_multipart_upload_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_object_abort_multipart_upload_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Get("bucket").(string) key := d.Get("key").(string) uploadId := d.Get("upload_id").(string) - _, err := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Object.AbortMultipartUpload(ctx, key, uploadId) + _, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Object.AbortMultipartUpload(ctx, key, uploadId) if err != nil { log.Printf("[CRITAL]%s AbortMultipartUpload failed, reason:%+v", logId, err) return err @@ -57,15 +58,15 @@ func resourceTencentCloudCosObjectAbortMultipartUploadOperationCreate(d *schema. } func resourceTencentCloudCosObjectAbortMultipartUploadOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_object_abort_multipart_upload_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_object_abort_multipart_upload_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCosObjectAbortMultipartUploadOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_object_abort_multipart_upload_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_object_abort_multipart_upload_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cos_object_copy_operation.go b/tencentcloud/services/cos/resource_tc_cos_object_copy_operation.go similarity index 61% rename from tencentcloud/resource_tc_cos_object_copy_operation.go rename to tencentcloud/services/cos/resource_tc_cos_object_copy_operation.go index bafeae97b1..fb513d0be4 100644 --- a/tencentcloud/resource_tc_cos_object_copy_operation.go +++ b/tencentcloud/services/cos/resource_tc_cos_object_copy_operation.go @@ -1,13 +1,14 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "log" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudCosObjectCopyOperation() *schema.Resource { +func ResourceTencentCloudCosObjectCopyOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCosObjectCopyOperationCreate, Read: resourceTencentCloudCosObjectCopyOperationRead, @@ -37,35 +38,35 @@ func resourceTencentCloudCosObjectCopyOperation() *schema.Resource { } func resourceTencentCloudCosObjectCopyOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_object_copy_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_object_copy_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Get("bucket").(string) key := d.Get("key").(string) sourceURL := d.Get("source_url").(string) - _, _, err := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Object.Copy(ctx, key, sourceURL, nil) + _, _, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Object.Copy(ctx, key, sourceURL, nil) if err != nil { log.Printf("[CRITAL]%s Restore failed, reason:%+v", logId, err) return err } - d.SetId(bucket + FILED_SP + key) + d.SetId(bucket + tccommon.FILED_SP + key) return resourceTencentCloudCosObjectCopyOperationRead(d, meta) } func resourceTencentCloudCosObjectCopyOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_object_copy_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_object_copy_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCosObjectCopyOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_object_copy_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_object_copy_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cos_object_copy_operation_test.go b/tencentcloud/services/cos/resource_tc_cos_object_copy_operation_test.go similarity index 77% rename from tencentcloud/resource_tc_cos_object_copy_operation_test.go rename to tencentcloud/services/cos/resource_tc_cos_object_copy_operation_test.go index fc13824e8b..2cc60b6001 100644 --- a/tencentcloud/resource_tc_cos_object_copy_operation_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_object_copy_operation_test.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -9,8 +10,8 @@ import ( func TestAccTencentCloudCosObjectCopyOperationResource(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCosObjectCopyOperation, diff --git a/tencentcloud/resource_tc_cos_object_download_operation.go b/tencentcloud/services/cos/resource_tc_cos_object_download_operation.go similarity index 66% rename from tencentcloud/resource_tc_cos_object_download_operation.go rename to tencentcloud/services/cos/resource_tc_cos_object_download_operation.go index d634f67e30..e97d5a5b4f 100644 --- a/tencentcloud/resource_tc_cos_object_download_operation.go +++ b/tencentcloud/services/cos/resource_tc_cos_object_download_operation.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "io" "log" @@ -9,7 +10,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudCosObjectDownloadOperation() *schema.Resource { +func ResourceTencentCloudCosObjectDownloadOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCosObjectDownloadOperationCreate, Read: resourceTencentCloudCosObjectDownloadOperationRead, @@ -39,15 +40,15 @@ func resourceTencentCloudCosObjectDownloadOperation() *schema.Resource { } func resourceTencentCloudCosObjectDownloadOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_object_download_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_object_download_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Get("bucket").(string) key := d.Get("key").(string) downloadPath := d.Get("download_path").(string) - resp, err := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Object.Get(ctx, key, nil) + resp, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Object.Get(ctx, key, nil) if err != nil { log.Printf("[CRITAL]%s object download failed, reason:%+v", logId, err) return err @@ -65,21 +66,21 @@ func resourceTencentCloudCosObjectDownloadOperationCreate(d *schema.ResourceData return err } - d.SetId(bucket + FILED_SP + key) + d.SetId(bucket + tccommon.FILED_SP + key) return resourceTencentCloudCosObjectDownloadOperationRead(d, meta) } func resourceTencentCloudCosObjectDownloadOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_object_download_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_object_download_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCosObjectDownloadOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_object_download_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_object_download_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cos_object_download_operation_test.go b/tencentcloud/services/cos/resource_tc_cos_object_download_operation_test.go similarity index 77% rename from tencentcloud/resource_tc_cos_object_download_operation_test.go rename to tencentcloud/services/cos/resource_tc_cos_object_download_operation_test.go index 89784b2fe9..c376b9c3fb 100644 --- a/tencentcloud/resource_tc_cos_object_download_operation_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_object_download_operation_test.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -9,8 +10,8 @@ import ( func TestAccTencentCloudCosObjectDownloadOperationResource(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCosObjectDownloadOperation, diff --git a/tencentcloud/resource_tc_cos_object_restore_operation.go b/tencentcloud/services/cos/resource_tc_cos_object_restore_operation.go similarity index 74% rename from tencentcloud/resource_tc_cos_object_restore_operation.go rename to tencentcloud/services/cos/resource_tc_cos_object_restore_operation.go index 7981b0560d..dd9da0a30d 100644 --- a/tencentcloud/resource_tc_cos_object_restore_operation.go +++ b/tencentcloud/services/cos/resource_tc_cos_object_restore_operation.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "log" @@ -8,7 +9,7 @@ import ( cos "github.com/tencentyun/cos-go-sdk-v5" ) -func resourceTencentCloudCosObjectRestoreOperation() *schema.Resource { +func ResourceTencentCloudCosObjectRestoreOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCosObjectRestoreOperationCreate, Read: resourceTencentCloudCosObjectRestoreOperationRead, @@ -51,11 +52,11 @@ func resourceTencentCloudCosObjectRestoreOperation() *schema.Resource { } func resourceTencentCloudCosObjectRestoreOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_object_restore_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_object_restore_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) bucket := d.Get("bucket").(string) key := d.Get("key").(string) tier := d.Get("tier").(string) @@ -66,27 +67,27 @@ func resourceTencentCloudCosObjectRestoreOperationCreate(d *schema.ResourceData, Tier: tier, }, } - _, err := meta.(*TencentCloudClient).apiV3Conn.UseTencentCosClient(bucket).Object.PostRestore(ctx, key, opt) + _, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTencentCosClient(bucket).Object.PostRestore(ctx, key, opt) if err != nil { log.Printf("[CRITAL]%s Restore failed, reason:%+v", logId, err) return err } - d.SetId(bucket + FILED_SP + key) + d.SetId(bucket + tccommon.FILED_SP + key) return resourceTencentCloudCosObjectRestoreOperationRead(d, meta) } func resourceTencentCloudCosObjectRestoreOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_object_restore_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_object_restore_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCosObjectRestoreOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cos_object_restore_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cos_object_restore_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cos_object_restore_operation_test.go b/tencentcloud/services/cos/resource_tc_cos_object_restore_operation_test.go similarity index 77% rename from tencentcloud/resource_tc_cos_object_restore_operation_test.go rename to tencentcloud/services/cos/resource_tc_cos_object_restore_operation_test.go index 61f3161551..509620e337 100644 --- a/tencentcloud/resource_tc_cos_object_restore_operation_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_object_restore_operation_test.go @@ -1,6 +1,7 @@ -package tencentcloud +package cos_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -9,8 +10,8 @@ import ( func TestAccTencentCloudCosObjectRestoreOperationResource(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCosObjectRestoreOperation, diff --git a/tencentcloud/services/cos/service_tencentcloud_cam.go b/tencentcloud/services/cos/service_tencentcloud_cam.go new file mode 100644 index 0000000000..4c403134c8 --- /dev/null +++ b/tencentcloud/services/cos/service_tencentcloud_cam.go @@ -0,0 +1,1967 @@ +package cos + +import ( + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "context" + "encoding/json" + "fmt" + "log" + "reflect" + "strconv" + "strings" + + cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +type CamService struct { + client *connectivity.TencentCloudClient +} + +func (me *CamService) DescribeRoleById(ctx context.Context, roleId string) (camInstance *cam.RoleInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewDescribeRoleListRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) //to save in extension + result := make([]*cam.RoleInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DescribeRoleList(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + for _, role := range response.Response.List { + if *role.RoleId == roleId { + result = append(result, role) + } + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + + if len(result) == 0 { + return + } + camInstance = result[0] + return +} + +func (me *CamService) DescribeRolesByFilter(ctx context.Context, params map[string]interface{}) (roles []*cam.RoleInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + //need travel + request := cam.NewDescribeRoleListRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + roles = make([]*cam.RoleInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DescribeRoleList(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + + for _, role := range response.Response.List { + if params["role_id"] != nil { + if *role.RoleId != params["role_id"].(string) { + continue + } + } + if params["name"] != nil { + if *role.RoleName != params["name"].(string) { + continue + } + } + if params["description"] != nil { + if *role.Description != params["description"].(string) { + continue + } + } + roles = append(roles, role) + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + return +} + +func (me *CamService) DeleteRoleById(ctx context.Context, roleId string) error { + + logId := tccommon.GetLogId(ctx) + request := cam.NewDeleteRoleRequest() + request.RoleId = &roleId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DeleteRole(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CamService) DeleteRoleByName(ctx context.Context, roleName string) error { + + logId := tccommon.GetLogId(ctx) + request := cam.NewDeleteRoleRequest() + request.RoleName = &roleName + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DeleteRole(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CamService) decodeCamPolicyAttachmentId(id string) (instanceId string, policyId64 uint64, errRet error) { + items := strings.Split(id, "#") + if len(items) != 2 { + return instanceId, policyId64, fmt.Errorf(" id is not exist %s", id) + } + instanceId = items[0] + policyId, e := strconv.Atoi(items[1]) + if e != nil { + errRet = e + return + } + policyId64 = uint64(policyId) + return +} + +func (me *CamService) DescribeRolePolicyAttachmentByName(ctx context.Context, roleName string, params map[string]interface{}) (policyOfRole *cam.AttachedPolicyOfRole, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewListAttachedRolePoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + result := make([]*cam.AttachedPolicyOfRole, 0) + for { + request.Page = &pageStart + request.Rp = &rp + request.RoleName = &roleName + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedRolePolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") || errCode == "InvalidParameter.RoleNotExist" { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + for _, policy := range response.Response.List { + policyName, ok := params["policy_name"] + if ok && *policy.PolicyName == policyName.(string) { + result = append(result, policy) + } + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + + if len(result) == 0 { + return + } + policyOfRole = result[0] + return +} + +func (me *CamService) DescribeRolePolicyAttachmentById(ctx context.Context, rolePolicyAttachmentId string) (policyOfRole *cam.AttachedPolicyOfRole, errRet error) { + logId := tccommon.GetLogId(ctx) + roleId, policyId, e := me.decodeCamPolicyAttachmentId(rolePolicyAttachmentId) + if e != nil { + return nil, e + } + request := cam.NewListAttachedRolePoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + result := make([]*cam.AttachedPolicyOfRole, 0) + for { + request.Page = &pageStart + request.Rp = &rp + request.RoleId = &roleId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedRolePolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") || errCode == "InvalidParameter.RoleNotExist" { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + for _, policy := range response.Response.List { + if *policy.PolicyId == policyId { + result = append(result, policy) + } + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + + if len(result) == 0 { + return + } + policyOfRole = result[0] + return +} + +func (me *CamService) DescribeRolePolicyAttachmentsByFilter(ctx context.Context, params map[string]interface{}) (policyOfRoles []*cam.AttachedPolicyOfRole, errRet error) { + logId := tccommon.GetLogId(ctx) + roleId := params["role_id"].(string) + request := cam.NewListAttachedRolePoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + policyOfRoles = make([]*cam.AttachedPolicyOfRole, 0) + for { + request.Page = &pageStart + request.Rp = &rp + request.RoleId = &roleId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedRolePolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") || errCode == "InvalidParameter.RoleNotExist" { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + for _, policy := range response.Response.List { + if params["policy_id"] != nil { + if *policy.PolicyId != params["policy_id"].(uint64) { + continue + } + } + if params["policy_type"] != nil { + if *policy.PolicyType != params["policy_type"].(string) { + continue + } + } + if params["create_mode"] != nil { + if int(*policy.CreateMode) != params["create_mode"].(int) { + continue + } + } + policyOfRoles = append(policyOfRoles, policy) + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + return +} + +func (me *CamService) DeleteRolePolicyAttachmentByName(ctx context.Context, roleName, policyName string) error { + logId := tccommon.GetLogId(ctx) + request := cam.NewDetachRolePolicyRequest() + request.DetachRoleName = &roleName + request.PolicyName = &policyName + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DetachRolePolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CamService) DeleteRolePolicyAttachmentById(ctx context.Context, rolePolicyAttachmentId string) error { + logId := tccommon.GetLogId(ctx) + roleId, policyId, e := me.decodeCamPolicyAttachmentId(rolePolicyAttachmentId) + if e != nil { + return e + } + request := cam.NewDetachRolePolicyRequest() + request.DetachRoleId = &roleId + request.PolicyId = &policyId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DetachRolePolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CamService) DescribeUserPolicyAttachmentById(ctx context.Context, userPolicyAttachmentId string) (policyResults *cam.AttachPolicyInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + userId, policyId, e := me.decodeCamPolicyAttachmentId(userPolicyAttachmentId) + if e != nil { + return nil, e + } + user, err := me.DescribeUserById(ctx, userId) + if err != nil { + return nil, err + } + if user == nil || user.Response == nil || user.Response.Uid == nil { + return + } + uin := user.Response.Uin + + request := cam.NewListAttachedUserPoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + result := make([]*cam.AttachPolicyInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + request.TargetUin = uin + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedUserPolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + for _, policy := range response.Response.List { + if *policy.PolicyId == policyId { + result = append(result, policy) + } + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + + if len(result) == 0 { + return + } + policyResults = result[0] + return +} + +func (me *CamService) DescribeUserPolicyAttachmentsByFilter(ctx context.Context, params map[string]interface{}) (policyResults []*cam.AttachPolicyInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + userId := params["user_id"].(string) + user, err := me.DescribeUserById(ctx, userId) + if err != nil { + return nil, err + } + if user == nil || user.Response == nil || user.Response.Uid == nil { + return + } + uin := user.Response.Uin + request := cam.NewListAttachedUserPoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + policyResults = make([]*cam.AttachPolicyInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + request.TargetUin = uin + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedUserPolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + for _, policy := range response.Response.List { + if params["policy_id"] != nil { + if *policy.PolicyId != params["policy_id"].(uint64) { + continue + } + } + if params["policy_type"] != nil { + if *policy.PolicyType != params["policy_type"].(string) { + continue + } + } + if params["create_mode"] != nil { + if int(*policy.CreateMode) != params["create_mode"].(int) { + continue + } + } + policyResults = append(policyResults, policy) + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + return +} + +func (me *CamService) AddUserPolicyAttachment(ctx context.Context, userId string, policyId string) error { + logId := tccommon.GetLogId(ctx) + + user, err := me.DescribeUserById(ctx, userId) + if err != nil { + return err + } + if user == nil || user.Response == nil || user.Response.Uid == nil { + return nil + } + uin := user.Response.Uin + policyIdInt, e := strconv.Atoi(policyId) + if e != nil { + return e + } + policyIdInt64 := uint64(policyIdInt) + request := cam.NewAttachUserPolicyRequest() + request.AttachUin = uin + request.PolicyId = &policyIdInt64 + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().AttachUserPolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CamService) DeleteUserPolicyAttachmentById(ctx context.Context, userPolicyAttachmentId string) error { + logId := tccommon.GetLogId(ctx) + userId, policyId, e := me.decodeCamPolicyAttachmentId(userPolicyAttachmentId) + if e != nil { + return e + } + user, err := me.DescribeUserById(ctx, userId) + if err != nil { + return err + } + if user == nil || user.Response == nil || user.Response.Uid == nil { + return nil + } + uin := user.Response.Uin + + request := cam.NewDetachUserPolicyRequest() + request.DetachUin = uin + request.PolicyId = &policyId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DetachUserPolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CamService) DescribeGroupPolicyAttachmentById(ctx context.Context, groupPolicyAttachmentId string) (policyResults *cam.AttachPolicyInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + groupId, policyId, e := me.decodeCamPolicyAttachmentId(groupPolicyAttachmentId) + if e != nil { + errRet = e + return + } + groupIdInt, ee := strconv.Atoi(groupId) + if ee != nil { + errRet = ee + return + } + groupIdInt64 := uint64(groupIdInt) + request := cam.NewListAttachedGroupPoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + result := make([]*cam.AttachPolicyInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + request.TargetGroupId = &groupIdInt64 + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedGroupPolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + for _, policy := range response.Response.List { + if *policy.PolicyId == policyId { + result = append(result, policy) + } + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + if len(result) == 0 { + return + } + policyResults = result[0] + return +} + +func (me *CamService) DescribeGroupPolicyAttachmentsByFilter(ctx context.Context, params map[string]interface{}) (policyResults []*cam.AttachPolicyInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + groupId := params["group_id"].(string) + groupIdInt, e := strconv.Atoi(groupId) + if e != nil { + errRet = e + return + } + groupIdInt64 := uint64(groupIdInt) + request := cam.NewListAttachedGroupPoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + policyResults = make([]*cam.AttachPolicyInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + request.TargetGroupId = &groupIdInt64 + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedGroupPolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + + for _, policy := range response.Response.List { + if params["policy_id"] != nil { + if *policy.PolicyId != params["policy_id"].(uint64) { + continue + } + } + if params["policy_type"] != nil { + if *policy.PolicyType != params["policy_type"].(string) { + continue + } + } + if params["create_mode"] != nil { + if int(*policy.CreateMode) != params["create_mode"].(int) { + continue + } + } + policyResults = append(policyResults, policy) + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + return +} + +func (me *CamService) AddGroupPolicyAttachment(ctx context.Context, groupId string, policyId string) error { + logId := tccommon.GetLogId(ctx) + + groupIdInt, e := strconv.Atoi(groupId) + if e != nil { + return e + } + groupIdInt64 := uint64(groupIdInt) + policyIdInt, ee := strconv.Atoi(policyId) + if ee != nil { + return ee + } + policyIdInt64 := uint64(policyIdInt) + + request := cam.NewAttachGroupPolicyRequest() + request.AttachGroupId = &groupIdInt64 + request.PolicyId = &policyIdInt64 + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().AttachGroupPolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CamService) DeleteGroupPolicyAttachmentById(ctx context.Context, groupPolicyAttachmentId string) error { + logId := tccommon.GetLogId(ctx) + groupId, policyId, e := me.decodeCamPolicyAttachmentId(groupPolicyAttachmentId) + if e != nil { + return e + } + groupIdInt, ee := strconv.Atoi(groupId) + if ee != nil { + return ee + } + groupIdInt64 := uint64(groupIdInt) + + request := cam.NewDetachGroupPolicyRequest() + request.DetachGroupId = &groupIdInt64 + request.PolicyId = &policyId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DetachGroupPolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return nil +} + +func (me *CamService) DescribePolicyById(ctx context.Context, policyId string) (result *cam.GetPolicyResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewGetPolicyRequest() + policyIdInt, e := strconv.Atoi(policyId) + if e != nil { + errRet = e + return + } + policyIdInt64 := uint64(policyIdInt) + request.PolicyId = &policyIdInt64 + result, err := me.client.UseCamClient().GetPolicy(request) + + if err != nil { + log.Printf("[CRITAL]%s read CAM policy failed, reason:%s\n", logId, err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + return nil, err + } else { + if result == nil || result.Response == nil || result.Response.PolicyName == nil { + return + } + } + + return +} + +func (me *CamService) DescribePoliciesByFilter(ctx context.Context, params map[string]interface{}) (policies []*cam.StrategyInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + policyId := -1 + policyName := "" + //notice this policy type is different from the policy attachment, this sdk returns int while the attachments returns string + policyType := -1 + description := "" + createMode := -1 + + request := cam.NewListPoliciesRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + + for k, v := range params { + if k == "policy_id" { + policyId = v.(int) + } + if k == "name" { + policyName = v.(string) + } + if k == "type" { + policyType = v.(int) + } + if k == "description" { + description = v.(string) + } + if k == "create_mode" { + createMode = v.(int) + } + } + policies = make([]*cam.StrategyInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListPolicies(request) + if err != nil { + log.Printf("[CRITAL]%s read CAM policy failed, reason:%s\n", logId, err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + for _, policy := range response.Response.List { + if policyId != -1 { + if int(*policy.PolicyId) != policyId { + continue + } + } + if policyName != "" { + if *policy.PolicyName != policyName { + continue + } + } + if policyType != -1 { + if int(*policy.Type) != policyType { + continue + } + } + if description != "" { + if *policy.Description != description { + continue + } + } + if createMode != -1 { + if int(*policy.CreateMode) != createMode { + continue + } + } + policies = append(policies, policy) + } + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + return +} + +func (me *CamService) DescribeUserById(ctx context.Context, userId string) (response *cam.GetUserResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewGetUserRequest() + request.Name = &userId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().GetUser(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + 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 +} + +func (me *CamService) DescribeUsersByFilter(ctx context.Context, params map[string]interface{}) (result []*cam.SubAccountInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewListUsersRequest() + + result = make([]*cam.SubAccountInfo, 0) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListUsers(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + for _, user := range response.Response.Data { + if params["name"] != nil { + if params["name"].(string) != *user.Name { + continue + } + } + if params["remark"] != nil { + if user.Remark != nil { + if params["remark"].(string) != *user.Remark { + continue + } + } else { + continue + } + } + if params["phone_num"] != nil { + if user.PhoneNum != nil { + if params["phone_num"].(string) != *user.PhoneNum { + continue + } + } else { + continue + } + } + if params["country_code"] != nil { + if user.CountryCode != nil { + if params["country_code"].(string) != *user.CountryCode { + continue + } + } else { + continue + } + } + if params["email"] != nil { + if user.Email != nil { + if params["email"].(string) != *user.Email { + continue + } + } else { + continue + } + } + if params["uin"] != nil { + if user.Uin != nil { + if params["uin"].(int) != int(*user.Uin) { + continue + } + } else { + continue + } + } + if params["uid"] != nil { + if user.Uid != nil { + if params["uid"].(int) != int(*user.Uid) { + continue + } + } else { + continue + } + } + if params["console_login"] != nil { + if user.ConsoleLogin != nil { + if params["console_login"].(int) != int(*user.ConsoleLogin) { + continue + } + } else { + continue + } + } + result = append(result, user) + } + + return +} + +func (me *CamService) DescribeGroupById(ctx context.Context, groupId string) (camInstance *cam.GetGroupResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewGetGroupRequest() + groupIdInt, e := strconv.Atoi(groupId) + if e != nil { + errRet = e + return + } + groupIdInt64 := uint64(groupIdInt) + request.GroupId = &groupIdInt64 + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().GetGroup(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + camInstance = response + return +} + +func (me *CamService) DescribeGroupsByFilter(ctx context.Context, params map[string]interface{}) (groups []*cam.GroupInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewListGroupsRequest() + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + groups = make([]*cam.GroupInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListGroups(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.GroupInfo) < 1 { + break + } + for _, group := range response.Response.GroupInfo { + if params["group_id"] != nil { + if int(*group.GroupId) != params["group_id"].(int) { + continue + } + } + if params["name"] != nil { + if *group.GroupName != params["name"].(string) { + continue + } + } + if params["remark"] != nil { + if group.Remark == nil || (group.Remark != nil && *group.Remark != params["remark"].(string)) { + continue + } + log.Printf("in") + } + groups = append(groups, group) + } + if len(response.Response.GroupInfo) < PAGE_ITEM { + break + } + pageStart += 1 + } + return +} + +func (me *CamService) DescribeGroupMembershipById(ctx context.Context, groupId string) (members []*string, errRet error) { + logId := tccommon.GetLogId(ctx) + groupIdInt, e := strconv.Atoi(groupId) + if e != nil { + errRet = e + return + } + groupIdInt64 := uint64(groupIdInt) + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) + members = make([]*string, 0) + request := cam.NewListUsersForGroupRequest() + request.GroupId = &groupIdInt64 + for { + request.Page = &pageStart + request.Rp = &rp + response, err := me.client.UseCamClient().ListUsersForGroup(request) + if err != nil { + log.Printf("[CRITAL]%s read CAM group membership failed, reason:%s\n", logId, err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + + if response == nil || len(response.Response.UserInfo) < 1 { + break + } + for _, member := range response.Response.UserInfo { + + members = append(members, member.Name) + } + if len(response.Response.UserInfo) < PAGE_ITEM { + break + } + pageStart += 1 + } + return +} + +func (me *CamService) DescribeSAMLProviderById(ctx context.Context, providerName string) (result *cam.GetSAMLProviderResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cam.NewGetSAMLProviderRequest() + request.Name = &providerName + result, err := me.client.UseCamClient().GetSAMLProvider(request) + + if err != nil { + log.Printf("[CRITAL]%s read cam SAML provider failed, reason:%s\n", logId, err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + return nil, err + } else { + if result == nil || result.Response == nil || result.Response.Name == nil { + return + } + } + + return +} + +func (me *CamService) DescribeSAMLProvidersByFilter(ctx context.Context, params map[string]interface{}) (providers []*cam.SAMLProviderInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + name := "" + description := "" + + request := cam.NewListSAMLProvidersRequest() + + for k, v := range params { + if k == "name" { + name = v.(string) + } + if k == "description" { + description = v.(string) + } + } + providers = make([]*cam.SAMLProviderInfo, 0) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListSAMLProviders(request) + if err != nil { + log.Printf("[CRITAL]%s read CAM SAML provider failed, reason:%s\n", logId, err.Error()) + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + errCode := ee.GetCode() + //check if read empty + if strings.Contains(errCode, "ResourceNotFound") { + return + } + } + errRet = err + return + } + for _, provider := range response.Response.SAMLProviderSet { + if name != "" { + if *provider.Name != name { + continue + } + } + if description != "" { + if *provider.Description != description { + continue + } + } + providers = append(providers, provider) + } + + return +} + +func (me *CamService) PolicyDocumentForceCheck(document string) error { + + //Policy syntax allows multi formats, but returns with only one format. In this case, the user's input may be different from the output value. To avoid this, terraform must make sure the syntax of the input policy document consists with the syntax of final returned output + type Principal struct { + Qcs []string `json:"qcs"` + } + type Statement struct { + Resource interface{} `json:"resource"` + //to avoid json unmarshal eats up with '/' + Action []json.RawMessage `json:"action"` + Principal Principal `json:"principal"` + } + type Document struct { + Version string `json:"version"` + Statement []Statement `json:"statement"` + } + var documentJson Document + err := json.Unmarshal([]byte(document), &documentJson) + if err != nil { + return err + } + for _, state := range documentJson.Statement { + //multi value case in elemant `resource`, `action`: input:""/[""], output: [""] + if state.Resource != nil { + if reflect.TypeOf(state.Resource) == reflect.TypeOf("string") { + return fmt.Errorf("The format of `resource` in policy document is invalid, its type must be array") + } + } + + if state.Action != nil { + if reflect.TypeOf(state.Action) == reflect.TypeOf("string") { + return fmt.Errorf("The format of `resource` in policy document is invalid, its type must be array") + } + + } + //multi value case in elemant `principal.qcs`:input :root/[uin of the user], output:[uin of the user] + for _, qcs := range state.Principal.Qcs { + if strings.Contains(qcs, "root") { + return fmt.Errorf("`root` format is not supported, please replace it with uin") + } + } + } + return nil +} + +func (me *CamService) DescribeCamServiceLinkedRole(ctx context.Context, roleId string) (serviceLinkedRole *cam.RoleInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewGetRoleRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + request.RoleId = &roleId + + response, err := me.client.UseCamClient().GetRole(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response != nil && response.Response != nil { + serviceLinkedRole = response.Response.RoleInfo + } + + return +} + +func (me *CamService) DeleteCamServiceLinkedRoleById(ctx context.Context, roleId string) (deletionTaskId string, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewDeleteServiceLinkedRoleRequest() + + request.RoleName = &roleId + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().DeleteServiceLinkedRole(request) + if err != nil { + errRet = err + return "", err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response != nil && response.Response != nil { + deletionTaskId = *response.Response.DeletionTaskId + } + return +} + +func (me *CamService) DescribeCamServiceLinkedRoleDeleteStatus(ctx context.Context, deletionTaskId string) (response *cam.GetServiceLinkedRoleDeletionStatusResponse, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewGetServiceLinkedRoleDeletionStatusRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + request.DeletionTaskId = &deletionTaskId + + response, err := me.client.UseCamClient().GetServiceLinkedRoleDeletionStatus(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + 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 +} + +func (me *CamService) DescribeCamUserSamlConfigById(ctx context.Context) (userSamlConfig *cam.DescribeUserSAMLConfigResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewDescribeUserSAMLConfigRequest() + + 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.UseCamClient().DescribeUserSAMLConfig(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()) + + userSamlConfig = response + return +} + +func (me *CamService) DeleteCamUserSamlConfigById(ctx context.Context) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewUpdateUserSAMLConfigRequest() + + 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()) + } + }() + + request.Operate = helper.String("disable") + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCamClient().UpdateUserSAMLConfig(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 +} + +func (me *CamService) DescribeCamMfaFlagById(ctx context.Context, id uint64) (loginFlag *cam.LoginActionFlag, actionFlag *cam.LoginActionFlag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewDescribeSafeAuthFlagCollRequest() + request.SubUin = &id + 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.UseCamClient().DescribeSafeAuthFlagColl(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()) + + if response == nil || response.Response == nil || response.Response.ActionFlag == nil && response.Response.LoginFlag == nil { + return + } + + loginFlag = response.Response.LoginFlag + actionFlag = response.Response.ActionFlag + return +} + +func (me *CamService) DescribeCamAccessKeyById(ctx context.Context, targetUin uint64, accessKey string) (AccessKey *cam.AccessKey, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewListAccessKeysRequest() + request.TargetUin = &targetUin + + 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.UseCamClient().ListAccessKeys(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()) + + if response == nil || response.Response == nil || len(response.Response.AccessKeys) < 1 { + return + } + + for _, v := range response.Response.AccessKeys { + if *v.AccessKeyId == accessKey { + AccessKey = v + } + } + return +} + +func (me *CamService) DeleteCamAccessKeyById(ctx context.Context, uin, accessKeyId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewDeleteAccessKeyRequest() + request.AccessKeyId = &accessKeyId + request.TargetUin = helper.StrToUint64Point(uin) + 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.UseCamClient().DeleteAccessKey(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 +} + +func (me *CamService) DescribeCamUserPermissionBoundaryById(ctx context.Context, targetUin string) (UserPermissionBoundary *cam.GetUserPermissionBoundaryResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewGetUserPermissionBoundaryRequest() + request.TargetUin = helper.StrToInt64Point(targetUin) + + 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.UseCamClient().GetUserPermissionBoundary(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()) + + if response == nil { + return + } + + UserPermissionBoundary = response + return +} + +func (me *CamService) DeleteCamUserPermissionBoundaryById(ctx context.Context, targetUin string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewDeleteUserPermissionsBoundaryRequest() + request.TargetUin = helper.StrToInt64Point(targetUin) + + 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.UseCamClient().DeleteUserPermissionsBoundary(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 +} + +func (me *CamService) DescribeCamPolicyVersionById(ctx context.Context, policyId uint64, versionId uint64) (policyVersion *cam.PolicyVersionDetail, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewGetPolicyVersionRequest() + request.PolicyId = &policyId + request.VersionId = &versionId + + 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.UseCamClient().GetPolicyVersion(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()) + + if response == nil || response.Response == nil || response.Response.PolicyVersion == nil { + return + } + + policyVersion = response.Response.PolicyVersion + return +} + +func (me *CamService) DeleteCamPolicyVersionById(ctx context.Context, policyId uint64, versionId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewDeletePolicyVersionRequest() + request.PolicyId = &policyId + request.VersionId = []*uint64{helper.Uint64(versionId)} + + 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.UseCamClient().DeletePolicyVersion(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 +} + +func (me *CamService) DescribeCamListEntitiesForPolicyByFilter(ctx context.Context, param map[string]interface{}) (ListEntitiesForPolicy []*cam.AttachEntityOfPolicy, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewListEntitiesForPolicyRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "PolicyId" { + request.PolicyId = v.(*uint64) + } + if k == "Rp" { + request.Rp = v.(*uint64) + } + if k == "EntityFilter" { + request.EntityFilter = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) //to save in extension + result := make([]*cam.AttachEntityOfPolicy, 0) + for { + request.Page = &pageStart + request.Rp = &rp + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListEntitiesForPolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.List) < 1 { + break + } + result = append(result, response.Response.List...) + if len(response.Response.List) < PAGE_ITEM { + break + } + pageStart += 1 + } + ListEntitiesForPolicy = result + return +} + +func (me *CamService) DescribeCamListAttachedUserPolicyByFilter(ctx context.Context, param map[string]interface{}) (ListAttachedUserPolicy []*cam.AttachedUserPolicy, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewListAttachedUserAllPoliciesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "TargetUin" { + request.TargetUin = v.(*uint64) + } + if k == "AttachType" { + request.AttachType = v.(*uint64) + } + if k == "StrategyType" { + request.StrategyType = v.(*uint64) + } + if k == "Keyword" { + request.Keyword = v.(*string) + } + } + + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) //to save in extension + result := make([]*cam.AttachedUserPolicy, 0) + for { + request.Page = &pageStart + request.Rp = &rp + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCamClient().ListAttachedUserAllPolicies(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()) + + if response == nil || len(response.Response.PolicyList) < 1 { + break + } + result = append(result, response.Response.PolicyList...) + if len(response.Response.PolicyList) < PAGE_ITEM { + break + } + + pageStart += 1 + } + ListAttachedUserPolicy = result + return +} + +func (me *CamService) DescribeCamTagRoleById(ctx context.Context, roleName, roleId string) (TagRole *cam.RoleInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewGetRoleRequest() + if roleName == "" { + request.RoleId = &roleId + } else { + request.RoleName = &roleName + } + 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.UseCamClient().GetRole(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()) + + if response == nil || response.Response == nil || response.Response.RoleInfo == nil { + return + } + TagRole = response.Response.RoleInfo + return +} + +func (me *CamService) DeleteCamTagRoleById(ctx context.Context, roleName, roleId string, keys []*string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewUntagRoleRequest() + if roleName == "" { + request.RoleId = &roleId + } else { + request.RoleName = &roleName + } + request.TagKeys = keys + 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.UseCamClient().UntagRole(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 +} + +func (me *CamService) DescribeCamRolePermissionBoundaryAttachmentById(ctx context.Context, roleId string, policyId string) (RolePermissionBoundaryAttachment *cam.GetRolePermissionBoundaryResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewGetRolePermissionBoundaryRequest() + request.RoleId = &roleId + + 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.UseCamClient().GetRolePermissionBoundary(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()) + if response == nil || response.Response == nil { + return + } + if *response.Response.PolicyId != helper.StrToInt64(policyId) { + return + } + RolePermissionBoundaryAttachment = response.Response + return +} + +func (me *CamService) DeleteCamRolePermissionBoundaryAttachmentById(ctx context.Context, roleId string, roleName string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewDeleteRolePermissionsBoundaryRequest() + if roleId == "" { + request.RoleName = &roleName + } else { + request.RoleId = &roleId + } + 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.UseCamClient().DeleteRolePermissionsBoundary(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 +} + +func (me *CamService) DescribeCamSecretLastUsedTimeByFilter(ctx context.Context, param map[string]interface{}) (SecretLastUsedTime []*cam.SecretIdLastUsed, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewGetSecurityLastUsedRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "SecretIdList" { + request.SecretIdList = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCamClient().GetSecurityLastUsed(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()) + + if response == nil || response.Response == nil || len(response.Response.SecretIdLastUsedRows) < 1 { + return + } + SecretLastUsedTime = append(SecretLastUsedTime, response.Response.SecretIdLastUsedRows...) + return +} + +func (me *CamService) DescribeCamPolicyGrantingServiceAccessByFilter(ctx context.Context, param map[string]interface{}) (PolicyGrantingServiceAccess []*cam.ListGrantServiceAccessNode, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewListPoliciesGrantingServiceAccessRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "TargetUin" { + request.TargetUin = v.(*uint64) + } + if k == "RoleId" { + request.RoleId = v.(*uint64) + } + if k == "GroupId" { + request.GroupId = v.(*uint64) + } + if k == "ServiceType" { + request.ServiceType = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCamClient().ListPoliciesGrantingServiceAccess(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()) + + if response == nil || response.Response == nil || len(response.Response.List) < 1 { + return + } + PolicyGrantingServiceAccess = response.Response.List + return +} + +func (me *CamService) DescribeCamSetPolicyVersionById(ctx context.Context, policyId, versionId string) (SetPolicyVersion *cam.PolicyVersionItem, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cam.NewListPolicyVersionsRequest() + request.PolicyId = helper.StrToUint64Point(policyId) + + 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.UseCamClient().ListPolicyVersions(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()) + + if response == nil || response.Response == nil || len(response.Response.Versions) < 1 { + return + } + for _, v := range response.Response.Versions { + if *v.IsDefaultVersion == int64(1) && *v.VersionId == helper.StrToUInt64(versionId) { + SetPolicyVersion = v + } + } + + return +} + +func (me *CamService) DescribeCamAccountSummaryByFilter(ctx context.Context) (AccountSummary *cam.GetAccountSummaryResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewGetAccountSummaryRequest() + ) + + 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.UseCamClient().GetAccountSummary(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()) + + if response == nil || response.Response == nil { + return + } + AccountSummary = response.Response + return +} + +func (me *CamService) DescribeCamGroupUserAccountByFilter(ctx context.Context, param map[string]interface{}) (GroupUserAccount []*cam.GroupInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cam.NewListGroupsForUserRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Uid" { + request.Uid = v.(*uint64) + } + if k == "SubUin" { + request.SubUin = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + pageStart := uint64(1) + rp := uint64(PAGE_ITEM) //to save in extension + result := make([]*cam.GroupInfo, 0) + for { + request.Page = &pageStart + request.Rp = &rp + response, err := me.client.UseCamClient().ListGroupsForUser(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()) + + if response == nil || len(response.Response.GroupInfo) < 1 { + break + } + result = append(result, response.Response.GroupInfo...) + if len(response.Response.GroupInfo) < PAGE_ITEM { + break + } + + pageStart += 1 + } + GroupUserAccount = result + return +} diff --git a/tencentcloud/service_tencentcloud_cos.go b/tencentcloud/services/cos/service_tencentcloud_cos.go similarity index 95% rename from tencentcloud/service_tencentcloud_cos.go rename to tencentcloud/services/cos/service_tencentcloud_cos.go index ea019157aa..d839a5ac52 100644 --- a/tencentcloud/service_tencentcloud_cos.go +++ b/tencentcloud/services/cos/service_tencentcloud_cos.go @@ -1,4 +1,4 @@ -package tencentcloud +package cos import ( "bytes" @@ -10,6 +10,8 @@ import ( "net/http" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/beevik/etree" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -19,11 +21,16 @@ import ( "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/service/s3" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) +func NewCosService(client *connectivity.TencentCloudClient) CosService { + return CosService{client: client} +} + type CosService struct { client *connectivity.TencentCloudClient } @@ -41,7 +48,7 @@ const ( const PUBLIC_GRANTEE = "http://cam.qcloud.com/groups/global/AllUsers" func (me *CosService) HeadObject(ctx context.Context, bucket, key string) (info *s3.HeadObjectOutput, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.HeadObjectInput{ Bucket: aws.String(bucket), @@ -63,7 +70,7 @@ func (me *CosService) HeadObject(ctx context.Context, bucket, key string) (info } func (me *CosService) DeleteObject(ctx context.Context, bucket, key string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.DeleteObjectInput{ Bucket: aws.String(bucket), @@ -89,7 +96,7 @@ func (me *CosService) DeleteObject(ctx context.Context, bucket, key string) (err } func (me *CosService) PutObjectAcl(ctx context.Context, bucket, key, acl string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.PutObjectAclInput{ Bucket: aws.String(bucket), @@ -117,7 +124,7 @@ func (me *CosService) PutObjectAcl(ctx context.Context, bucket, key, acl string) // PutBucket - base on aws s3 func (me *CosService) PutBucket(ctx context.Context, bucket, acl string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.CreateBucketInput{ Bucket: aws.String(bucket), @@ -144,7 +151,7 @@ func (me *CosService) PutBucket(ctx context.Context, bucket, acl string) (errRet // TencentCosPutBucket - To support MAZ config, We use tencentcloud cos sdk instead of aws s3 func (me *CosService) TencentCosPutBucket(ctx context.Context, bucket string, opt *cos.BucketPutOptions) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) req, _ := json.Marshal(opt) @@ -172,7 +179,7 @@ func (me *CosService) TencentCosPutBucket(ctx context.Context, bucket string, op } func (me *CosService) TencentCosBucketGetLocation(ctx context.Context, bucket string, opt *cos.BucketPutOptions) (location string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) req, _ := json.Marshal(opt) @@ -204,7 +211,7 @@ func (me *CosService) TencentCosPutBucketACLBody( reqBody string, header string, ) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) acl := &cos.ACLXml{} @@ -249,7 +256,7 @@ func (me *CosService) TencentCosPutBucketACLBody( } func (me *CosService) HeadBucket(ctx context.Context, bucket string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.HeadBucketInput{ Bucket: aws.String(bucket), @@ -270,7 +277,7 @@ func (me *CosService) HeadBucket(ctx context.Context, bucket string) (errRet err } func (me *CosService) TencentcloudHeadBucket(ctx context.Context, bucket string) (code int, header http.Header, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) response, err := me.client.UseTencentCosClient(bucket).Bucket.Head(ctx) @@ -293,7 +300,7 @@ func (me *CosService) TencentcloudHeadBucket(ctx context.Context, bucket string) } func (me *CosService) DeleteBucket(ctx context.Context, bucket string, forced bool, versioned bool) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) if forced { log.Printf("[DEBUG]%s api[%s] triggered, bucket [%s], versioned [%v]\n", @@ -321,7 +328,7 @@ func (me *CosService) DeleteBucket(ctx context.Context, bucket string, forced bo } func (me *CosService) ForceCleanObject(ctx context.Context, bucket string, versioned bool) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) // Get the object list of bucket with all versions verOpt := cos.BucketGetObjectVersionsOptions{} @@ -390,7 +397,7 @@ func (me *CosService) ForceCleanObject(ctx context.Context, bucket string, versi log.Printf("[CRITAL]%s api[%s] it still [%v] objects have not been removed, need try DeleteMulti again.\n", logId, "DeleteMulti", len(result.Errors)) - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { unDelObjs := make([]cos.Object, 0, len(result.Errors)) for _, v := range result.Errors { unDelObjs = append(unDelObjs, cos.Object{ @@ -407,7 +414,7 @@ func (me *CosService) ForceCleanObject(ctx context.Context, bucket string, versi if err != nil { log.Printf("[CRITAL][retry]%s api[%s] fail, resp body [%s], reason[%s]\n", logId, "DeleteMulti ", resp.Body, err.Error()) - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } if len(result.Errors) > 0 { return resource.RetryableError(fmt.Errorf("[CRITAL][retry]%s api[%s] it still %v objects have not been removed, need try DeleteMulti again.\n", @@ -425,7 +432,7 @@ func (me *CosService) ForceCleanObject(ctx context.Context, bucket string, versi } func (me *CosService) GetBucketCors(ctx context.Context, bucket string) (corsRules []map[string]interface{}, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.GetBucketCorsInput{ Bucket: aws.String(bucket), @@ -469,7 +476,7 @@ func (me *CosService) GetBucketCors(ctx context.Context, bucket string) (corsRul } func (me *CosService) GetBucketLifecycle(ctx context.Context, bucket string) (lifecycleRules []map[string]interface{}, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.GetBucketLifecycleConfigurationInput{ Bucket: aws.String(bucket), @@ -572,7 +579,7 @@ func (me *CosService) GetBucketLifecycle(ctx context.Context, bucket string) (li } func (me *CosService) GetDataSourceBucketLifecycle(ctx context.Context, bucket string) (lifecycleRules []map[string]interface{}, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.GetBucketLifecycleConfigurationInput{ Bucket: aws.String(bucket), @@ -668,7 +675,7 @@ func (me *CosService) GetDataSourceBucketLifecycle(ctx context.Context, bucket s } func (me *CosService) GetBucketWebsite(ctx context.Context, bucket string) (websites []map[string]interface{}, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.GetBucketWebsiteInput{ Bucket: aws.String(bucket), @@ -705,7 +712,7 @@ func (me *CosService) GetBucketWebsite(ctx context.Context, bucket string) (webs } func (me *CosService) GetBucketEncryption(ctx context.Context, bucket string) (encryption string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.GetBucketEncryptionInput{ Bucket: aws.String(bucket), @@ -733,7 +740,7 @@ func (me *CosService) GetBucketEncryption(ctx context.Context, bucket string) (e } func (me *CosService) GetBucketVersioning(ctx context.Context, bucket string) (versioningEnable bool, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.GetBucketVersioningInput{ Bucket: aws.String(bucket), @@ -764,7 +771,7 @@ func (me *CosService) GetBucketVersioning(ctx context.Context, bucket string) (v } func (me *CosService) GetBucketAccleration(ctx context.Context, bucket string) (accelerationEnable bool, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.GetBucketAccelerateConfigurationInput{ Bucket: aws.String(bucket), @@ -795,7 +802,7 @@ func (me *CosService) GetBucketAccleration(ctx context.Context, bucket string) ( } func (me *CosService) GetBucketLogStatus(ctx context.Context, bucket string) (logEnable bool, logTargetBucket string, logPrefix string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.GetBucketLoggingInput{ Bucket: aws.String(bucket), @@ -824,7 +831,7 @@ func (me *CosService) GetBucketLogStatus(ctx context.Context, bucket string) (lo } func (me *CosService) ListBuckets(ctx context.Context) (buckets []*s3.Bucket, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.ListBucketsInput{} ratelimit.Check("ListBuckets") @@ -843,7 +850,7 @@ func (me *CosService) ListBuckets(ctx context.Context) (buckets []*s3.Bucket, er } func (me *CosService) ListObjects(ctx context.Context, bucket string) (objects []*s3.Object, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.ListObjectsInput{ Bucket: aws.String(bucket), @@ -865,7 +872,7 @@ func (me *CosService) ListObjects(ctx context.Context, bucket string) (objects [ // SetBucketTags if len(tags) == 0, only delete tags func (me *CosService) SetBucketTags(ctx context.Context, bucket string, tags map[string]string) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) deleteReq := &s3.DeleteBucketTaggingInput{Bucket: aws.String(bucket)} @@ -913,7 +920,7 @@ func (me *CosService) SetBucketTags(ctx context.Context, bucket string, tags map } func (me *CosService) GetBucketTags(ctx context.Context, bucket string) (map[string]string, error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) req := &s3.GetBucketTaggingInput{Bucket: aws.String(bucket)} @@ -942,7 +949,7 @@ func (me *CosService) GetBucketTags(ctx context.Context, bucket string) (map[str } func (me *CosService) GetObjectTags(ctx context.Context, bucket string, key string) (map[string]string, error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) req := &s3.GetObjectTaggingInput{ Bucket: &bucket, @@ -975,7 +982,7 @@ func (me *CosService) GetObjectTags(ctx context.Context, bucket string, key stri // SetObjectTags same as delete Bucket Tags func (me *CosService) SetObjectTags(ctx context.Context, bucket string, key string, tags map[string]string) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) deleteReq := &s3.DeleteObjectTaggingInput{ Bucket: aws.String(bucket), @@ -1027,7 +1034,7 @@ func (me *CosService) SetObjectTags(ctx context.Context, bucket string, key stri } func (me *CosService) PutBucketPolicy(ctx context.Context, bucket, policy string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.PutBucketPolicyInput{ Bucket: &bucket, @@ -1053,7 +1060,7 @@ func (me *CosService) PutBucketPolicy(ctx context.Context, bucket, policy string } func (me *CosService) DescribePolicyByBucket(ctx context.Context, bucket string) (bucketPolicy string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.GetBucketPolicyInput{Bucket: aws.String(bucket)} ratelimit.Check("GetBucketPolicy") @@ -1071,7 +1078,7 @@ func (me *CosService) DescribePolicyByBucket(ctx context.Context, bucket string) } func (me *CosService) DeleteBucketPolicy(ctx context.Context, bucket string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := s3.DeleteBucketPolicyInput{ Bucket: aws.String(bucket), @@ -1090,7 +1097,7 @@ func (me *CosService) DeleteBucketPolicy(ctx context.Context, bucket string) (er } func (me *CosService) GetBucketACL(ctx context.Context, bucket string) (result *cos.BucketGetACLResult, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { @@ -1149,7 +1156,7 @@ func GetBucketPublicACL(acl *cos.BucketGetACLResult) string { } func (me *CosService) GetBucketPullOrigin(ctx context.Context, bucket string) (result []map[string]interface{}, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { @@ -1231,7 +1238,7 @@ func (me *CosService) GetBucketPullOrigin(ctx context.Context, bucket string) (r } func (me *CosService) PutBucketPullOrigin(ctx context.Context, bucket string, rules []cos.BucketOriginRule) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) opt := &cos.BucketPutOriginOptions{ Rule: rules, @@ -1260,7 +1267,7 @@ func (me *CosService) PutBucketPullOrigin(ctx context.Context, bucket string, ru } func (me *CosService) DeleteBucketPullOrigin(ctx context.Context, bucket string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { @@ -1285,7 +1292,7 @@ func (me *CosService) DeleteBucketPullOrigin(ctx context.Context, bucket string) } func (me *CosService) GetBucketOriginDomain(ctx context.Context, bucket string) (result []map[string]interface{}, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { @@ -1326,7 +1333,7 @@ func (me *CosService) GetBucketOriginDomain(ctx context.Context, bucket string) } func (me *CosService) PutBucketOriginDomain(ctx context.Context, bucket string, rules []cos.BucketDomainRule) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) opt := &cos.BucketPutDomainOptions{ Rules: rules, @@ -1355,7 +1362,7 @@ func (me *CosService) PutBucketOriginDomain(ctx context.Context, bucket string, } func (me *CosService) DeleteBucketOriginDomain(ctx context.Context, bucket string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { @@ -1380,7 +1387,7 @@ func (me *CosService) DeleteBucketOriginDomain(ctx context.Context, bucket strin } func (me *CosService) GetBucketReplication(ctx context.Context, bucket string) (result *cos.GetBucketReplicationResult, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", @@ -1410,7 +1417,7 @@ func (me *CosService) GetBucketReplication(ctx context.Context, bucket string) ( } func (me *CosService) PutBucketReplication(ctx context.Context, bucket string, role string, rules []cos.BucketReplicationRule) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) option := &cos.PutBucketReplicationOptions{ Role: role, @@ -1443,7 +1450,7 @@ func (me *CosService) PutBucketReplication(ctx context.Context, bucket string, r } func (me *CosService) DeleteBucketReplication(ctx context.Context, bucket string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason[%s]\n", @@ -1468,7 +1475,7 @@ func (me *CosService) DeleteBucketReplication(ctx context.Context, bucket string } func (me *CosService) DescribeCosBucketDomainCertificate(ctx context.Context, certId string) (result *cos.BucketGetDomainCertificateResult, bucket string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) ids, err := me.parseCertId(certId) if err != nil { @@ -1509,7 +1516,7 @@ func (me *CosService) DescribeCosBucketDomainCertificate(ctx context.Context, ce } func (me *CosService) DeleteCosBucketDomainCertificate(ctx context.Context, certId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) ids, err := me.parseCertId(certId) if err != nil { @@ -1547,7 +1554,7 @@ func (me *CosService) DeleteCosBucketDomainCertificate(ctx context.Context, cert } func (me *CosService) parseCertId(configId string) (ret *CosBucketDomainCertItem, err error) { - idSplit := strings.Split(configId, FILED_SP) + idSplit := strings.Split(configId, tccommon.FILED_SP) if len(idSplit) != 2 { return nil, fmt.Errorf("id is broken,%s", configId) } @@ -1564,7 +1571,7 @@ func (me *CosService) parseCertId(configId string) (ret *CosBucketDomainCertItem func (me *CosService) DescribeCosBucketRefererById(ctx context.Context, bucket string) (*cos.BucketGetRefererResult, error) { var errRet error - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { @@ -1572,7 +1579,7 @@ func (me *CosService) DescribeCosBucketRefererById(ctx context.Context, bucket s } }() - resRaw, err := RetryWithContext(ctx, readRetryTimeout, func(ctx context.Context) (interface{}, error) { + resRaw, err := tccommon.RetryWithContext(ctx, tccommon.ReadRetryTimeout, func(ctx context.Context) (interface{}, error) { res, _, err := me.client.UseTencentCosClient(bucket).Bucket.GetReferer(ctx) return res, err }) @@ -1588,7 +1595,7 @@ func (me *CosService) DescribeCosBucketRefererById(ctx context.Context, bucket s func (me *CosService) DescribeCosBucketVersionById(ctx context.Context, bucket string) (*cos.BucketGetVersionResult, error) { var errRet error - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { @@ -1596,7 +1603,7 @@ func (me *CosService) DescribeCosBucketVersionById(ctx context.Context, bucket s } }() - resRaw, err := RetryWithContext(ctx, readRetryTimeout, func(ctx context.Context) (interface{}, error) { + resRaw, err := tccommon.RetryWithContext(ctx, tccommon.ReadRetryTimeout, func(ctx context.Context) (interface{}, error) { res, _, err := me.client.UseTencentCosClient(bucket).Bucket.GetVersioning(ctx) return res, err }) @@ -1611,7 +1618,7 @@ func (me *CosService) DescribeCosBucketVersionById(ctx context.Context, bucket s } func (me *CosService) BucketPutIntelligentTiering(ctx context.Context, bucket string, opt *cos.BucketPutIntelligentTieringOptions) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) req, _ := json.Marshal(opt) @@ -1643,7 +1650,7 @@ func (me *CosService) BucketPutIntelligentTiering(ctx context.Context, bucket st } func (me *CosService) BucketGetIntelligentTiering(ctx context.Context, bucket string) (result *cos.BucketGetIntelligentTieringResult, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) ratelimit.Check("BucketGetIntelligentTiering") intelligentTieringResult, response, err := me.client.UseTencentCosClient(bucket).Bucket.GetIntelligentTiering(ctx) @@ -1668,7 +1675,7 @@ Priority 1: permission priority: Read first, then handle WRITE, FullControl, WRI Priority 2: type priority: CanonicalUser first, then Group */ func (me *CosService) transACLBodyOrderly(ctx context.Context, rawAclBody string) (orderlyAclBody string, errRet error) { - // logId := getLogId(ctx) + // logId := tccommon.GetLogId(ctx) rawXmlDoc := etree.NewDocument() orderXmlDoc := etree.NewDocument() diff --git a/tencentcloud/services/cos/validators.go b/tencentcloud/services/cos/validators.go new file mode 100644 index 0000000000..7722cbc888 --- /dev/null +++ b/tencentcloud/services/cos/validators.go @@ -0,0 +1,81 @@ +package cos + +import ( + "fmt" + + "github.com/beevik/etree" +) + +func validateACLBody(v interface{}, k string) (ws []string, errors []error) { + missingUrl := "https://cloud.tencent.com/document/product/436/7737" + aclUrl := "https://cloud.tencent.com/document/product/436/30752#.E6.93.8D.E4.BD.9C-permission" + + value := v.(string) + xmlDoc := etree.NewDocument() + if err := xmlDoc.ReadFromString(value); err != nil { + errors = append(errors, fmt.Errorf("[CRITAL]read acl_body xml from string error: %v\n", err)) + return + } + + rawRoot := xmlDoc.SelectElement("AccessControlPolicy") + if rawRoot == nil { + errors = append(errors, fmt.Errorf("[CRITAL]missing the AccessControlPolicy element, please refer to the official document: %v\n", missingUrl)) + return + } + + if len(rawRoot.FindElements("//Owner")) == 0 { + errors = append(errors, fmt.Errorf("[CRITAL]missing the Owner element, please refer to the official document: %v\n", missingUrl)) + } else { + if len(rawRoot.FindElements("//Owner/ID")) == 0 { + errors = append(errors, fmt.Errorf("[CRITAL]missing the Owner/ID element, please refer to the official document: %v\n", missingUrl)) + } + } + + if len(rawRoot.FindElements("//Grant")) == 0 { + errors = append(errors, fmt.Errorf("[CRITAL]missing the Grant element, please refer to the official document: %v\n", missingUrl)) + } + + foundT := false + grantees := rawRoot.FindElements("//Grantee") + if len(grantees) == 0 { + errors = append(errors, fmt.Errorf("[CRITAL]missing the Grant/Grantee element, please refer to the official document: %v\n", missingUrl)) + } + + for _, grantee := range grantees { + var aType string + foundT = false + for _, validType := range COSACLGranteeTypeSeq { + aType = grantee.SelectAttrValue("type", "unknown") + if aType == validType { + foundT = true + break + } + } + if !foundT { + errors = append(errors, fmt.Errorf("[CRITAL]the Grantee type[%s] is not a valid type, please refer to the official document: %v\n", aType, aclUrl)) + } + } + + foundP := false + permissions := rawRoot.FindElements("//Permission") + if len(permissions) == 0 { + errors = append(errors, fmt.Errorf("[CRITAL]missing the Grant/Permission element, please refer to the official document: %v\n", missingUrl)) + } + + for _, permission := range permissions { + var aPermisson string + foundP = false + for _, validPermission := range COSACLPermissionSeq { + aPermisson = permission.Text() + if aPermisson == validPermission { + foundP = true + break + } + } + if !foundP { + errors = append(errors, fmt.Errorf("[CRITAL]the Grant Permission[%s] is not a valid type, please refer to the official document: %v\n", aPermisson, aclUrl)) + } + } + + return +} diff --git a/tencentcloud/validators.go b/tencentcloud/validators.go index 59b85fb217..b2294c4e48 100644 --- a/tencentcloud/validators.go +++ b/tencentcloud/validators.go @@ -10,8 +10,6 @@ import ( "unicode" "unicode/utf8" - "github.com/beevik/etree" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" "gopkg.in/yaml.v2" @@ -252,80 +250,6 @@ func validateCosBucketName(v interface{}, k string) (ws []string, errors []error return } -func validateACLBody(v interface{}, k string) (ws []string, errors []error) { - missingUrl := "https://cloud.tencent.com/document/product/436/7737" - aclUrl := "https://cloud.tencent.com/document/product/436/30752#.E6.93.8D.E4.BD.9C-permission" - - value := v.(string) - xmlDoc := etree.NewDocument() - if err := xmlDoc.ReadFromString(value); err != nil { - errors = append(errors, fmt.Errorf("[CRITAL]read acl_body xml from string error: %v\n", err)) - return - } - - rawRoot := xmlDoc.SelectElement("AccessControlPolicy") - if rawRoot == nil { - errors = append(errors, fmt.Errorf("[CRITAL]missing the AccessControlPolicy element, please refer to the official document: %v\n", missingUrl)) - return - } - - if len(rawRoot.FindElements("//Owner")) == 0 { - errors = append(errors, fmt.Errorf("[CRITAL]missing the Owner element, please refer to the official document: %v\n", missingUrl)) - } else { - if len(rawRoot.FindElements("//Owner/ID")) == 0 { - errors = append(errors, fmt.Errorf("[CRITAL]missing the Owner/ID element, please refer to the official document: %v\n", missingUrl)) - } - } - - if len(rawRoot.FindElements("//Grant")) == 0 { - errors = append(errors, fmt.Errorf("[CRITAL]missing the Grant element, please refer to the official document: %v\n", missingUrl)) - } - - foundT := false - grantees := rawRoot.FindElements("//Grantee") - if len(grantees) == 0 { - errors = append(errors, fmt.Errorf("[CRITAL]missing the Grant/Grantee element, please refer to the official document: %v\n", missingUrl)) - } - - for _, grantee := range grantees { - var aType string - foundT = false - for _, validType := range COSACLGranteeTypeSeq { - aType = grantee.SelectAttrValue("type", "unknown") - if aType == validType { - foundT = true - break - } - } - if !foundT { - errors = append(errors, fmt.Errorf("[CRITAL]the Grantee type[%s] is not a valid type, please refer to the official document: %v\n", aType, aclUrl)) - } - } - - foundP := false - permissions := rawRoot.FindElements("//Permission") - if len(permissions) == 0 { - errors = append(errors, fmt.Errorf("[CRITAL]missing the Grant/Permission element, please refer to the official document: %v\n", missingUrl)) - } - - for _, permission := range permissions { - var aPermisson string - foundP = false - for _, validPermission := range COSACLPermissionSeq { - aPermisson = permission.Text() - if aPermisson == validPermission { - foundP = true - break - } - } - if !foundP { - errors = append(errors, fmt.Errorf("[CRITAL]the Grant Permission[%s] is not a valid type, please refer to the official document: %v\n", aPermisson, aclUrl)) - } - } - - return -} - func validateCosBucketLifecycleTimestamp(v interface{}, k string) (ws []string, errors []error) { value := v.(string) _, err := time.Parse(time.RFC3339, fmt.Sprintf("%sT00:00:00Z", value)) From 6585837481f7e885bff0dffd5661db4c28307ee6 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 14:47:21 +0800 Subject: [PATCH 22/31] refactor: migrate package tencentcloud/services/crs --- tencentcloud/provider.go | 62 +- .../crs}/data_source_tc_redis_backup.go | 23 +- ...ta_source_tc_redis_backup_download_info.go | 23 +- ...urce_tc_redis_backup_download_info_test.go | 10 +- .../crs}/data_source_tc_redis_backup_test.go | 12 +- ...data_source_tc_redis_instance_node_info.go | 23 +- ...source_tc_redis_instance_node_info_test.go | 12 +- .../data_source_tc_redis_instance_shards.go | 23 +- ...ta_source_tc_redis_instance_shards_test.go | 10 +- ...data_source_tc_redis_instance_task_list.go | 23 +- ...source_tc_redis_instance_task_list_test.go | 10 +- ...data_source_tc_redis_instance_zone_info.go | 23 +- ...source_tc_redis_instance_zone_info_test.go | 14 +- .../crs}/data_source_tc_redis_instances.go | 17 +- .../data_source_tc_redis_instances_test.go | 10 +- .../data_source_tc_redis_param_records.go | 23 +- ...data_source_tc_redis_param_records_test.go | 10 +- .../crs}/data_source_tc_redis_zone_config.go | 20 +- .../data_source_tc_redis_zone_config_test.go | 12 +- tencentcloud/services/crs/extension_redis.go | 95 + tencentcloud/services/crs/extension_tags.go | 3 + .../crs}/resource_tc_redis_account.go | 81 +- .../crs}/resource_tc_redis_account_test.go | 30 +- .../crs}/resource_tc_redis_backup_config.go | 40 +- .../resource_tc_redis_backup_config_test.go | 26 +- ...ce_tc_redis_backup_download_restriction.go | 39 +- ..._redis_backup_download_restriction_test.go | 10 +- .../resource_tc_redis_backup_operation.go | 33 +- ...resource_tc_redis_backup_operation_test.go | 10 +- ...ource_tc_redis_clear_instance_operation.go | 33 +- ..._tc_redis_clear_instance_operation_test.go | 8 +- .../resource_tc_redis_connection_config.go | 43 +- ...esource_tc_redis_connection_config_test.go | 20 +- .../crs}/resource_tc_redis_instance.go | 149 +- .../crs}/resource_tc_redis_instance_test.go | 108 +- .../resource_tc_redis_maintenance_window.go | 37 +- ...source_tc_redis_maintenance_window_test.go | 12 +- .../crs}/resource_tc_redis_param_template.go | 51 +- .../resource_tc_redis_param_template_test.go | 22 +- .../crs}/resource_tc_redis_read_only.go | 43 +- .../crs}/resource_tc_redis_read_only_test.go | 12 +- ...ource_tc_redis_renew_instance_operation.go | 33 +- ..._tc_redis_renew_instance_operation_test.go | 10 +- .../resource_tc_redis_replica_readonly.go | 50 +- ...resource_tc_redis_replica_readonly_test.go | 8 +- .../resource_tc_redis_replicate_attachment.go | 57 +- ...urce_tc_redis_replicate_attachment_test.go | 16 +- ...urce_tc_redis_security_group_attachment.go | 45 +- ...tc_redis_security_group_attachment_test.go | 38 +- .../crs}/resource_tc_redis_ssl.go | 50 +- .../crs}/resource_tc_redis_ssl_test.go | 8 +- ...rce_tc_redis_startup_instance_operation.go | 33 +- ...c_redis_startup_instance_operation_test.go | 8 +- .../crs}/resource_tc_redis_switch_master.go | 41 +- .../resource_tc_redis_switch_master_test.go | 8 +- ...c_redis_upgrade_cache_version_operation.go | 33 +- ...is_upgrade_cache_version_operation_test.go | 8 +- ...e_tc_redis_upgrade_multi_zone_operation.go | 33 +- ...redis_upgrade_multi_zone_operation_test.go | 10 +- ...c_redis_upgrade_proxy_version_operation.go | 33 +- ...is_upgrade_proxy_version_operation_test.go | 8 +- .../crs/service_tencentcloud_redis.go | 1933 +++++++++++++++++ .../services/crs/service_tencentcloud_tag.go | 415 ++++ 63 files changed, 3373 insertions(+), 770 deletions(-) rename tencentcloud/{ => services/crs}/data_source_tc_redis_backup.go (91%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_backup_download_info.go (91%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_backup_download_info_test.go (85%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_backup_test.go (86%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_instance_node_info.go (86%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_instance_node_info_test.go (85%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_instance_shards.go (86%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_instance_shards_test.go (87%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_instance_task_list.go (90%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_instance_task_list_test.go (87%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_instance_zone_info.go (87%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_instance_zone_info_test.go (88%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_instances.go (93%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_instances_test.go (93%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_param_records.go (83%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_param_records_test.go (83%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_zone_config.go (90%) rename tencentcloud/{ => services/crs}/data_source_tc_redis_zone_config_test.go (85%) create mode 100644 tencentcloud/services/crs/extension_redis.go create mode 100644 tencentcloud/services/crs/extension_tags.go rename tencentcloud/{ => services/crs}/resource_tc_redis_account.go (77%) rename tencentcloud/{ => services/crs}/resource_tc_redis_account_test.go (73%) rename tencentcloud/{ => services/crs}/resource_tc_redis_backup_config.go (75%) rename tencentcloud/{ => services/crs}/resource_tc_redis_backup_config_test.go (81%) rename tencentcloud/{ => services/crs}/resource_tc_redis_backup_download_restriction.go (83%) rename tencentcloud/{ => services/crs}/resource_tc_redis_backup_download_restriction_test.go (90%) rename tencentcloud/{ => services/crs}/resource_tc_redis_backup_operation.go (73%) rename tencentcloud/{ => services/crs}/resource_tc_redis_backup_operation_test.go (78%) rename tencentcloud/{ => services/crs}/resource_tc_redis_clear_instance_operation.go (72%) rename tencentcloud/{ => services/crs}/resource_tc_redis_clear_instance_operation_test.go (82%) rename tencentcloud/{ => services/crs}/resource_tc_redis_connection_config.go (82%) rename tencentcloud/{ => services/crs}/resource_tc_redis_connection_config_test.go (72%) rename tencentcloud/{ => services/crs}/resource_tc_redis_instance.go (87%) rename tencentcloud/{ => services/crs}/resource_tc_redis_instance_test.go (89%) rename tencentcloud/{ => services/crs}/resource_tc_redis_maintenance_window.go (72%) rename tencentcloud/{ => services/crs}/resource_tc_redis_maintenance_window_test.go (81%) rename tencentcloud/{ => services/crs}/resource_tc_redis_param_template.go (84%) rename tencentcloud/{ => services/crs}/resource_tc_redis_param_template_test.go (83%) rename tencentcloud/{ => services/crs}/resource_tc_redis_read_only.go (71%) rename tencentcloud/{ => services/crs}/resource_tc_redis_read_only_test.go (78%) rename tencentcloud/{ => services/crs}/resource_tc_redis_renew_instance_operation.go (72%) rename tencentcloud/{ => services/crs}/resource_tc_redis_renew_instance_operation_test.go (77%) rename tencentcloud/{ => services/crs}/resource_tc_redis_replica_readonly.go (71%) rename tencentcloud/{ => services/crs}/resource_tc_redis_replica_readonly_test.go (90%) rename tencentcloud/{ => services/crs}/resource_tc_redis_replicate_attachment.go (76%) rename tencentcloud/{ => services/crs}/resource_tc_redis_replicate_attachment_test.go (89%) rename tencentcloud/{ => services/crs}/resource_tc_redis_security_group_attachment.go (69%) rename tencentcloud/{ => services/crs}/resource_tc_redis_security_group_attachment_test.go (67%) rename tencentcloud/{ => services/crs}/resource_tc_redis_ssl.go (71%) rename tencentcloud/{ => services/crs}/resource_tc_redis_ssl_test.go (93%) rename tencentcloud/{ => services/crs}/resource_tc_redis_startup_instance_operation.go (69%) rename tencentcloud/{ => services/crs}/resource_tc_redis_startup_instance_operation_test.go (82%) rename tencentcloud/{ => services/crs}/resource_tc_redis_switch_master.go (72%) rename tencentcloud/{ => services/crs}/resource_tc_redis_switch_master_test.go (89%) rename tencentcloud/{ => services/crs}/resource_tc_redis_upgrade_cache_version_operation.go (75%) rename tencentcloud/{ => services/crs}/resource_tc_redis_upgrade_cache_version_operation_test.go (82%) rename tencentcloud/{ => services/crs}/resource_tc_redis_upgrade_multi_zone_operation.go (75%) rename tencentcloud/{ => services/crs}/resource_tc_redis_upgrade_multi_zone_operation_test.go (85%) rename tencentcloud/{ => services/crs}/resource_tc_redis_upgrade_proxy_version_operation.go (76%) rename tencentcloud/{ => services/crs}/resource_tc_redis_upgrade_proxy_version_operation_test.go (82%) create mode 100644 tencentcloud/services/crs/service_tencentcloud_redis.go create mode 100644 tencentcloud/services/crs/service_tencentcloud_tag.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index f707ea29c2..d893712598 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,7 +1,6 @@ package tencentcloud import ( - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cos" "encoding/json" "fmt" "io/ioutil" @@ -11,6 +10,9 @@ import ( "strconv" "strings" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cos" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/crs" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mitchellh/go-homedir" sdkcommon "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" @@ -313,15 +315,15 @@ func Provider() *schema.Provider { "tencentcloud_cfs_mount_targets": cfs.DataSourceTencentCloudCfsMountTargets(), "tencentcloud_cfs_file_system_clients": cfs.DataSourceTencentCloudCfsFileSystemClients(), "tencentcloud_cfs_available_zone": cfs.DataSourceTencentCloudCfsAvailableZone(), - "tencentcloud_redis_zone_config": dataSourceTencentRedisZoneConfig(), - "tencentcloud_redis_instances": dataSourceTencentRedisInstances(), - "tencentcloud_redis_backup": dataSourceTencentCloudRedisBackup(), - "tencentcloud_redis_backup_download_info": dataSourceTencentCloudRedisBackupDownloadInfo(), - "tencentcloud_redis_param_records": dataSourceTencentCloudRedisRecordsParam(), - "tencentcloud_redis_instance_shards": dataSourceTencentCloudRedisInstanceShards(), - "tencentcloud_redis_instance_zone_info": dataSourceTencentCloudRedisInstanceZoneInfo(), - "tencentcloud_redis_instance_task_list": dataSourceTencentCloudRedisInstanceTaskList(), - "tencentcloud_redis_instance_node_info": dataSourceTencentCloudRedisInstanceNodeInfo(), + "tencentcloud_redis_zone_config": crs.DataSourceTencentCloudRedisZoneConfig(), + "tencentcloud_redis_instances": crs.DataSourceTencentCloudRedisInstances(), + "tencentcloud_redis_backup": crs.DataSourceTencentCloudRedisBackup(), + "tencentcloud_redis_backup_download_info": crs.DataSourceTencentCloudRedisBackupDownloadInfo(), + "tencentcloud_redis_param_records": crs.DataSourceTencentCloudRedisRecordsParam(), + "tencentcloud_redis_instance_shards": crs.DataSourceTencentCloudRedisInstanceShards(), + "tencentcloud_redis_instance_zone_info": crs.DataSourceTencentCloudRedisInstanceZoneInfo(), + "tencentcloud_redis_instance_task_list": crs.DataSourceTencentCloudRedisInstanceTaskList(), + "tencentcloud_redis_instance_node_info": crs.DataSourceTencentCloudRedisInstanceNodeInfo(), "tencentcloud_as_scaling_configs": dataSourceTencentCloudAsScalingConfigs(), "tencentcloud_as_scaling_groups": dataSourceTencentCloudAsScalingGroups(), "tencentcloud_as_scaling_policies": dataSourceTencentCloudAsScalingPolicies(), @@ -1092,27 +1094,27 @@ func Provider() *schema.Provider { "tencentcloud_cfs_snapshot": cfs.ResourceTencentCloudCfsSnapshot(), "tencentcloud_cfs_user_quota": resourceTencentCloudCfsUserQuota(), "tencentcloud_cfs_sign_up_cfs_service": cfs.ResourceTencentCloudCfsSignUpCfsService(), - "tencentcloud_redis_instance": resourceTencentCloudRedisInstance(), - "tencentcloud_redis_backup_config": resourceTencentCloudRedisBackupConfig(), - "tencentcloud_redis_account": resourceTencentCloudRedisAccount(), - "tencentcloud_redis_param_template": resourceTencentCloudRedisParamTemplate(), - "tencentcloud_redis_connection_config": resourceTencentCloudRedisConnectionConfig(), + "tencentcloud_redis_instance": crs.ResourceTencentCloudRedisInstance(), + "tencentcloud_redis_backup_config": crs.ResourceTencentCloudRedisBackupConfig(), + "tencentcloud_redis_account": crs.ResourceTencentCloudRedisAccount(), + "tencentcloud_redis_param_template": crs.ResourceTencentCloudRedisParamTemplate(), + "tencentcloud_redis_connection_config": crs.ResourceTencentCloudRedisConnectionConfig(), "tencentcloud_redis_param": resourceTencentCloudRedisParam(), - "tencentcloud_redis_read_only": resourceTencentCloudRedisReadOnly(), - "tencentcloud_redis_ssl": resourceTencentCloudRedisSsl(), - "tencentcloud_redis_backup_download_restriction": resourceTencentCloudRedisBackupDownloadRestriction(), - "tencentcloud_redis_clear_instance_operation": resourceTencentCloudRedisClearInstanceOperation(), - "tencentcloud_redis_renew_instance_operation": resourceTencentCloudRedisRenewInstanceOperation(), - "tencentcloud_redis_startup_instance_operation": resourceTencentCloudRedisStartupInstanceOperation(), - "tencentcloud_redis_upgrade_cache_version_operation": resourceTencentCloudRedisUpgradeCacheVersionOperation(), - "tencentcloud_redis_upgrade_multi_zone_operation": resourceTencentCloudRedisUpgradeMultiZoneOperation(), - "tencentcloud_redis_upgrade_proxy_version_operation": resourceTencentCloudRedisUpgradeProxyVersionOperation(), - "tencentcloud_redis_maintenance_window": resourceTencentCloudRedisMaintenanceWindow(), - "tencentcloud_redis_replica_readonly": resourceTencentCloudRedisReplicaReadonly(), - "tencentcloud_redis_switch_master": resourceTencentCloudRedisSwitchMaster(), - "tencentcloud_redis_replicate_attachment": resourceTencentCloudRedisReplicateAttachment(), - "tencentcloud_redis_backup_operation": resourceTencentCloudRedisBackupOperation(), - "tencentcloud_redis_security_group_attachment": resourceTencentCloudRedisSecurityGroupAttachment(), + "tencentcloud_redis_read_only": crs.ResourceTencentCloudRedisReadOnly(), + "tencentcloud_redis_ssl": crs.ResourceTencentCloudRedisSsl(), + "tencentcloud_redis_backup_download_restriction": crs.ResourceTencentCloudRedisBackupDownloadRestriction(), + "tencentcloud_redis_clear_instance_operation": crs.ResourceTencentCloudRedisClearInstanceOperation(), + "tencentcloud_redis_renew_instance_operation": crs.ResourceTencentCloudRedisRenewInstanceOperation(), + "tencentcloud_redis_startup_instance_operation": crs.ResourceTencentCloudRedisStartupInstanceOperation(), + "tencentcloud_redis_upgrade_cache_version_operation": crs.ResourceTencentCloudRedisUpgradeCacheVersionOperation(), + "tencentcloud_redis_upgrade_multi_zone_operation": crs.ResourceTencentCloudRedisUpgradeMultiZoneOperation(), + "tencentcloud_redis_upgrade_proxy_version_operation": crs.ResourceTencentCloudRedisUpgradeProxyVersionOperation(), + "tencentcloud_redis_maintenance_window": crs.ResourceTencentCloudRedisMaintenanceWindow(), + "tencentcloud_redis_replica_readonly": crs.ResourceTencentCloudRedisReplicaReadonly(), + "tencentcloud_redis_switch_master": crs.ResourceTencentCloudRedisSwitchMaster(), + "tencentcloud_redis_replicate_attachment": crs.ResourceTencentCloudRedisReplicateAttachment(), + "tencentcloud_redis_backup_operation": crs.ResourceTencentCloudRedisBackupOperation(), + "tencentcloud_redis_security_group_attachment": crs.ResourceTencentCloudRedisSecurityGroupAttachment(), "tencentcloud_as_load_balancer": resourceTencentCloudAsLoadBalancer(), "tencentcloud_as_scaling_config": resourceTencentCloudAsScalingConfig(), "tencentcloud_as_scaling_group": resourceTencentCloudAsScalingGroup(), diff --git a/tencentcloud/data_source_tc_redis_backup.go b/tencentcloud/services/crs/data_source_tc_redis_backup.go similarity index 91% rename from tencentcloud/data_source_tc_redis_backup.go rename to tencentcloud/services/crs/data_source_tc_redis_backup.go index 949a90cd5d..f07d90ca8c 100644 --- a/tencentcloud/data_source_tc_redis_backup.go +++ b/tencentcloud/services/crs/data_source_tc_redis_backup.go @@ -1,15 +1,18 @@ -package tencentcloud +package crs import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudRedisBackup() *schema.Resource { +func DataSourceTencentCloudRedisBackup() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudRedisBackupRead, Schema: map[string]*schema.Schema{ @@ -141,12 +144,12 @@ func dataSourceTencentCloudRedisBackup() *schema.Resource { } func dataSourceTencentCloudRedisBackupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_redis_backup.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_redis_backup.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { @@ -175,14 +178,14 @@ func dataSourceTencentCloudRedisBackupRead(d *schema.ResourceData, meta interfac paramMap["InstanceName"] = helper.String(v.(string)) } - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var backupSet []*redis.RedisBackupSet - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeRedisBackupByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } backupSet = result return nil @@ -268,7 +271,7 @@ func dataSourceTencentCloudRedisBackupRead(d *schema.ResourceData, meta interfac d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_redis_backup_download_info.go b/tencentcloud/services/crs/data_source_tc_redis_backup_download_info.go similarity index 91% rename from tencentcloud/data_source_tc_redis_backup_download_info.go rename to tencentcloud/services/crs/data_source_tc_redis_backup_download_info.go index b629ff8788..b0d6618900 100644 --- a/tencentcloud/data_source_tc_redis_backup_download_info.go +++ b/tencentcloud/services/crs/data_source_tc_redis_backup_download_info.go @@ -1,16 +1,19 @@ -package tencentcloud +package crs import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudRedisBackupDownloadInfo() *schema.Resource { +func DataSourceTencentCloudRedisBackupDownloadInfo() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudRedisBackupDownloadInfoRead, Schema: map[string]*schema.Schema{ @@ -116,12 +119,12 @@ func dataSourceTencentCloudRedisBackupDownloadInfo() *schema.Resource { } func dataSourceTencentCloudRedisBackupDownloadInfoRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_redis_backup_download_info.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_redis_backup_download_info.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { @@ -169,11 +172,11 @@ func dataSourceTencentCloudRedisBackupDownloadInfoRead(d *schema.ResourceData, m paramMap["limit_ip"] = helper.InterfacesStringsPoint(limitIpSet) } - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var backupInfos []*redis.BackupDownloadInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeRedisBackupDownloadInfoByFilter(ctx, paramMap) if e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { @@ -181,7 +184,7 @@ func dataSourceTencentCloudRedisBackupDownloadInfoRead(d *schema.ResourceData, m return resource.NonRetryableError(e) } } - return retryError(e) + return tccommon.RetryError(e) } backupInfos = result return nil @@ -223,7 +226,7 @@ func dataSourceTencentCloudRedisBackupDownloadInfoRead(d *schema.ResourceData, m d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_redis_backup_download_info_test.go b/tencentcloud/services/crs/data_source_tc_redis_backup_download_info_test.go similarity index 85% rename from tencentcloud/data_source_tc_redis_backup_download_info_test.go rename to tencentcloud/services/crs/data_source_tc_redis_backup_download_info_test.go index d3638a6603..9bf2b3a079 100644 --- a/tencentcloud/data_source_tc_redis_backup_download_info_test.go +++ b/tencentcloud/services/crs/data_source_tc_redis_backup_download_info_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudRedisBackupDownloadInfoDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisBackupDownloadInfoDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_redis_backup_download_info.backup_download_info"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_redis_backup_download_info.backup_download_info"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_backup_download_info.backup_download_info", "instance_id"), resource.TestCheckResourceAttr("data.tencentcloud_redis_backup_download_info.backup_download_info", "backup_infos.#", "1"), // resource.TestCheckResourceAttrSet("data.tencentcloud_redis_backup_download_info.backup_download_info", "backup_infos.0.download_url"), diff --git a/tencentcloud/data_source_tc_redis_backup_test.go b/tencentcloud/services/crs/data_source_tc_redis_backup_test.go similarity index 86% rename from tencentcloud/data_source_tc_redis_backup_test.go rename to tencentcloud/services/crs/data_source_tc_redis_backup_test.go index 6a44482570..3e9596ab34 100644 --- a/tencentcloud/data_source_tc_redis_backup_test.go +++ b/tencentcloud/services/crs/data_source_tc_redis_backup_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudRedisBackupDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisBackupDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_redis_backup.backup"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_redis_backup.backup"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_backup.backup", "instance_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_backup.backup", "backup_set.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_backup.backup", "backup_set.0.backup_id"), @@ -39,7 +41,7 @@ func TestAccTencentCloudRedisBackupDataSource_basic(t *testing.T) { const testAccRedisBackupDataSourceVar = ` variable "instance_id" { - default = "` + defaultCrsInstanceId + `" + default = "` + tcacctest.DefaultCrsInstanceId + `" } ` diff --git a/tencentcloud/data_source_tc_redis_instance_node_info.go b/tencentcloud/services/crs/data_source_tc_redis_instance_node_info.go similarity index 86% rename from tencentcloud/data_source_tc_redis_instance_node_info.go rename to tencentcloud/services/crs/data_source_tc_redis_instance_node_info.go index cab7e3f83c..1f9ba3854d 100644 --- a/tencentcloud/data_source_tc_redis_instance_node_info.go +++ b/tencentcloud/services/crs/data_source_tc_redis_instance_node_info.go @@ -1,16 +1,19 @@ -package tencentcloud +package crs import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudRedisInstanceNodeInfo() *schema.Resource { +func DataSourceTencentCloudRedisInstanceNodeInfo() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudRedisInstanceNodeInfoRead, Schema: map[string]*schema.Schema{ @@ -92,11 +95,11 @@ func dataSourceTencentCloudRedisInstanceNodeInfo() *schema.Resource { } func dataSourceTencentCloudRedisInstanceNodeInfoRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_redis_instance_node_info.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_redis_instance_node_info.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instanceId string paramMap := make(map[string]interface{}) @@ -105,9 +108,9 @@ func dataSourceTencentCloudRedisInstanceNodeInfoRead(d *schema.ResourceData, met paramMap["InstanceId"] = helper.String(v.(string)) } - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceNodeInfo *redis.DescribeInstanceNodeInfoResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeRedisInstanceNodeInfoByFilter(ctx, paramMap) if e != nil { if sdkerr, ok := e.(*sdkErrors.TencentCloudSDKError); ok { @@ -115,7 +118,7 @@ func dataSourceTencentCloudRedisInstanceNodeInfoRead(d *schema.ResourceData, met return nil } } - return retryError(e) + return tccommon.RetryError(e) } instanceNodeInfo = result return nil @@ -183,7 +186,7 @@ func dataSourceTencentCloudRedisInstanceNodeInfoRead(d *schema.ResourceData, met d.SetId(instanceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_redis_instance_node_info_test.go b/tencentcloud/services/crs/data_source_tc_redis_instance_node_info_test.go similarity index 85% rename from tencentcloud/data_source_tc_redis_instance_node_info_test.go rename to tencentcloud/services/crs/data_source_tc_redis_instance_node_info_test.go index 8b70a4fffd..5894815696 100644 --- a/tencentcloud/data_source_tc_redis_instance_node_info_test.go +++ b/tencentcloud/services/crs/data_source_tc_redis_instance_node_info_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudRedisInstanceNodeInfoDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisInstanceNodeInfoDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_redis_instance_node_info.instance_node_info"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_redis_instance_node_info.instance_node_info"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_instance_node_info.instance_node_info", "instance_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_instance_node_info.instance_node_info", "proxy_count"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_instance_node_info.instance_node_info", "proxy.#"), @@ -37,7 +39,7 @@ func TestAccTencentCloudRedisInstanceNodeInfoDataSource_basic(t *testing.T) { const testAccRedisInstanceNodeInfoDataSourceVar = ` variable "instance_id" { - default = "` + defaultCrsInstanceId + `" + default = "` + tcacctest.DefaultCrsInstanceId + `" } ` const testAccRedisInstanceNodeInfoDataSource = testAccRedisInstanceNodeInfoDataSourceVar + ` diff --git a/tencentcloud/data_source_tc_redis_instance_shards.go b/tencentcloud/services/crs/data_source_tc_redis_instance_shards.go similarity index 86% rename from tencentcloud/data_source_tc_redis_instance_shards.go rename to tencentcloud/services/crs/data_source_tc_redis_instance_shards.go index b7df5d4c42..e5082dd10b 100644 --- a/tencentcloud/data_source_tc_redis_instance_shards.go +++ b/tencentcloud/services/crs/data_source_tc_redis_instance_shards.go @@ -1,15 +1,18 @@ -package tencentcloud +package crs import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudRedisInstanceShards() *schema.Resource { +func DataSourceTencentCloudRedisInstanceShards() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudRedisInstanceShardsRead, Schema: map[string]*schema.Schema{ @@ -90,11 +93,11 @@ func dataSourceTencentCloudRedisInstanceShards() *schema.Resource { } func dataSourceTencentCloudRedisInstanceShardsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_redis_instance_shards.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_redis_instance_shards.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instanceId string paramMap := make(map[string]interface{}) @@ -107,14 +110,14 @@ func dataSourceTencentCloudRedisInstanceShardsRead(d *schema.ResourceData, meta paramMap["FilterSlave"] = helper.Bool(v.(bool)) } - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceShards []*redis.InstanceClusterShard - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeRedisInstanceShardsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceShards = result return nil @@ -173,7 +176,7 @@ func dataSourceTencentCloudRedisInstanceShardsRead(d *schema.ResourceData, meta d.SetId(helper.DataResourceIdsHash([]string{instanceId})) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_redis_instance_shards_test.go b/tencentcloud/services/crs/data_source_tc_redis_instance_shards_test.go similarity index 87% rename from tencentcloud/data_source_tc_redis_instance_shards_test.go rename to tencentcloud/services/crs/data_source_tc_redis_instance_shards_test.go index 150f8055a2..738fc6acc4 100644 --- a/tencentcloud/data_source_tc_redis_instance_shards_test.go +++ b/tencentcloud/services/crs/data_source_tc_redis_instance_shards_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudRedisInstanceShardsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisInstanceShardsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_redis_instance_shards.instance_shards"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_redis_instance_shards.instance_shards"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_instance_shards.instance_shards", "instance_shards.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_instance_shards.instance_shards", "instance_shards.0.connected"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_instance_shards.instance_shards", "instance_shards.0.keys"), diff --git a/tencentcloud/data_source_tc_redis_instance_task_list.go b/tencentcloud/services/crs/data_source_tc_redis_instance_task_list.go similarity index 90% rename from tencentcloud/data_source_tc_redis_instance_task_list.go rename to tencentcloud/services/crs/data_source_tc_redis_instance_task_list.go index 1fde39dfd1..efb927341a 100644 --- a/tencentcloud/data_source_tc_redis_instance_task_list.go +++ b/tencentcloud/services/crs/data_source_tc_redis_instance_task_list.go @@ -1,16 +1,19 @@ -package tencentcloud +package crs import ( "context" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudRedisInstanceTaskList() *schema.Resource { +func DataSourceTencentCloudRedisInstanceTaskList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudRedisInstanceTaskListRead, Schema: map[string]*schema.Schema{ @@ -148,12 +151,12 @@ func dataSourceTencentCloudRedisInstanceTaskList() *schema.Resource { } func dataSourceTencentCloudRedisInstanceTaskListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_redis_instance_task_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_redis_instance_task_list.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { @@ -197,14 +200,14 @@ func dataSourceTencentCloudRedisInstanceTaskListRead(d *schema.ResourceData, met paramMap["OperateUin"] = helper.InterfacesStringsPoint(operateUinSet) } - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var tasks []*redis.TaskInfoDetail - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeRedisInstanceTaskListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } tasks = result return nil @@ -266,7 +269,7 @@ func dataSourceTencentCloudRedisInstanceTaskListRead(d *schema.ResourceData, met d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_redis_instance_task_list_test.go b/tencentcloud/services/crs/data_source_tc_redis_instance_task_list_test.go similarity index 87% rename from tencentcloud/data_source_tc_redis_instance_task_list_test.go rename to tencentcloud/services/crs/data_source_tc_redis_instance_task_list_test.go index 9debb1c5b3..445136a98c 100644 --- a/tencentcloud/data_source_tc_redis_instance_task_list_test.go +++ b/tencentcloud/services/crs/data_source_tc_redis_instance_task_list_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudRedisInstanceTaskListDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisInstanceTaskListDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_redis_instance_task_list.instance_task_list"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_redis_instance_task_list.instance_task_list"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_instance_task_list.instance_task_list", "tasks.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_instance_task_list.instance_task_list", "tasks.0.end_time"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_instance_task_list.instance_task_list", "tasks.0.instance_id"), diff --git a/tencentcloud/data_source_tc_redis_instance_zone_info.go b/tencentcloud/services/crs/data_source_tc_redis_instance_zone_info.go similarity index 87% rename from tencentcloud/data_source_tc_redis_instance_zone_info.go rename to tencentcloud/services/crs/data_source_tc_redis_instance_zone_info.go index c9cf5d566a..c632e5730f 100644 --- a/tencentcloud/data_source_tc_redis_instance_zone_info.go +++ b/tencentcloud/services/crs/data_source_tc_redis_instance_zone_info.go @@ -1,16 +1,19 @@ -package tencentcloud +package crs import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudRedisInstanceZoneInfo() *schema.Resource { +func DataSourceTencentCloudRedisInstanceZoneInfo() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudRedisInstanceZoneInfoRead, Schema: map[string]*schema.Schema{ @@ -94,11 +97,11 @@ func dataSourceTencentCloudRedisInstanceZoneInfo() *schema.Resource { } func dataSourceTencentCloudRedisInstanceZoneInfoRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_redis_instance_zone_info.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_redis_instance_zone_info.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instanceId string paramMap := make(map[string]interface{}) @@ -107,11 +110,11 @@ func dataSourceTencentCloudRedisInstanceZoneInfoRead(d *schema.ResourceData, met paramMap["InstanceId"] = helper.String(v.(string)) } - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var replicaGroups []*redis.ReplicaGroup - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeRedisInstanceZoneInfoByFilter(ctx, paramMap) if e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { @@ -119,7 +122,7 @@ func dataSourceTencentCloudRedisInstanceZoneInfoRead(d *schema.ResourceData, met return resource.NonRetryableError(e) } } - return retryError(e) + return tccommon.RetryError(e) } replicaGroups = result return nil @@ -190,7 +193,7 @@ func dataSourceTencentCloudRedisInstanceZoneInfoRead(d *schema.ResourceData, met d.SetId(helper.DataResourceIdsHash([]string{instanceId})) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_redis_instance_zone_info_test.go b/tencentcloud/services/crs/data_source_tc_redis_instance_zone_info_test.go similarity index 88% rename from tencentcloud/data_source_tc_redis_instance_zone_info_test.go rename to tencentcloud/services/crs/data_source_tc_redis_instance_zone_info_test.go index 801f3f7da3..455f7d5ce4 100644 --- a/tencentcloud/data_source_tc_redis_instance_zone_info_test.go +++ b/tencentcloud/services/crs/data_source_tc_redis_instance_zone_info_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudRedisInstanceZoneInfoDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisInstanceZoneInfoDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_redis_instance_zone_info.instance_zone_info"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_redis_instance_zone_info.instance_zone_info"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_instance_zone_info.instance_zone_info", "replica_groups.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_instance_zone_info.instance_zone_info", "replica_groups.0.group_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_instance_zone_info.instance_zone_info", "replica_groups.0.group_name"), @@ -38,10 +40,10 @@ func TestAccTencentCloudRedisInstanceZoneInfoDataSource_basic(t *testing.T) { const testAccRedisInstanceZoneInfoDataSourceVar = ` variable "vpc_id" { - default = "` + defaultCrsVpcId + `" + default = "` + tcacctest.DefaultCrsVpcId + `" } variable "subnet_id" { - default = "` + defaultCrsSubnetId + `" + default = "` + tcacctest.DefaultCrsSubnetId + `" } ` diff --git a/tencentcloud/data_source_tc_redis_instances.go b/tencentcloud/services/crs/data_source_tc_redis_instances.go similarity index 93% rename from tencentcloud/data_source_tc_redis_instances.go rename to tencentcloud/services/crs/data_source_tc_redis_instances.go index 8089d51a8f..17181c571f 100644 --- a/tencentcloud/data_source_tc_redis_instances.go +++ b/tencentcloud/services/crs/data_source_tc_redis_instances.go @@ -1,14 +1,17 @@ -package tencentcloud +package crs import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentRedisInstances() *schema.Resource { +func DataSourceTencentCloudRedisInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentRedisInstancesRead, Schema: map[string]*schema.Schema{ @@ -169,12 +172,12 @@ func dataSourceTencentRedisInstances() *schema.Resource { } func dataSourceTencentRedisInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_redis_instances.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_redis_instances.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := RedisService{client: client} region := client.Region @@ -260,7 +263,7 @@ instanceLoop: d.SetId("redis_instances_list" + region) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), instanceList); err != nil { + if err := tccommon.WriteToFile(output.(string), instanceList); err != nil { log.Printf("[CRITAL]%s output file[%s] fail, reason[%s]\n", logId, output.(string), err.Error()) } diff --git a/tencentcloud/data_source_tc_redis_instances_test.go b/tencentcloud/services/crs/data_source_tc_redis_instances_test.go similarity index 93% rename from tencentcloud/data_source_tc_redis_instances_test.go rename to tencentcloud/services/crs/data_source_tc_redis_instances_test.go index 32d5fcb757..de6d30e047 100644 --- a/tencentcloud/data_source_tc_redis_instances_test.go +++ b/tencentcloud/services/crs/data_source_tc_redis_instances_test.go @@ -1,17 +1,19 @@ -package tencentcloud +package crs_test import ( "regexp" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudRedisInstancesDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTencentCloudRedisInstancesDataSourceConfig(), @@ -46,7 +48,7 @@ func TestAccTencentCloudRedisInstancesDataSource(t *testing.T) { } func testAccTencentCloudRedisInstancesDataSourceConfig() string { - return defaultVpcSubnets + ` + return tcacctest.DefaultVpcSubnets + ` resource "tencentcloud_redis_instance" "redis_instance_test" { availability_zone = "ap-guangzhou-3" type_id = 2 diff --git a/tencentcloud/data_source_tc_redis_param_records.go b/tencentcloud/services/crs/data_source_tc_redis_param_records.go similarity index 83% rename from tencentcloud/data_source_tc_redis_param_records.go rename to tencentcloud/services/crs/data_source_tc_redis_param_records.go index a9f9582c1c..eea28a18e0 100644 --- a/tencentcloud/data_source_tc_redis_param_records.go +++ b/tencentcloud/services/crs/data_source_tc_redis_param_records.go @@ -1,15 +1,18 @@ -package tencentcloud +package crs import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudRedisRecordsParam() *schema.Resource { +func DataSourceTencentCloudRedisRecordsParam() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudRedisParamRecordsRead, Schema: map[string]*schema.Schema{ @@ -64,11 +67,11 @@ func dataSourceTencentCloudRedisRecordsParam() *schema.Resource { } func dataSourceTencentCloudRedisParamRecordsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_redis_param_records.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_redis_param_records.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instanceId string paramMap := make(map[string]interface{}) @@ -77,14 +80,14 @@ func dataSourceTencentCloudRedisParamRecordsRead(d *schema.ResourceData, meta in paramMap["InstanceId"] = helper.String(v.(string)) } - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceParamHistory []*redis.InstanceParamHistory - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeRedisParamRecordsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceParamHistory = result return nil @@ -128,7 +131,7 @@ func dataSourceTencentCloudRedisParamRecordsRead(d *schema.ResourceData, meta in d.SetId(helper.DataResourceIdsHash([]string{instanceId})) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_redis_param_records_test.go b/tencentcloud/services/crs/data_source_tc_redis_param_records_test.go similarity index 83% rename from tencentcloud/data_source_tc_redis_param_records_test.go rename to tencentcloud/services/crs/data_source_tc_redis_param_records_test.go index 39ac651426..4ccce2f147 100644 --- a/tencentcloud/data_source_tc_redis_param_records_test.go +++ b/tencentcloud/services/crs/data_source_tc_redis_param_records_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudRedisParamRecordsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisParamRecordsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_redis_param_records.param_records"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_redis_param_records.param_records"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_param_records.param_records", "instance_param_history.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_param_records.param_records", "instance_param_history.0.modify_time"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_param_records.param_records", "instance_param_history.0.new_value"), diff --git a/tencentcloud/data_source_tc_redis_zone_config.go b/tencentcloud/services/crs/data_source_tc_redis_zone_config.go similarity index 90% rename from tencentcloud/data_source_tc_redis_zone_config.go rename to tencentcloud/services/crs/data_source_tc_redis_zone_config.go index d1cd2f2cad..9b6f34d827 100644 --- a/tencentcloud/data_source_tc_redis_zone_config.go +++ b/tencentcloud/services/crs/data_source_tc_redis_zone_config.go @@ -1,4 +1,4 @@ -package tencentcloud +package crs import ( "context" @@ -6,11 +6,13 @@ import ( "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" ) -func dataSourceTencentRedisZoneConfig() *schema.Resource { +func DataSourceTencentCloudRedisZoneConfig() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentRedisZoneConfigRead, Schema: map[string]*schema.Schema{ @@ -22,7 +24,7 @@ func dataSourceTencentRedisZoneConfig() *schema.Resource { "type_id": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerMin(2), + ValidateFunc: tccommon.ValidateIntegerMin(2), Description: "Instance type ID.", }, "result_output_file": { @@ -91,13 +93,13 @@ func dataSourceTencentRedisZoneConfig() *schema.Resource { } func dataSourceTencentRedisZoneConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_redis_zone_config.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_redis_zone_config.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region if regionInterface, ok := d.GetOk("region"); ok { region = regionInterface.(string) @@ -206,7 +208,7 @@ func dataSourceTencentRedisZoneConfigRead(d *schema.ResourceData, meta interface if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), allZonesConfigs); err != nil { + if err := tccommon.WriteToFile(output.(string), allZonesConfigs); err != nil { log.Printf("[CRITAL]%s output file[%s] fail, reason[%s]\n", logId, output.(string), err.Error()) return err diff --git a/tencentcloud/data_source_tc_redis_zone_config_test.go b/tencentcloud/services/crs/data_source_tc_redis_zone_config_test.go similarity index 85% rename from tencentcloud/data_source_tc_redis_zone_config_test.go rename to tencentcloud/services/crs/data_source_tc_redis_zone_config_test.go index b9d20da884..cca2362412 100644 --- a/tencentcloud/data_source_tc_redis_zone_config_test.go +++ b/tencentcloud/services/crs/data_source_tc_redis_zone_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccDataSourceRedisZoneConfig_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccDataSourceRedisZoneConfig(), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_redis_zone_config.test"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_redis_zone_config.test"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_zone_config.test", "list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_zone_config.test", "list.0.zone"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_zone_config.test", "list.0.type"), @@ -28,7 +30,7 @@ func TestAccDataSourceRedisZoneConfig_basic(t *testing.T) { { Config: testAccDataSourceRedisZoneConfigWithRegion(), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_redis_zone_config.testWithRegion"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_redis_zone_config.testWithRegion"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_zone_config.testWithRegion", "list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_zone_config.testWithRegion", "list.0.zone"), resource.TestCheckResourceAttrSet("data.tencentcloud_redis_zone_config.testWithRegion", "list.0.type_id"), diff --git a/tencentcloud/services/crs/extension_redis.go b/tencentcloud/services/crs/extension_redis.go new file mode 100644 index 0000000000..7c85d622cf --- /dev/null +++ b/tencentcloud/services/crs/extension_redis.go @@ -0,0 +1,95 @@ +package crs + +// redis version https://cloud.tencent.com/document/api/239/20022#ProductConf +const ( + REDIS_VERSION_MASTER_SLAVE_REDIS = 2 + REDIS_VERSION_MASTER_SLAVE_CKV = 3 + REDIS_VERSION_CLUSTER_CKV = 4 + REDIS_VERSION_STANDALONE_REDIS = 5 + REDIS_VERSION_MASTER_SLAVE_REDIS4 = 6 + REDIS_VERSION_CLUSTER_REDIS = 7 + REDIS_VERSION_MASTER_SLAVE_REDIS5 = 8 + REDIS_VERSION_CLUSTER_REDIS5 = 9 +) + +var REDIS_NAMES = map[int64]string{ + REDIS_VERSION_MASTER_SLAVE_REDIS: "master_slave_redis", + REDIS_VERSION_MASTER_SLAVE_CKV: "master_slave_ckv", + REDIS_VERSION_CLUSTER_REDIS: "cluster_redis", + REDIS_VERSION_CLUSTER_CKV: "cluster_ckv", + REDIS_VERSION_STANDALONE_REDIS: "standalone_redis", + REDIS_VERSION_MASTER_SLAVE_REDIS4: "master_slave_redis4.0", + REDIS_VERSION_MASTER_SLAVE_REDIS5: "master_slave_redis5.0", + REDIS_VERSION_CLUSTER_REDIS5: "cluster_redis5.0", +} + +// redis status https://cloud.tencent.com/document/product/239/20018 +const ( + REDIS_STATUS_INIT = 0 + REDIS_STATUS_PROCESSING = 1 + REDIS_STATUS_ONLINE = 2 + REDIS_STATUS_ISOLATE = -2 + REDIS_STATUS_TODELETE = -3 +) + +var REDIS_STATUS = map[int64]string{ + REDIS_STATUS_INIT: "init", + REDIS_STATUS_PROCESSING: "processing", + REDIS_STATUS_ONLINE: "online", + REDIS_STATUS_ISOLATE: "isolate", + REDIS_STATUS_TODELETE: "todelete", +} + +/* +https://cloud.tencent.com/document/api/239/20022#TradeDealDetail +Order status +1: unpaid +2: paid, not shipped +3: in shipment +4: successfully +5: shipped failed +6: refunded +7: closed order +8: expired +9: order no longer valid +10: product no longer valid +11: payment refused +12: in payment +*/ +const ( + REDIS_ORDER_SUCCESS_DELIVERY = 4 + REDIS_ORDER_PAYMENT = 12 +) + +// https://cloud.tencent.com/document/api/239/30601 +const ( + REDIS_TASK_PREPARING = "preparing" + REDIS_TASK_RUNNING = "running" + REDIS_TASK_SUCCEED = "succeed" + REDIS_TASK_FAILED = "failed" + REDIS_TASK_ERROR = "error" +) + +// sdk redis not found error +const RedisInstanceNotFound = "ResourceNotFound.InstanceNotExists" + +const ( + REDIS_CHARGE_TYPE_POSTPAID = "POSTPAID" + REDIS_CHARGE_TYPE_PREPAID = "PREPAID" +) + +var REDIS_CHARGE_TYPE_ID = map[string]int64{ + REDIS_CHARGE_TYPE_POSTPAID: 0, + REDIS_CHARGE_TYPE_PREPAID: 1, +} + +var REDIS_CHARGE_TYPE_NAME = map[int64]string{ + 0: REDIS_CHARGE_TYPE_POSTPAID, + 1: REDIS_CHARGE_TYPE_PREPAID, +} + +var REDIS_PREPAID_PERIOD = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36} + +var REDIS_MODIFY_NETWORK_CONFIG = []string{"changeVip", "changeVpc", "changeBaseToVpc", "changeVPort"} + +var REDIS_RECYCLE_TIME = []int{0, 1, 2, 3, 7, 15} diff --git a/tencentcloud/services/crs/extension_tags.go b/tencentcloud/services/crs/extension_tags.go new file mode 100644 index 0000000000..1cfd693ac5 --- /dev/null +++ b/tencentcloud/services/crs/extension_tags.go @@ -0,0 +1,3 @@ +package crs + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/resource_tc_redis_account.go b/tencentcloud/services/crs/resource_tc_redis_account.go similarity index 77% rename from tencentcloud/resource_tc_redis_account.go rename to tencentcloud/services/crs/resource_tc_redis_account.go index 2513cbd4dc..b2335bb290 100644 --- a/tencentcloud/resource_tc_redis_account.go +++ b/tencentcloud/services/crs/resource_tc_redis_account.go @@ -1,4 +1,4 @@ -package tencentcloud +package crs import ( "context" @@ -7,14 +7,17 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudRedisAccount() *schema.Resource { +func ResourceTencentCloudRedisAccount() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisAccountCreate, Read: resourceTencentCloudRedisAccountRead, @@ -68,11 +71,11 @@ func resourceTencentCloudRedisAccount() *schema.Resource { } func resourceTencentCloudRedisAccountCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_account.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_account.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = redis.NewCreateInstanceAccountRequest() @@ -110,15 +113,15 @@ func resourceTencentCloudRedisAccountCreate(d *schema.ResourceData, meta interfa request.Privilege = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().CreateInstanceAccount(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().CreateInstanceAccount(request) if e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { if ee.Code == "FailedOperation.SystemError" { return resource.NonRetryableError(e) } } - return retryError(e) + 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()) } @@ -130,11 +133,11 @@ func resourceTencentCloudRedisAccountCreate(d *schema.ResourceData, meta interfa return err } - d.SetId(instanceId + FILED_SP + accountName) + d.SetId(instanceId + tccommon.FILED_SP + accountName) taskId := *response.Response.TaskId - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -155,10 +158,10 @@ func resourceTencentCloudRedisAccountCreate(d *schema.ResourceData, meta interfa return err } - conf := BuildStateChangeConf( + conf := tccommon.BuildStateChangeConf( []string{}, []string{"2"}, - 6*readRetryTimeout, + 6*tccommon.ReadRetryTimeout, time.Second, service.RedisAccountStateRefreshFunc(instanceId, accountName, []string{}), ) @@ -171,15 +174,15 @@ func resourceTencentCloudRedisAccountCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudRedisAccountRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_account.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_account.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -225,16 +228,16 @@ func resourceTencentCloudRedisAccountRead(d *schema.ResourceData, meta interface } func resourceTencentCloudRedisAccountUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_account.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_account.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := redis.NewModifyInstanceAccountRequest() response := redis.NewModifyInstanceAccountResponse() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -276,15 +279,15 @@ func resourceTencentCloudRedisAccountUpdate(d *schema.ResourceData, meta interfa request.Privilege = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().ModifyInstanceAccount(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().ModifyInstanceAccount(request) if e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { if ee.Code == "FailedOperation.SystemError" { return resource.NonRetryableError(e) } } - return retryError(e) + 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()) } @@ -297,8 +300,8 @@ func resourceTencentCloudRedisAccountUpdate(d *schema.ResourceData, meta interfa } taskId := *response.Response.TaskId - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -319,10 +322,10 @@ func resourceTencentCloudRedisAccountUpdate(d *schema.ResourceData, meta interfa return err } - conf := BuildStateChangeConf( + conf := tccommon.BuildStateChangeConf( []string{}, []string{"2"}, - 6*readRetryTimeout, + 6*tccommon.ReadRetryTimeout, time.Second, service.RedisAccountStateRefreshFunc(instanceId, accountName, []string{}), ) @@ -335,14 +338,14 @@ func resourceTencentCloudRedisAccountUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudRedisAccountDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_account.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_account.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -354,7 +357,7 @@ func resourceTencentCloudRedisAccountDelete(d *schema.ResourceData, meta interfa return err } - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { diff --git a/tencentcloud/resource_tc_redis_account_test.go b/tencentcloud/services/crs/resource_tc_redis_account_test.go similarity index 73% rename from tencentcloud/resource_tc_redis_account_test.go rename to tencentcloud/services/crs/resource_tc_redis_account_test.go index 7aa1b59cf4..ae86590eb8 100644 --- a/tencentcloud/resource_tc_redis_account_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_account_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package crs_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccrs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/crs" + "context" "fmt" "strings" @@ -15,8 +19,8 @@ import ( func TestAccTencentCloudRedisAccountResource_basic(t *testing.T) { // t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudRedisAccountDestroy, Steps: []resource.TestStep{ { @@ -24,7 +28,7 @@ func TestAccTencentCloudRedisAccountResource_basic(t *testing.T) { Check: resource.ComposeAggregateTestCheckFunc( testAccTencentCloudRedisAccountExists("tencentcloud_redis_account.account"), resource.TestCheckResourceAttrSet("tencentcloud_redis_account.account", "id"), - resource.TestCheckResourceAttr("tencentcloud_redis_account.account", "instance_id", defaultCrsInstanceId), + resource.TestCheckResourceAttr("tencentcloud_redis_account.account", "instance_id", tcacctest.DefaultCrsInstanceId), resource.TestCheckResourceAttr("tencentcloud_redis_account.account", "account_name", "account_test"), resource.TestCheckResourceAttr("tencentcloud_redis_account.account", "remark", "redis desc"), resource.TestCheckResourceAttr("tencentcloud_redis_account.account", "readonly_policy.#", "1"), @@ -44,22 +48,22 @@ func TestAccTencentCloudRedisAccountResource_basic(t *testing.T) { func testAccTencentCloudRedisAccountExists(r string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[r] if !ok { return fmt.Errorf("resource %s is not found", r) } - items := strings.Split(rs.Primary.ID, FILED_SP) + items := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(items) != 2 { return fmt.Errorf("invalid ID %s", rs.Primary.ID) } instanceId := items[0] accountName := items[1] - service := RedisService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svccrs.NewRedisService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) account, err := service.DescribeRedisAccountById(ctx, instanceId, accountName) if err != nil { return err @@ -73,17 +77,17 @@ func testAccTencentCloudRedisAccountExists(r string) resource.TestCheckFunc { } func testAccTencentCloudRedisAccountDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svccrs.NewRedisService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_redis_account" { continue } time.Sleep(5 * time.Second) - items := strings.Split(rs.Primary.ID, FILED_SP) + items := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(items) != 2 { return fmt.Errorf("invalid ID %s", rs.Primary.ID) } @@ -103,7 +107,7 @@ func testAccTencentCloudRedisAccountDestroy(s *terraform.State) error { const testAccRedisAccountVar = ` variable "instance_id" { - default = "` + defaultCrsInstanceId + `" + default = "` + tcacctest.DefaultCrsInstanceId + `" } ` diff --git a/tencentcloud/resource_tc_redis_backup_config.go b/tencentcloud/services/crs/resource_tc_redis_backup_config.go similarity index 75% rename from tencentcloud/resource_tc_redis_backup_config.go rename to tencentcloud/services/crs/resource_tc_redis_backup_config.go index 5491f52666..888e93b48a 100644 --- a/tencentcloud/resource_tc_redis_backup_config.go +++ b/tencentcloud/services/crs/resource_tc_redis_backup_config.go @@ -1,15 +1,17 @@ -package tencentcloud +package crs import ( "context" "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" ) -func resourceTencentCloudRedisBackupConfig() *schema.Resource { +func ResourceTencentCloudRedisBackupConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisBackupConfigCreate, Read: resourceTencentCloudRedisBackupConfigRead, @@ -30,7 +32,7 @@ func resourceTencentCloudRedisBackupConfig() *schema.Resource { "backup_time": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue([]string{ + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{ "00:00-01:00", "01:00-02:00", "02:00-03:00", "03:00-04:00", "04:00-05:00", "05:00-06:00", "06:00-07:00", "07:00-08:00", "08:00-09:00", @@ -55,7 +57,7 @@ func resourceTencentCloudRedisBackupConfig() *schema.Resource { } func resourceTencentCloudRedisBackupConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_backup_config.create")() + defer tccommon.LogElapsed("resource.tencentcloud_redis_backup_config.create")() d.SetId(d.Get("redis_id").(string)) @@ -63,14 +65,14 @@ func resourceTencentCloudRedisBackupConfigCreate(d *schema.ResourceData, meta in } func resourceTencentCloudRedisBackupConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_backup_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_backup_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { backupPeriods, backupTime, e := service.DescribeAutoBackupConfig(ctx, d.Id()) if e != nil { if sdkErr, ok := e.(*errors.TencentCloudSDKError); ok { @@ -79,7 +81,7 @@ func resourceTencentCloudRedisBackupConfigRead(d *schema.ResourceData, meta inte return nil } } - return retryError(e) + return tccommon.RetryError(e) } _ = d.Set("backup_time", backupTime) _ = d.Set("redis_id", d.Id()) @@ -93,17 +95,17 @@ func resourceTencentCloudRedisBackupConfigRead(d *schema.ResourceData, meta inte } func resourceTencentCloudRedisBackupConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_backup_config.update")() + defer tccommon.LogElapsed("resource.tencentcloud_redis_backup_config.update")() weeksAllows := map[string]bool{ "Monday": true, "Tuesday": true, "Wednesday": true, "Thursday": true, "Friday": true, "Saturday": true, "Sunday": true, } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( isUpdate = false @@ -139,12 +141,12 @@ func resourceTencentCloudRedisBackupConfigUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudRedisBackupConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_backup_config.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_redis_backup_config.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var ( backupPeriods = []string{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"} diff --git a/tencentcloud/resource_tc_redis_backup_config_test.go b/tencentcloud/services/crs/resource_tc_redis_backup_config_test.go similarity index 81% rename from tencentcloud/resource_tc_redis_backup_config_test.go rename to tencentcloud/services/crs/resource_tc_redis_backup_config_test.go index b1127e82d9..fd3b22dd77 100644 --- a/tencentcloud/resource_tc_redis_backup_config_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_backup_config_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package crs_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccrs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/crs" + "context" "fmt" "testing" @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudRedisBackupConfig(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudRedisBackupConfigDestroy, Steps: []resource.TestStep{ { @@ -51,15 +55,15 @@ func TestAccTencentCloudRedisBackupConfig(t *testing.T) { func testAccTencentCloudRedisBackupConfigExists(r string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[r] if !ok { return fmt.Errorf("resource %s is not found", r) } - service := RedisService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svccrs.NewRedisService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, _, err := service.DescribeAutoBackupConfig(ctx, rs.Primary.ID) if err != nil { return err @@ -69,10 +73,10 @@ func testAccTencentCloudRedisBackupConfigExists(r string) resource.TestCheckFunc } func testAccTencentCloudRedisBackupConfigDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svccrs.NewRedisService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_redis_backup_config" { continue @@ -91,7 +95,7 @@ func testAccTencentCloudRedisBackupConfigDestroy(s *terraform.State) error { } func testAccRedisBackupConfigUpdate() string { - return defaultVpcSubnets + ` + return tcacctest.DefaultVpcSubnets + ` resource "tencentcloud_redis_instance" "redis_instance_test" { availability_zone = "ap-guangzhou-3" type_id = 2 @@ -108,7 +112,7 @@ resource "tencentcloud_redis_backup_config" "redis_backup_config" { } func testAccRedisBackupConfig() string { - return defaultVpcSubnets + ` + return tcacctest.DefaultVpcSubnets + ` resource "tencentcloud_redis_instance" "redis_instance_test" { availability_zone = "ap-guangzhou-3" type_id = 2 diff --git a/tencentcloud/resource_tc_redis_backup_download_restriction.go b/tencentcloud/services/crs/resource_tc_redis_backup_download_restriction.go similarity index 83% rename from tencentcloud/resource_tc_redis_backup_download_restriction.go rename to tencentcloud/services/crs/resource_tc_redis_backup_download_restriction.go index efcbf7e962..68bf51baf0 100644 --- a/tencentcloud/resource_tc_redis_backup_download_restriction.go +++ b/tencentcloud/services/crs/resource_tc_redis_backup_download_restriction.go @@ -1,16 +1,19 @@ -package tencentcloud +package crs import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudRedisBackupDownloadRestriction() *schema.Resource { +func ResourceTencentCloudRedisBackupDownloadRestriction() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisBackupDownloadRestrictionCreate, Read: resourceTencentCloudRedisBackupDownloadRestrictionRead, @@ -74,10 +77,10 @@ func resourceTencentCloudRedisBackupDownloadRestriction() *schema.Resource { } func resourceTencentCloudRedisBackupDownloadRestrictionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_backup_download_restriction.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_backup_download_restriction.create")() + defer tccommon.InconsistentCheck(d, meta)() - region := meta.(*TencentCloudClient).apiV3Conn.Region + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region d.SetId(region) @@ -85,14 +88,14 @@ func resourceTencentCloudRedisBackupDownloadRestrictionCreate(d *schema.Resource } func resourceTencentCloudRedisBackupDownloadRestrictionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_backup_download_restriction.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_backup_download_restriction.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} backupDownloadRestriction, err := service.DescribeRedisBackupDownloadRestrictionById(ctx) if err != nil { return err @@ -144,10 +147,10 @@ func resourceTencentCloudRedisBackupDownloadRestrictionRead(d *schema.ResourceDa } func resourceTencentCloudRedisBackupDownloadRestrictionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_backup_download_restriction.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_backup_download_restriction.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := redis.NewModifyBackupDownloadRestrictionRequest() @@ -191,10 +194,10 @@ func resourceTencentCloudRedisBackupDownloadRestrictionUpdate(d *schema.Resource } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().ModifyBackupDownloadRestriction(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().ModifyBackupDownloadRestriction(request) if e != nil { - return retryError(e) + 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()) } @@ -209,8 +212,8 @@ func resourceTencentCloudRedisBackupDownloadRestrictionUpdate(d *schema.Resource } func resourceTencentCloudRedisBackupDownloadRestrictionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_backup_download_restriction.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_backup_download_restriction.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_redis_backup_download_restriction_test.go b/tencentcloud/services/crs/resource_tc_redis_backup_download_restriction_test.go similarity index 90% rename from tencentcloud/resource_tc_redis_backup_download_restriction_test.go rename to tencentcloud/services/crs/resource_tc_redis_backup_download_restriction_test.go index b35616c445..358850fd9f 100644 --- a/tencentcloud/resource_tc_redis_backup_download_restriction_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_backup_download_restriction_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudRedisBackupDownloadRestrictionResource_basic(t *testing. t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisBackupDownloadRestriction, @@ -39,7 +41,7 @@ func TestAccTencentCloudRedisBackupDownloadRestrictionResource_basic(t *testing. const testAccRedisBackupDownloadRestrictionVar = ` variable "vpc_id" { - default = "` + defaultCrsVpcId + `" + default = "` + tcacctest.DefaultCrsVpcId + `" } ` diff --git a/tencentcloud/resource_tc_redis_backup_operation.go b/tencentcloud/services/crs/resource_tc_redis_backup_operation.go similarity index 73% rename from tencentcloud/resource_tc_redis_backup_operation.go rename to tencentcloud/services/crs/resource_tc_redis_backup_operation.go index f778e13ee5..c2fc629985 100644 --- a/tencentcloud/resource_tc_redis_backup_operation.go +++ b/tencentcloud/services/crs/resource_tc_redis_backup_operation.go @@ -1,18 +1,21 @@ -package tencentcloud +package crs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudRedisBackupOperation() *schema.Resource { +func ResourceTencentCloudRedisBackupOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisBackupOperationCreate, Read: resourceTencentCloudRedisBackupOperationRead, @@ -44,11 +47,11 @@ func resourceTencentCloudRedisBackupOperation() *schema.Resource { } func resourceTencentCloudRedisBackupOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_backup_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_backup_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = redis.NewManualBackupInstanceRequest() @@ -68,10 +71,10 @@ func resourceTencentCloudRedisBackupOperationCreate(d *schema.ResourceData, meta request.StorageDays = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().ManualBackupInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().ManualBackupInstance(request) if e != nil { - return retryError(e) + 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()) } @@ -86,9 +89,9 @@ func resourceTencentCloudRedisBackupOperationCreate(d *schema.ResourceData, meta taskId := *response.Response.TaskId d.SetId(instanceId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if taskId > 0 { - err := resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -114,15 +117,15 @@ func resourceTencentCloudRedisBackupOperationCreate(d *schema.ResourceData, meta } func resourceTencentCloudRedisBackupOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_backup_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_backup_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudRedisBackupOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_backup_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_backup_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_redis_backup_operation_test.go b/tencentcloud/services/crs/resource_tc_redis_backup_operation_test.go similarity index 78% rename from tencentcloud/resource_tc_redis_backup_operation_test.go rename to tencentcloud/services/crs/resource_tc_redis_backup_operation_test.go index 5b85ab9962..26b5d5a955 100644 --- a/tencentcloud/resource_tc_redis_backup_operation_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_backup_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudRedisBackupOperationResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisBackupOperation, @@ -27,7 +29,7 @@ func TestAccTencentCloudRedisBackupOperationResource_basic(t *testing.T) { const testAccRedisBackupOperationVar = ` variable "instance_id" { - default = "` + defaultCrsInstanceId + `" + default = "` + tcacctest.DefaultCrsInstanceId + `" } ` diff --git a/tencentcloud/resource_tc_redis_clear_instance_operation.go b/tencentcloud/services/crs/resource_tc_redis_clear_instance_operation.go similarity index 72% rename from tencentcloud/resource_tc_redis_clear_instance_operation.go rename to tencentcloud/services/crs/resource_tc_redis_clear_instance_operation.go index f2efb51102..4d0169b4c3 100644 --- a/tencentcloud/resource_tc_redis_clear_instance_operation.go +++ b/tencentcloud/services/crs/resource_tc_redis_clear_instance_operation.go @@ -1,18 +1,21 @@ -package tencentcloud +package crs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudRedisClearInstanceOperation() *schema.Resource { +func ResourceTencentCloudRedisClearInstanceOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisClearInstanceOperationCreate, Read: resourceTencentCloudRedisClearInstanceOperationRead, @@ -40,11 +43,11 @@ func resourceTencentCloudRedisClearInstanceOperation() *schema.Resource { } func resourceTencentCloudRedisClearInstanceOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_clear_instance_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_clear_instance_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = redis.NewClearInstanceRequest() @@ -60,10 +63,10 @@ func resourceTencentCloudRedisClearInstanceOperationCreate(d *schema.ResourceDat request.Password = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().ClearInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().ClearInstance(request) if e != nil { - return retryError(e) + 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()) } @@ -77,9 +80,9 @@ func resourceTencentCloudRedisClearInstanceOperationCreate(d *schema.ResourceDat d.SetId(instanceId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} taskId := *response.Response.TaskId - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -104,15 +107,15 @@ func resourceTencentCloudRedisClearInstanceOperationCreate(d *schema.ResourceDat } func resourceTencentCloudRedisClearInstanceOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_clear_instance_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_clear_instance_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudRedisClearInstanceOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_clear_instance_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_clear_instance_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_redis_clear_instance_operation_test.go b/tencentcloud/services/crs/resource_tc_redis_clear_instance_operation_test.go similarity index 82% rename from tencentcloud/resource_tc_redis_clear_instance_operation_test.go rename to tencentcloud/services/crs/resource_tc_redis_clear_instance_operation_test.go index 286c0a6c4e..8365d1d3ed 100644 --- a/tencentcloud/resource_tc_redis_clear_instance_operation_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_clear_instance_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudRedisClearInstanceOperationResource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisClearInstanceOperation, diff --git a/tencentcloud/resource_tc_redis_connection_config.go b/tencentcloud/services/crs/resource_tc_redis_connection_config.go similarity index 82% rename from tencentcloud/resource_tc_redis_connection_config.go rename to tencentcloud/services/crs/resource_tc_redis_connection_config.go index f76199ef08..cb5ac2fe94 100644 --- a/tencentcloud/resource_tc_redis_connection_config.go +++ b/tencentcloud/services/crs/resource_tc_redis_connection_config.go @@ -1,18 +1,21 @@ -package tencentcloud +package crs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudRedisConnectionConfig() *schema.Resource { +func ResourceTencentCloudRedisConnectionConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisConnectionConfigCreate, Read: resourceTencentCloudRedisConnectionConfigRead, @@ -69,8 +72,8 @@ func resourceTencentCloudRedisConnectionConfig() *schema.Resource { } func resourceTencentCloudRedisConnectionConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_connection_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_connection_config.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( instanceId string @@ -85,14 +88,14 @@ func resourceTencentCloudRedisConnectionConfigCreate(d *schema.ResourceData, met } func resourceTencentCloudRedisConnectionConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_connection_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_connection_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -148,11 +151,11 @@ func resourceTencentCloudRedisConnectionConfigRead(d *schema.ResourceData, meta } func resourceTencentCloudRedisConnectionConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_connection_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_connection_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := redis.NewModifyConnectionConfigRequest() response := redis.NewModifyConnectionConfigResponse() @@ -168,15 +171,15 @@ func resourceTencentCloudRedisConnectionConfigUpdate(d *schema.ResourceData, met request.Bandwidth = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().ModifyConnectionConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().ModifyConnectionConfig(request) if e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { if ee.Code == "FailedOperation.SystemError" { return resource.NonRetryableError(e) } } - return retryError(e) + 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()) } @@ -188,10 +191,10 @@ func resourceTencentCloudRedisConnectionConfigUpdate(d *schema.ResourceData, met return err } - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} taskId := *response.Response.TaskId - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -216,8 +219,8 @@ func resourceTencentCloudRedisConnectionConfigUpdate(d *schema.ResourceData, met } func resourceTencentCloudRedisConnectionConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_connection_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_connection_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_redis_connection_config_test.go b/tencentcloud/services/crs/resource_tc_redis_connection_config_test.go similarity index 72% rename from tencentcloud/resource_tc_redis_connection_config_test.go rename to tencentcloud/services/crs/resource_tc_redis_connection_config_test.go index bd9baa17f7..a79d3f081d 100644 --- a/tencentcloud/resource_tc_redis_connection_config_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_connection_config_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package crs_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccrs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/crs" + "context" "fmt" "testing" @@ -13,15 +17,15 @@ import ( func TestAccTencentCloudRedisConnectionConfigResource_basic(t *testing.T) { // t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisConnectionConfig, Check: resource.ComposeAggregateTestCheckFunc( testAccTencentCloudRedisConnectionConfigExists("tencentcloud_redis_connection_config.connection_config"), resource.TestCheckResourceAttrSet("tencentcloud_redis_connection_config.connection_config", "id"), - resource.TestCheckResourceAttr("tencentcloud_redis_connection_config.connection_config", "instance_id", defaultCrsInstanceId), + resource.TestCheckResourceAttr("tencentcloud_redis_connection_config.connection_config", "instance_id", tcacctest.DefaultCrsInstanceId), resource.TestCheckResourceAttr("tencentcloud_redis_connection_config.connection_config", "client_limit", "20000"), resource.TestCheckResourceAttr("tencentcloud_redis_connection_config.connection_config", "add_bandwidth", "20"), ), @@ -38,15 +42,15 @@ func TestAccTencentCloudRedisConnectionConfigResource_basic(t *testing.T) { func testAccTencentCloudRedisConnectionConfigExists(r string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[r] if !ok { return fmt.Errorf("resource %s is not found", r) } - service := RedisService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svccrs.NewRedisService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) connectionConfig, err := service.DescribeRedisInstanceById(ctx, rs.Primary.ID) if err != nil { return err @@ -61,7 +65,7 @@ func testAccTencentCloudRedisConnectionConfigExists(r string) resource.TestCheck const testAccRedisConnectionConfigVar = ` variable "instance_id" { - default = "` + defaultCrsInstanceId + `" + default = "` + tcacctest.DefaultCrsInstanceId + `" } ` diff --git a/tencentcloud/resource_tc_redis_instance.go b/tencentcloud/services/crs/resource_tc_redis_instance.go similarity index 87% rename from tencentcloud/resource_tc_redis_instance.go rename to tencentcloud/services/crs/resource_tc_redis_instance.go index 0de41c756f..3bf8ecc1d6 100644 --- a/tencentcloud/resource_tc_redis_instance.go +++ b/tencentcloud/services/crs/resource_tc_redis_instance.go @@ -1,4 +1,4 @@ -package tencentcloud +package crs import ( "context" @@ -8,17 +8,20 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) //internal version: replace import begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. //internal version: replace import end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. -func resourceTencentCloudRedisInstance() *schema.Resource { +func ResourceTencentCloudRedisInstance() *schema.Resource { types := []string{} for _, v := range REDIS_NAMES { types = append(types, "`"+v+"`") @@ -51,21 +54,21 @@ func resourceTencentCloudRedisInstance() *schema.Resource { "type_id": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateIntegerMin(2), + ValidateFunc: tccommon.ValidateIntegerMin(2), Description: "Instance type. Available values reference data source `tencentcloud_redis_zone_config` or [document](https://intl.cloud.tencent.com/document/product/239/32069), toggle immediately when modified.", }, "redis_shard_num": { Type: schema.TypeInt, Optional: true, Computed: true, - ValidateFunc: validateAllowedIntValue([]int{1, 3, 5, 8, 12, 16, 24, 32, 40, 48, 64, 80, 96, 128}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{1, 3, 5, 8, 12, 16, 24, 32, 40, 48, 64, 80, 96, 128}), Description: "The number of instance shards; this parameter does not need to be configured for standard version instances; for cluster version instances, the number of shards ranges from: [`1`, `3`, `5`, `8`, `12`, `16`, `24 `, `32`, `40`, `48`, `64`, `80`, `96`, `128`].", }, "redis_replicas_num": { Type: schema.TypeInt, Optional: true, Default: 1, - ValidateFunc: validateAllowedIntValue([]int{1, 2, 3, 4, 5}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{1, 2, 3, 4, 5}), Description: "The number of instance copies. This is not required for standalone and master slave versions and must equal to count of `replica_zone_ids`, Non-multi-AZ does not require `replica_zone_ids`; Redis memory version 4.0, 5.0, 6.2 standard architecture and cluster architecture support the number of copies in the range [1, 2, 3, 4, 5]; Redis 2.8 standard version and CKV standard version only support 1 copy.", }, "replica_zone_ids": { @@ -96,7 +99,7 @@ func resourceTencentCloudRedisInstance() *schema.Resource { Type: schema.TypeString, Optional: true, Sensitive: true, - ValidateFunc: validateMysqlPassword, + ValidateFunc: tccommon.ValidateMysqlPassword, Description: "Password for a Redis user, which should be 8 to 16 characters. NOTE: Only `no_auth=true` specified can make password empty.", }, "no_auth": { @@ -113,21 +116,21 @@ func resourceTencentCloudRedisInstance() *schema.Resource { "mem_size": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateAllowedIntValue([]int{1024, 2048, 4096, 8192, 12288, 16384, 20480, 24576, 32768, 40960, 49152, 65536}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{1024, 2048, 4096, 8192, 12288, 16384, 20480, 24576, 32768, 40960, 49152, 65536}), Description: "The memory volume of an available instance(in MB), please refer to `tencentcloud_redis_zone_config.list[zone].shard_memories`. When redis is standard type, it represents total memory size of the instance; when Redis is cluster type, it represents memory size of per sharding.", }, "vpc_id": { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateStringLengthInRange(1, 100), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 100), Description: "ID of the vpc with which the instance is to be associated. When the `operation_network` is `changeVpc` or `changeBaseToVpc`, this parameter needs to be configured.", }, "subnet_id": { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateStringLengthInRange(1, 100), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 100), Description: "Specifies which subnet the instance should belong to. When the `operation_network` is `changeVpc` or `changeBaseToVpc`, this parameter needs to be configured.", }, "security_groups": { @@ -160,14 +163,14 @@ func resourceTencentCloudRedisInstance() *schema.Resource { "operation_network": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(REDIS_MODIFY_NETWORK_CONFIG), + ValidateFunc: tccommon.ValidateAllowedStringValue(REDIS_MODIFY_NETWORK_CONFIG), Description: "Refers to the category of the pre-modified network, including: `changeVip`: refers to switching the private network, including its intranet IPv4 address and port; `changeVpc`: refers to switching the subnet to which the private network belongs; `changeBaseToVpc`: refers to switching the basic network to a private network; `changeVPort`: refers to only modifying the instance network port.", }, "recycle": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue(REDIS_RECYCLE_TIME), + ValidateFunc: tccommon.ValidateAllowedIntValue(REDIS_RECYCLE_TIME), Description: "Original intranet IPv4 address retention time: unit: day, value range: `0`, `1`, `2`, `3`, `7`, `15`.", }, @@ -203,13 +206,13 @@ func resourceTencentCloudRedisInstance() *schema.Resource { Optional: true, ForceNew: true, Default: REDIS_CHARGE_TYPE_POSTPAID, - ValidateFunc: validateAllowedStringValue([]string{REDIS_CHARGE_TYPE_POSTPAID, REDIS_CHARGE_TYPE_PREPAID}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{REDIS_CHARGE_TYPE_POSTPAID, REDIS_CHARGE_TYPE_PREPAID}), Description: "The charge type of instance. Valid values: `PREPAID` and `POSTPAID`. Default value is `POSTPAID`. Note: TencentCloud International only supports `POSTPAID`. Caution that update operation on this field will delete old instances and create new with new charge type.", }, "prepaid_period": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue(REDIS_PREPAID_PERIOD), + ValidateFunc: tccommon.ValidateAllowedIntValue(REDIS_PREPAID_PERIOD), Description: "The tenancy (time unit is month) of the prepaid instance, NOTE: it only works when charge_type is set to `PREPAID`. Valid values are `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12`, `24`, `36`.", }, "force_delete": { @@ -221,7 +224,7 @@ func resourceTencentCloudRedisInstance() *schema.Resource { Type: schema.TypeInt, Optional: true, ForceNew: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1, 2}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1, 2}), Default: 0, Description: "Auto-renew flag. 0 - default state (manual renewal); 1 - automatic renewal; 2 - explicit no automatic renewal.", }, @@ -254,12 +257,12 @@ func resourceTencentCloudRedisInstance() *schema.Resource { } func resourceTencentCloudRedisInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_instance.create")() + defer tccommon.LogElapsed("resource.tencentcloud_redis_instance.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() redisService := RedisService{client: client} tagService := TagService{client: client} //internal version: replace clientCreate begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. @@ -366,11 +369,11 @@ func resourceTencentCloudRedisInstanceCreate(d *schema.ResourceData, meta interf for _, v := range redisItem.ReplicaNum { redisReplicasNums = append(redisReplicasNums, *v) } - if !IsContains(redisShardNums, fmt.Sprintf("%d", redisShardNum)) { + if !tccommon.IsContains(redisShardNums, fmt.Sprintf("%d", redisShardNum)) { numErrors = append(numErrors, fmt.Sprintf("redis_shard_num : %s", strings.Join(redisShardNums, ","))) } - if !IsContains(redisReplicasNums, fmt.Sprintf("%d", redisReplicasNum)) { + if !tccommon.IsContains(redisReplicasNums, fmt.Sprintf("%d", redisReplicasNum)) { numErrors = append(numErrors, fmt.Sprintf(" redis_replicas_num : %s", strings.Join(redisReplicasNums, ","))) } @@ -389,7 +392,7 @@ func resourceTencentCloudRedisInstanceCreate(d *schema.ResourceData, meta interf } //internal version: replace null begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} //internal version: replace null end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. nodeInfo := make([]*redis.RedisNodeInfo, 0) @@ -459,7 +462,7 @@ func resourceTencentCloudRedisInstanceCreate(d *schema.ResourceData, meta interf //internal version: replace setTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. //internal version: replace queryAndSetId begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. - _, _, _, err = redisService.CheckRedisOnlineOk(ctx, redisId, 20*readRetryTimeout) + _, _, _, err = redisService.CheckRedisOnlineOk(ctx, redisId, 20*tccommon.ReadRetryTimeout) if err != nil { log.Printf("[CRITAL]%s create redis task fail, reason:%s\n", logId, err.Error()) @@ -470,7 +473,7 @@ func resourceTencentCloudRedisInstanceCreate(d *schema.ResourceData, meta interf //internal version: replace null begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - resourceName := BuildTagResourceName("redis", "instance", region, d.Id()) + resourceName := tccommon.BuildTagResourceName("redis", "instance", region, d.Id()) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -481,13 +484,13 @@ func resourceTencentCloudRedisInstanceCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudRedisInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) //internal version: replace clientRead begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} //internal version: replace clientRead end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. var onlineHas = true @@ -496,8 +499,8 @@ func resourceTencentCloudRedisInstanceRead(d *schema.ResourceData, meta interfac info *redis.InstanceSet e error ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - has, _, info, e = service.CheckRedisOnlineOk(ctx, d.Id(), readRetryTimeout*20) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + has, _, info, e = service.CheckRedisOnlineOk(ctx, d.Id(), tccommon.ReadRetryTimeout*20) if info != nil { if *info.Status == REDIS_STATUS_ISOLATE || *info.Status == REDIS_STATUS_TODELETE { d.SetId("") @@ -616,7 +619,7 @@ func resourceTencentCloudRedisInstanceRead(d *schema.ResourceData, meta interfac } } //internal version: replace resourceTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "redis", "instance", tcClient.Region, d.Id()) //internal version: replace resourceTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. @@ -632,14 +635,14 @@ func resourceTencentCloudRedisInstanceRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_instance.update")() + defer tccommon.LogElapsed("resource.tencentcloud_redis_instance.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() redisService := RedisService{client: client} tagService := TagService{client: client} region := client.Region @@ -682,11 +685,11 @@ func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interf return fmt.Errorf("redis mem_size value cannot be set to less than 1") } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { _, err := redisService.UpgradeInstance(ctx, id, newMemSize, redisShardNum, redisReplicasNum, nil) if err != nil { // Upgrade memory will cause instance lock and cannot acknowledge by polling status, wait until lock release - return retryError(err, redis.FAILEDOPERATION_UNKNOWN, redis.FAILEDOPERATION_SYSTEMERROR) + return tccommon.RetryError(err, redis.FAILEDOPERATION_UNKNOWN, redis.FAILEDOPERATION_SYSTEMERROR) } return nil }) @@ -710,11 +713,11 @@ func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interf oReplica, _ := d.GetChange("redis_replicas_num") redisReplicasNum := oReplica.(int) memSize := d.Get("mem_size").(int) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { _, err := redisService.UpgradeInstance(ctx, id, memSize, redisShardNum, redisReplicasNum, nil) if err != nil { // Upgrade memory will cause instance lock and cannot acknowledge by polling status, wait until lock release - return retryError(err, redis.FAILEDOPERATION_UNKNOWN, redis.FAILEDOPERATION_SYSTEMERROR) + return tccommon.RetryError(err, redis.FAILEDOPERATION_UNKNOWN, redis.FAILEDOPERATION_SYSTEMERROR) } return nil }) @@ -748,11 +751,11 @@ func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interf ) // After redis spec modified, reset password may not successfully response immediately. - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { taskId, err = redisService.ResetPassword(ctx, id, password, noAuth) if err != nil { log.Printf("[CRITAL]%s redis change password error, reason:%s\n", logId, err.Error()) - return retryError(err, redis.FAILEDOPERATION_SYSTEMERROR) + return tccommon.RetryError(err, redis.FAILEDOPERATION_SYSTEMERROR) } return nil }) @@ -761,7 +764,7 @@ func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interf return err } - err = resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := redisService.DescribeTaskInfo(ctx, id, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -787,10 +790,10 @@ func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interf request := redis.NewApplyParamsTemplateRequest() request.InstanceIds = []*string{&id} request.TemplateId = helper.String(d.Get("params_template_id").(string)) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { _, err := redisService.ApplyParamsTemplate(ctx, request) if err != nil { - return retryError(err, redis.FAILEDOPERATION_SYSTEMERROR, redis.RESOURCEUNAVAILABLE_INSTANCELOCKEDERROR) + return tccommon.RetryError(err, redis.FAILEDOPERATION_SYSTEMERROR, redis.RESOURCEUNAVAILABLE_INSTANCELOCKEDERROR) } return nil }) @@ -826,10 +829,10 @@ func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interf request.InstanceId = &id request.TargetInstanceType = helper.String(strconv.Itoa(typeId)) request.SwitchOption = helper.IntInt64(2) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().UpgradeInstanceVersion(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().UpgradeInstanceVersion(request) if e != nil { - return retryError(e) + 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()) } @@ -840,8 +843,8 @@ func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interf return err } - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} - _, _, _, err = service.CheckRedisOnlineOk(ctx, id, 20*readRetryTimeout) + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + _, _, _, err = service.CheckRedisOnlineOk(ctx, id, 20*tccommon.ReadRetryTimeout) if err != nil { log.Printf("[CRITAL]%s redis upgradeVersionOperation fail, reason:%s\n", logId, err.Error()) return err @@ -892,8 +895,8 @@ func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interf } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().ModifyNetworkConfig(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().ModifyNetworkConfig(request) if e != nil { if _, ok := e.(*sdkErrors.TencentCloudSDKError); !ok { return resource.RetryableError(e) @@ -910,8 +913,8 @@ func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interf return err } - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} - _, _, _, err = service.CheckRedisOnlineOk(ctx, id, 20*readRetryTimeout) + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + _, _, _, err = service.CheckRedisOnlineOk(ctx, id, 20*tccommon.ReadRetryTimeout) if err != nil { log.Printf("[CRITAL]%s redis networkConfig fail, reason:%s\n", logId, err.Error()) return err @@ -924,7 +927,7 @@ func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interf oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) //internal version: replace setTagUpdate begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. - resourceName := BuildTagResourceName("redis", "instance", region, id) + resourceName := tccommon.BuildTagResourceName("redis", "instance", region, id) //internal version: replace setTagUpdate end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err @@ -941,16 +944,16 @@ func resourceTencentCloudRedisInstanceUpdate(d *schema.ResourceData, meta interf func resourceTencentCloudRedisInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_instance.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_redis_instance.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} // Collect infos before deleting action var chargeType string - has, _, info, err := service.CheckRedisOnlineOk(ctx, d.Id(), 20*readRetryTimeout) + has, _, info, err := service.CheckRedisOnlineOk(ctx, d.Id(), 20*tccommon.ReadRetryTimeout) if err != nil { log.Printf("[CRITAL]%s redis querying before deleting task fail, reason:%s\n", logId, err.Error()) @@ -965,7 +968,7 @@ func resourceTencentCloudRedisInstanceDelete(d *schema.ResourceData, meta interf var wait = func(action string, taskInfo interface{}) (errRet error) { - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { var ok bool var err error switch v := taskInfo.(type) { @@ -1012,7 +1015,7 @@ func resourceTencentCloudRedisInstanceDelete(d *schema.ResourceData, meta interf } // Deal info only support create and renew and resize, need to check destroy status by describing api. - if errDestroyChecking := resource.Retry(20*readRetryTimeout, func() *resource.RetryError { + if errDestroyChecking := resource.Retry(20*tccommon.ReadRetryTimeout, func() *resource.RetryError { has, isolated, err := service.CheckRedisDestroyOk(ctx, d.Id()) if err != nil { log.Printf("[CRITAL]%s CheckRedisDestroyOk fail, reason:%s\n", logId, err.Error()) @@ -1064,12 +1067,12 @@ func resourceRedisNodeSetModify(ctx context.Context, service *RedisService, d *s oz := helper.InterfacesIntegers(o.([]interface{})) nz := helper.InterfacesIntegers(n.([]interface{})) log.Printf("o = %v, n = %v", oz, nz) - adds, lacks := GetListDiffs(oz, nz) + adds, lacks := tccommon.GetListDiffs(oz, nz) var redisNodeInfos []*redis.RedisNodeInfo if len(adds) > 0 { - _, _, info, err := service.CheckRedisOnlineOk(ctx, id, readRetryTimeout) + _, _, info, err := service.CheckRedisOnlineOk(ctx, id, tccommon.ReadRetryTimeout) if err != nil { return err } @@ -1084,10 +1087,10 @@ func resourceRedisNodeSetModify(ctx context.Context, service *RedisService, d *s ZoneId: helper.IntUint64(zoneId), }) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { _, err := service.UpgradeInstance(ctx, d.Id(), memSize, shardNum, redisReplicaCount+len(adds), addNodes) if err != nil { - return retryError(err, redis.FAILEDOPERATION_UNKNOWN) + return tccommon.RetryError(err, redis.FAILEDOPERATION_UNKNOWN) } return nil }) @@ -1101,21 +1104,21 @@ func resourceRedisNodeSetModify(ctx context.Context, service *RedisService, d *s } if len(lacks) > 0 { - _, _, info, err := service.CheckRedisOnlineOk(ctx, id, readRetryTimeout) + _, _, info, err := service.CheckRedisOnlineOk(ctx, id, tccommon.ReadRetryTimeout) if err != nil { return err } redisNodeInfos = info.NodeSet redisReplicaCount := len(redisNodeInfos) - 1 - removeNodes := tencentCloudRedisGetRemoveNodesByIds(lacks[:], redisNodeInfos) + removeNodes := TencentCloudRedisGetRemoveNodesByIds(lacks[:], redisNodeInfos) replicasParam := redisReplicaCount - len(lacks) if replicasParam <= 0 { return fmt.Errorf("cannot delete replica %d which is your only replica on instance %s", removeNodes[0].NodeId, id) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { _, err := service.UpgradeInstance(ctx, id, memSize, shardNum, replicasParam, removeNodes) if err != nil { - return retryError(err, redis.FAILEDOPERATION_UNKNOWN) + return tccommon.RetryError(err, redis.FAILEDOPERATION_UNKNOWN) } return nil }) @@ -1132,11 +1135,11 @@ func resourceRedisNodeSetModify(ctx context.Context, service *RedisService, d *s if d.HasChange("redis_replicas_num") && len(oz) == 0 && len(nz) == 0 { _, replica := d.GetChange("redis_replicas_num") redisReplicasNum := replica.(int) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { _, err := service.UpgradeInstance(ctx, id, memSize, shardNum, redisReplicasNum, nil) if err != nil { // Upgrade memory will cause instance lock and cannot acknowledge by polling status, wait until lock release - return retryError(err, redis.FAILEDOPERATION_UNKNOWN, redis.FAILEDOPERATION_SYSTEMERROR) + return tccommon.RetryError(err, redis.FAILEDOPERATION_UNKNOWN, redis.FAILEDOPERATION_SYSTEMERROR) } return nil }) @@ -1153,13 +1156,13 @@ func resourceRedisNodeSetModify(ctx context.Context, service *RedisService, d *s return nil } -func tencentCloudRedisGetRemoveNodesByIds(ids []int, nodes []*redis.RedisNodeInfo) (result []*redis.RedisNodeInfo) { +func TencentCloudRedisGetRemoveNodesByIds(ids []int, nodes []*redis.RedisNodeInfo) (result []*redis.RedisNodeInfo) { for i := range nodes { node := nodes[i] if *node.NodeType == 0 { continue } - index := FindIntListIndex(ids, int(*node.ZoneId)) + index := tccommon.FindIntListIndex(ids, int(*node.ZoneId)) if index == -1 { continue } diff --git a/tencentcloud/resource_tc_redis_instance_test.go b/tencentcloud/services/crs/resource_tc_redis_instance_test.go similarity index 89% rename from tencentcloud/resource_tc_redis_instance_test.go rename to tencentcloud/services/crs/resource_tc_redis_instance_test.go index d9ecc98777..b12b3edfcd 100644 --- a/tencentcloud/resource_tc_redis_instance_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_instance_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package crs_test import ( "context" @@ -8,14 +8,20 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/stretchr/testify/assert" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + svccrs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/crs" ) func init() { @@ -23,12 +29,12 @@ func init() { resource.AddTestSweepers("redis_instance", &resource.Sweeper{ Name: "redis_instance", F: func(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(region) - client := cli.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(region) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() - service := RedisService{client: client} + service := svccrs.NewRedisService(client) instances, err := service.DescribeInstances(ctx, "ap-guangzhou-3", "", 0, 10) @@ -39,17 +45,17 @@ func init() { for _, v := range instances { name := v.Name id := v.RedisId - if isResourcePersist(name, nil) { + if tcacctest.IsResourcePersist(name, nil) { continue } // Collect infos before deleting action var chargeType string - has, online, info, err := service.CheckRedisOnlineOk(ctx, id, readRetryTimeout*20) + has, online, info, err := service.CheckRedisOnlineOk(ctx, id, tccommon.ReadRetryTimeout*20) if !has { continue } if online { - chargeType = REDIS_CHARGE_TYPE_NAME[*info.BillingMode] + chargeType = svccrs.REDIS_CHARGE_TYPE_NAME[*info.BillingMode] } else { log.Printf("Deleting ERROR: Creating redis task is processing.") continue @@ -61,7 +67,7 @@ func init() { var wait = func(action string, taskInfo interface{}) (errRet error) { - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { var ok bool var err error switch v := taskInfo.(type) { @@ -90,7 +96,7 @@ func init() { return errRet } - if chargeType == REDIS_CHARGE_TYPE_POSTPAID { + if chargeType == svccrs.REDIS_CHARGE_TYPE_POSTPAID { taskId, err := service.DestroyPostpaidInstance(ctx, id) if err != nil { log.Printf("[CRITAL]%s redis %s fail, reason:%s\n", logId, "DestroyPostpaidInstance", err.Error()) @@ -107,7 +113,7 @@ func init() { } // Deal info only support create and renew and resize, need to check destroy status by describing api. - if errDestroyChecking := resource.Retry(20*readRetryTimeout, func() *resource.RetryError { + if errDestroyChecking := resource.Retry(20*tccommon.ReadRetryTimeout, func() *resource.RetryError { has, isolated, err := service.CheckRedisDestroyOk(ctx, id) if err != nil { log.Printf("[CRITAL]%s CheckRedisDestroyOk fail, reason:%s\n", logId, err.Error()) @@ -139,8 +145,8 @@ func init() { func TestAccTencentCloudRedisInstanceResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudRedisInstanceDestroy, Steps: []resource.TestStep{ { @@ -226,8 +232,8 @@ func TestAccTencentCloudRedisInstanceResource_basic(t *testing.T) { func TestAccTencentCloudRedisInstanceParam(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudRedisInstanceDestroy, Steps: []resource.TestStep{ { @@ -252,8 +258,8 @@ func TestAccTencentCloudRedisInstanceParam(t *testing.T) { func TestAccTencentCloudRedisInstance_Maz(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudRedisInstanceDestroy, Steps: []resource.TestStep{ { @@ -289,8 +295,8 @@ func TestAccTencentCloudRedisInstance_Maz(t *testing.T) { func TestAccTencentCloudRedisInstance_Cluster(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudRedisInstanceDestroy, Steps: []resource.TestStep{ { @@ -314,8 +320,8 @@ func TestAccTencentCloudRedisInstance_Cluster(t *testing.T) { // go test -i; go test -test.run TestAccTencentCloudRedisInstance_ReplicasNum -v func TestAccTencentCloudRedisInstance_ReplicasNum(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudRedisInstanceDestroy, Steps: []resource.TestStep{ { @@ -338,12 +344,12 @@ func TestAccTencentCloudRedisInstance_ReplicasNum(t *testing.T) { func TestAccTencentCloudRedisInstance_Prepaid(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudRedisInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, + PreConfig: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Config: testAccRedisInstancePrepaidBasic(), Check: resource.ComposeAggregateTestCheckFunc( testAccTencentCloudRedisInstanceExists("tencentcloud_redis_instance.redis_prepaid_instance_test"), @@ -411,7 +417,7 @@ func TestAccTencentCloudRedisGetRemoveNodesByIds(t *testing.T) { 100002, 100003, } - mockAdds1, mockRemoves1 := GetListDiffs( + mockAdds1, mockRemoves1 := tccommon.GetListDiffs( origin, []int{ 100001, @@ -426,14 +432,14 @@ func TestAccTencentCloudRedisGetRemoveNodesByIds(t *testing.T) { assert.Contains(t, []int{100001, 100002}, mockRemoves1[1]) assert.Equal(t, []int{100004}, mockAdds1) - mockAdds2, mockRemoves2 := GetListDiffs(origin, []int{100001, 100002}) + mockAdds2, mockRemoves2 := tccommon.GetListDiffs(origin, []int{100001, 100002}) assert.Equal(t, len(mockRemoves2), 3) assert.Contains(t, mockRemoves2, 100001) assert.Contains(t, mockRemoves2, 100002) assert.Contains(t, mockRemoves2, 100003) assert.Equal(t, 0, len(mockAdds2)) - result1 := tencentCloudRedisGetRemoveNodesByIds(mockRemoves1[:], mockNodes1) + result1 := svccrs.TencentCloudRedisGetRemoveNodesByIds(mockRemoves1[:], mockNodes1) result1Len := len(result1) if result1Len != 2 { @@ -443,7 +449,7 @@ func TestAccTencentCloudRedisGetRemoveNodesByIds(t *testing.T) { assert.Equal(t, int64(102), *result1[0].NodeId) assert.Equal(t, int64(104), *result1[1].NodeId) - result2 := tencentCloudRedisGetRemoveNodesByIds(mockRemoves2[:], mockNodes1) + result2 := svccrs.TencentCloudRedisGetRemoveNodesByIds(mockRemoves2[:], mockNodes1) assert.Equal(t, int64(102), *result2[0].NodeId) assert.Equal(t, int64(104), *result2[1].NodeId) @@ -452,15 +458,15 @@ func TestAccTencentCloudRedisGetRemoveNodesByIds(t *testing.T) { func testAccTencentCloudRedisInstanceExists(r string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[r] if !ok { return fmt.Errorf("resource %s is not found", r) } - service := RedisService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svccrs.NewRedisService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) has, _, _, err := service.CheckRedisOnlineOk(ctx, rs.Primary.ID, time.Second) if has { return nil @@ -474,10 +480,10 @@ func testAccTencentCloudRedisInstanceExists(r string) resource.TestCheckFunc { func testAccTencentCloudRedisInstanceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svccrs.NewRedisService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_redis_instance" { continue @@ -507,7 +513,7 @@ variable "redis_default_param_template" { ` func testAccRedisInstanceBasic() string { - return defaultVpcVariable + ` + return tcacctest.DefaultVpcVariable + ` resource "tencentcloud_redis_instance" "redis_instance_test" { availability_zone = "ap-guangzhou-3" type_id = 2 @@ -523,7 +529,7 @@ resource "tencentcloud_redis_instance" "redis_instance_test" { } func testAccRedisInstanceTags() string { - return defaultVpcVariable + ` + return tcacctest.DefaultVpcVariable + ` resource "tencentcloud_redis_instance" "redis_instance_test" { availability_zone = "ap-guangzhou-3" type_id = 2 @@ -543,7 +549,7 @@ resource "tencentcloud_redis_instance" "redis_instance_test" { } func testAccRedisInstanceTagsUpdate() string { - return defaultVpcVariable + ` + return tcacctest.DefaultVpcVariable + ` resource "tencentcloud_redis_instance" "redis_instance_test" { availability_zone = "ap-guangzhou-3" type_id = 2 @@ -563,7 +569,7 @@ resource "tencentcloud_redis_instance" "redis_instance_test" { } func testAccRedisInstanceUpdateName() string { - return defaultVpcVariable + ` + return tcacctest.DefaultVpcVariable + ` resource "tencentcloud_redis_instance" "redis_instance_test" { availability_zone = "ap-guangzhou-3" type_id = 2 @@ -583,7 +589,7 @@ resource "tencentcloud_redis_instance" "redis_instance_test" { } func testAccRedisInstanceUpdateMemSizeAndPasswordAndSg() string { - return defaultVpcVariable + ` + return tcacctest.DefaultVpcVariable + ` resource "tencentcloud_redis_instance" "redis_instance_test" { availability_zone = "ap-guangzhou-3" type_id = 2 @@ -605,7 +611,7 @@ resource "tencentcloud_redis_instance" "redis_instance_test" { } func testAccRedisInstanceNetworkUpdate() string { - return defaultVpcVariable + ` + return tcacctest.DefaultVpcVariable + ` resource "tencentcloud_redis_instance" "redis_instance_test" { availability_zone = "ap-guangzhou-3" type_id = 2 @@ -635,7 +641,7 @@ variable "redis_maz_name" { `, rand.Intn(1000)) func testAccRedisInstanceMaz() string { - return defaultVpcVariable + randMazInstanceName + ` + return tcacctest.DefaultVpcVariable + randMazInstanceName + ` resource "tencentcloud_redis_instance" "redis_maz" { availability_zone = "ap-guangzhou-3" type_id = 6 #7 @@ -652,7 +658,7 @@ resource "tencentcloud_redis_instance" "redis_maz" { } func testAccRedisInstanceMazUpdate() string { - return defaultVpcVariable + randMazInstanceName + ` + return tcacctest.DefaultVpcVariable + randMazInstanceName + ` resource "tencentcloud_redis_instance" "redis_maz" { availability_zone = "ap-guangzhou-3" type_id = 6 #7 @@ -669,7 +675,7 @@ resource "tencentcloud_redis_instance" "redis_maz" { } func testAccRedisInstanceMazUpdate2() string { - return defaultVpcVariable + randMazInstanceName + ` + return tcacctest.DefaultVpcVariable + randMazInstanceName + ` resource "tencentcloud_redis_instance" "redis_maz" { availability_zone = "ap-guangzhou-3" type_id = 6 #7 @@ -685,7 +691,7 @@ resource "tencentcloud_redis_instance" "redis_maz" { }` } -const testAccRedisInstanceCluster = defaultVpcVariable + ` +const testAccRedisInstanceCluster = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_redis_instance" "redis_cluster" { availability_zone = "ap-guangzhou-3" type_id = 7 @@ -701,7 +707,7 @@ resource "tencentcloud_redis_instance" "redis_cluster" { }` func testAccRedisInstanceClusterUpdateShard() string { - return defaultVpcVariable + ` + return tcacctest.DefaultVpcVariable + ` resource "tencentcloud_redis_instance" "redis_cluster" { availability_zone = "ap-guangzhou-3" type_id = 7 @@ -718,7 +724,7 @@ resource "tencentcloud_redis_instance" "redis_cluster" { } func testAccRedisInstancePrepaidBasic() string { - return defaultVpcSubnets + ` + return tcacctest.DefaultVpcSubnets + ` resource "tencentcloud_redis_instance" "redis_prepaid_instance_test" { availability_zone = "ap-guangzhou-3" type_id = 2 @@ -737,7 +743,7 @@ resource "tencentcloud_redis_instance" "redis_prepaid_instance_test" { } func testAccRedisInstanceParamTemplate() string { - return defaultVpcVariable + testAccRedisDefaultTemplate + ` + return tcacctest.DefaultVpcVariable + testAccRedisDefaultTemplate + ` resource "tencentcloud_redis_instance" "redis_instance_test" { availability_zone = "ap-guangzhou-3" type_id = 6 @@ -754,7 +760,7 @@ resource "tencentcloud_redis_instance" "redis_instance_test" { } func testAccRedisInstanceParamTemplateUpdate() string { - return defaultVpcVariable + testAccRedisDefaultTemplate + ` + return tcacctest.DefaultVpcVariable + testAccRedisDefaultTemplate + ` resource "tencentcloud_redis_instance" "redis_instance_test" { availability_zone = "ap-guangzhou-3" type_id = 6 @@ -771,7 +777,7 @@ resource "tencentcloud_redis_instance" "redis_instance_test" { ` } -const testAccRedisReplicasNum = DefaultCrsVar + ` +const testAccRedisReplicasNum = tcacctest.DefaultCrsVar + ` resource "tencentcloud_redis_instance" "redis_instance_replicas" { auto_renew_flag = 0 availability_zone = "ap-guangzhou-6" @@ -792,7 +798,7 @@ resource "tencentcloud_redis_instance" "redis_instance_replicas" { vpc_id = var.vpc_id }` -const testAccRedisReplicasNumUp = DefaultCrsVar + ` +const testAccRedisReplicasNumUp = tcacctest.DefaultCrsVar + ` resource "tencentcloud_redis_instance" "redis_instance_replicas" { auto_renew_flag = 0 availability_zone = "ap-guangzhou-6" diff --git a/tencentcloud/resource_tc_redis_maintenance_window.go b/tencentcloud/services/crs/resource_tc_redis_maintenance_window.go similarity index 72% rename from tencentcloud/resource_tc_redis_maintenance_window.go rename to tencentcloud/services/crs/resource_tc_redis_maintenance_window.go index 994c251637..1295f1c605 100644 --- a/tencentcloud/resource_tc_redis_maintenance_window.go +++ b/tencentcloud/services/crs/resource_tc_redis_maintenance_window.go @@ -1,16 +1,19 @@ -package tencentcloud +package crs import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudRedisMaintenanceWindow() *schema.Resource { +func ResourceTencentCloudRedisMaintenanceWindow() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisMaintenanceWindowCreate, Read: resourceTencentCloudRedisMaintenanceWindowRead, @@ -42,8 +45,8 @@ func resourceTencentCloudRedisMaintenanceWindow() *schema.Resource { } func resourceTencentCloudRedisMaintenanceWindowCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_maintenance_window.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_maintenance_window.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( instanceId string @@ -58,14 +61,14 @@ func resourceTencentCloudRedisMaintenanceWindowCreate(d *schema.ResourceData, me } func resourceTencentCloudRedisMaintenanceWindowRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_maintenance_window.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_maintenance_window.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -94,10 +97,10 @@ func resourceTencentCloudRedisMaintenanceWindowRead(d *schema.ResourceData, meta } func resourceTencentCloudRedisMaintenanceWindowUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_maintenance_window.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_maintenance_window.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := redis.NewModifyMaintenanceWindowRequest() @@ -113,10 +116,10 @@ func resourceTencentCloudRedisMaintenanceWindowUpdate(d *schema.ResourceData, me request.EndTime = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().ModifyMaintenanceWindow(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().ModifyMaintenanceWindow(request) if e != nil { - return retryError(e) + 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()) } @@ -131,8 +134,8 @@ func resourceTencentCloudRedisMaintenanceWindowUpdate(d *schema.ResourceData, me } func resourceTencentCloudRedisMaintenanceWindowDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_maintenance_window.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_maintenance_window.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_redis_maintenance_window_test.go b/tencentcloud/services/crs/resource_tc_redis_maintenance_window_test.go similarity index 81% rename from tencentcloud/resource_tc_redis_maintenance_window_test.go rename to tencentcloud/services/crs/resource_tc_redis_maintenance_window_test.go index 894eb2b6f5..12c3e17e81 100644 --- a/tencentcloud/resource_tc_redis_maintenance_window_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_maintenance_window_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,15 +13,15 @@ func TestAccTencentCloudRedisMaintenanceWindowResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisMaintenanceWindow, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_redis_maintenance_window.maintenance_window", "id"), - resource.TestCheckResourceAttr("tencentcloud_redis_maintenance_window.maintenance_window", "instance_id", defaultCrsInstanceId), + resource.TestCheckResourceAttr("tencentcloud_redis_maintenance_window.maintenance_window", "instance_id", tcacctest.DefaultCrsInstanceId), resource.TestCheckResourceAttr("tencentcloud_redis_maintenance_window.maintenance_window", "start_time", "17:00"), resource.TestCheckResourceAttr("tencentcloud_redis_maintenance_window.maintenance_window", "end_time", "19:00"), ), @@ -35,7 +37,7 @@ func TestAccTencentCloudRedisMaintenanceWindowResource_basic(t *testing.T) { const testAccRedisMaintenanceWindowVar = ` variable "instance_id" { - default = "` + defaultCrsInstanceId + `" + default = "` + tcacctest.DefaultCrsInstanceId + `" } ` diff --git a/tencentcloud/resource_tc_redis_param_template.go b/tencentcloud/services/crs/resource_tc_redis_param_template.go similarity index 84% rename from tencentcloud/resource_tc_redis_param_template.go rename to tencentcloud/services/crs/resource_tc_redis_param_template.go index dcdc896b4c..3521532676 100644 --- a/tencentcloud/resource_tc_redis_param_template.go +++ b/tencentcloud/services/crs/resource_tc_redis_param_template.go @@ -1,16 +1,19 @@ -package tencentcloud +package crs import ( "context" "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudRedisParamTemplate() *schema.Resource { +func ResourceTencentCloudRedisParamTemplate() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudRedisParamTemplateRead, Create: resourceTencentCloudRedisParamTemplateCreate, @@ -121,12 +124,12 @@ func resourceTencentCloudRedisParamTemplate() *schema.Resource { } func resourceTencentCloudRedisParamTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_param_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_param_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := RedisService{client: client} var ( @@ -165,10 +168,10 @@ func resourceTencentCloudRedisParamTemplateCreate(d *schema.ResourceData, meta i } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { resTemplateId, e := service.CreateParamTemplate(ctx, request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } id = resTemplateId return nil @@ -187,13 +190,13 @@ func resourceTencentCloudRedisParamTemplateCreate(d *schema.ResourceData, meta i } func resourceTencentCloudRedisParamTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_param_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_param_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() @@ -247,14 +250,14 @@ func resourceTencentCloudRedisParamTemplateRead(d *schema.ResourceData, meta int } func resourceTencentCloudRedisParamTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_param_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_param_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := redis.NewModifyParamTemplateRequest() - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() service := RedisService{client: client} templateId := d.Id() @@ -299,13 +302,13 @@ func resourceTencentCloudRedisParamTemplateUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudRedisParamTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_param_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_param_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id := d.Id() diff --git a/tencentcloud/resource_tc_redis_param_template_test.go b/tencentcloud/services/crs/resource_tc_redis_param_template_test.go similarity index 83% rename from tencentcloud/resource_tc_redis_param_template_test.go rename to tencentcloud/services/crs/resource_tc_redis_param_template_test.go index 94ee2ae342..9084039eb3 100644 --- a/tencentcloud/resource_tc_redis_param_template_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_param_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package crs_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccrs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/crs" + "context" "testing" "time" @@ -15,11 +19,11 @@ func init() { resource.AddTestSweepers("tencentcloud_redis_param_template", &resource.Sweeper{ Name: "tencentcloud_redis_param_template", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := RedisService{client: client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svccrs.NewRedisService(client) request := redis.NewDescribeParamTemplatesRequest() params, err := service.DescribeParamTemplates(ctx, request) @@ -30,7 +34,7 @@ func init() { for i := range params { item := params[i] created := time.Time{} - if isResourcePersist(*item.Name, &created) { + if tcacctest.IsResourcePersist(*item.Name, &created) { continue } dReq := redis.NewDeleteParamTemplateRequest() @@ -49,8 +53,8 @@ func TestAccTencentCloudRedisParamTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisParamTemplate, diff --git a/tencentcloud/resource_tc_redis_read_only.go b/tencentcloud/services/crs/resource_tc_redis_read_only.go similarity index 71% rename from tencentcloud/resource_tc_redis_read_only.go rename to tencentcloud/services/crs/resource_tc_redis_read_only.go index b485dbf440..1cb55ba37d 100644 --- a/tencentcloud/resource_tc_redis_read_only.go +++ b/tencentcloud/services/crs/resource_tc_redis_read_only.go @@ -1,4 +1,4 @@ -package tencentcloud +package crs import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudRedisReadOnly() *schema.Resource { +func ResourceTencentCloudRedisReadOnly() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisReadOnlyCreate, Read: resourceTencentCloudRedisReadOnlyRead, @@ -39,8 +42,8 @@ func resourceTencentCloudRedisReadOnly() *schema.Resource { } func resourceTencentCloudRedisReadOnlyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_read_only.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_read_only.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( instanceId string @@ -55,13 +58,13 @@ func resourceTencentCloudRedisReadOnlyCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudRedisReadOnlyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_read_only.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_read_only.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -88,11 +91,11 @@ func resourceTencentCloudRedisReadOnlyRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudRedisReadOnlyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_read_only.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_read_only.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := redis.NewModifyInstanceReadOnlyRequest() response := redis.NewModifyInstanceReadOnlyResponse() @@ -105,10 +108,10 @@ func resourceTencentCloudRedisReadOnlyUpdate(d *schema.ResourceData, meta interf request.InputMode = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().ModifyInstanceReadOnly(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().ModifyInstanceReadOnly(request) if e != nil { - return retryError(e) + 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()) } @@ -121,8 +124,8 @@ func resourceTencentCloudRedisReadOnlyUpdate(d *schema.ResourceData, meta interf } taskId := *response.Response.TaskId - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -147,8 +150,8 @@ func resourceTencentCloudRedisReadOnlyUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudRedisReadOnlyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_read_only.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_read_only.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_redis_read_only_test.go b/tencentcloud/services/crs/resource_tc_redis_read_only_test.go similarity index 78% rename from tencentcloud/resource_tc_redis_read_only_test.go rename to tencentcloud/services/crs/resource_tc_redis_read_only_test.go index 367caff259..3a38e5949b 100644 --- a/tencentcloud/resource_tc_redis_read_only_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_read_only_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,15 +13,15 @@ func TestAccTencentCloudRedisReadOnlyResource_basic(t *testing.T) { // t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisReadOnly, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_redis_read_only.read_only", "id"), - resource.TestCheckResourceAttr("tencentcloud_redis_read_only.read_only", "instance_id", defaultCrsInstanceId), + resource.TestCheckResourceAttr("tencentcloud_redis_read_only.read_only", "instance_id", tcacctest.DefaultCrsInstanceId), resource.TestCheckResourceAttr("tencentcloud_redis_read_only.read_only", "input_mode", "0"), ), }, @@ -34,7 +36,7 @@ func TestAccTencentCloudRedisReadOnlyResource_basic(t *testing.T) { const testAccRedisReadOnlyVar = ` variable "instance_id" { - default = "` + defaultCrsInstanceId + `" + default = "` + tcacctest.DefaultCrsInstanceId + `" } ` diff --git a/tencentcloud/resource_tc_redis_renew_instance_operation.go b/tencentcloud/services/crs/resource_tc_redis_renew_instance_operation.go similarity index 72% rename from tencentcloud/resource_tc_redis_renew_instance_operation.go rename to tencentcloud/services/crs/resource_tc_redis_renew_instance_operation.go index 3cc515e127..4a0b7f3049 100644 --- a/tencentcloud/resource_tc_redis_renew_instance_operation.go +++ b/tencentcloud/services/crs/resource_tc_redis_renew_instance_operation.go @@ -1,17 +1,20 @@ -package tencentcloud +package crs import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudRedisRenewInstanceOperation() *schema.Resource { +func ResourceTencentCloudRedisRenewInstanceOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisRenewInstanceOperationCreate, Read: resourceTencentCloudRedisRenewInstanceOperationRead, @@ -45,11 +48,11 @@ func resourceTencentCloudRedisRenewInstanceOperation() *schema.Resource { } func resourceTencentCloudRedisRenewInstanceOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_renew_instance_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_renew_instance_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = redis.NewRenewInstanceRequest() @@ -68,15 +71,15 @@ func resourceTencentCloudRedisRenewInstanceOperationCreate(d *schema.ResourceDat request.ModifyPayMode = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().RenewInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().RenewInstance(request) if e != nil { if sdkErr, ok := e.(*sdkErrors.TencentCloudSDKError); ok { if sdkErr.Code == "FailedOperation.PayFailed" { return resource.NonRetryableError(e) } } - return retryError(e) + 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()) } @@ -89,8 +92,8 @@ func resourceTencentCloudRedisRenewInstanceOperationCreate(d *schema.ResourceDat d.SetId(instanceId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} - _, _, _, err = service.CheckRedisOnlineOk(ctx, instanceId, 20*readRetryTimeout) + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + _, _, _, err = service.CheckRedisOnlineOk(ctx, instanceId, 20*tccommon.ReadRetryTimeout) if err != nil { log.Printf("[CRITAL]%s redis upgradeVersionOperation fail, reason:%s\n", logId, err.Error()) return err @@ -100,15 +103,15 @@ func resourceTencentCloudRedisRenewInstanceOperationCreate(d *schema.ResourceDat } func resourceTencentCloudRedisRenewInstanceOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_renew_instance_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_renew_instance_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudRedisRenewInstanceOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_renew_instance_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_renew_instance_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_redis_renew_instance_operation_test.go b/tencentcloud/services/crs/resource_tc_redis_renew_instance_operation_test.go similarity index 77% rename from tencentcloud/resource_tc_redis_renew_instance_operation_test.go rename to tencentcloud/services/crs/resource_tc_redis_renew_instance_operation_test.go index 09186b67e2..993a3e7d87 100644 --- a/tencentcloud/resource_tc_redis_renew_instance_operation_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_renew_instance_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,12 +13,12 @@ func TestAccTencentCloudRedisRenewInstanceOperationResource_basic(t *testing.T) resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - PreConfig: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, + PreConfig: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Config: testAccRedisRenewInstanceOperation(), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_redis_renew_instance_operation.renew_instance_operation", "id"), diff --git a/tencentcloud/resource_tc_redis_replica_readonly.go b/tencentcloud/services/crs/resource_tc_redis_replica_readonly.go similarity index 71% rename from tencentcloud/resource_tc_redis_replica_readonly.go rename to tencentcloud/services/crs/resource_tc_redis_replica_readonly.go index 0fc2643231..dd759f1ae5 100644 --- a/tencentcloud/resource_tc_redis_replica_readonly.go +++ b/tencentcloud/services/crs/resource_tc_redis_replica_readonly.go @@ -1,17 +1,19 @@ -package tencentcloud +package crs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" ) -func resourceTencentCloudRedisReplicaReadonly() *schema.Resource { +func ResourceTencentCloudRedisReplicaReadonly() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisReplicaReadonlyCreate, Read: resourceTencentCloudRedisReplicaReadonlyRead, @@ -37,7 +39,7 @@ func resourceTencentCloudRedisReplicaReadonly() *schema.Resource { "operate": { Required: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue([]string{"enable", "disable"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"enable", "disable"}), Description: "The replica is read-only, `enable` - enable read-write splitting, `disable`- disable read-write splitting.", }, }, @@ -45,8 +47,8 @@ func resourceTencentCloudRedisReplicaReadonly() *schema.Resource { } func resourceTencentCloudRedisReplicaReadonlyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_replica_readonly.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_replica_readonly.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( instanceId string @@ -61,14 +63,14 @@ func resourceTencentCloudRedisReplicaReadonlyCreate(d *schema.ResourceData, meta } func resourceTencentCloudRedisReplicaReadonlyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_replica_readonly.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_replica_readonly.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -99,11 +101,11 @@ func resourceTencentCloudRedisReplicaReadonlyRead(d *schema.ResourceData, meta i } func resourceTencentCloudRedisReplicaReadonlyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_replica_readonly.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_replica_readonly.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( disableRequest = redis.NewDisableReplicaReadonlyRequest() @@ -118,10 +120,10 @@ func resourceTencentCloudRedisReplicaReadonlyUpdate(d *schema.ResourceData, meta operate := v.(string) if operate == "enable" { enableRequest.InstanceId = &instanceId - err := resource.Retry(3*writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().EnableReplicaReadonly(enableRequest) + err := resource.Retry(3*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().EnableReplicaReadonly(enableRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, enableRequest.GetAction(), enableRequest.ToJsonString(), result.ToJsonString()) } @@ -137,10 +139,10 @@ func resourceTencentCloudRedisReplicaReadonlyUpdate(d *schema.ResourceData, meta } if operate == "disable" { disableRequest.InstanceId = &instanceId - err := resource.Retry(3*writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().DisableReplicaReadonly(disableRequest) + err := resource.Retry(3*tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().DisableReplicaReadonly(disableRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, disableRequest.GetAction(), disableRequest.ToJsonString(), result.ToJsonString()) } @@ -156,8 +158,8 @@ func resourceTencentCloudRedisReplicaReadonlyUpdate(d *schema.ResourceData, meta } } - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -182,8 +184,8 @@ func resourceTencentCloudRedisReplicaReadonlyUpdate(d *schema.ResourceData, meta } func resourceTencentCloudRedisReplicaReadonlyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_replica_readonly.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_replica_readonly.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_redis_replica_readonly_test.go b/tencentcloud/services/crs/resource_tc_redis_replica_readonly_test.go similarity index 90% rename from tencentcloud/resource_tc_redis_replica_readonly_test.go rename to tencentcloud/services/crs/resource_tc_redis_replica_readonly_test.go index 94728fd575..e10f47b2ad 100644 --- a/tencentcloud/resource_tc_redis_replica_readonly_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_replica_readonly_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudRedisReplicaReadonlyResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisReplicaReadonly, diff --git a/tencentcloud/resource_tc_redis_replicate_attachment.go b/tencentcloud/services/crs/resource_tc_redis_replicate_attachment.go similarity index 76% rename from tencentcloud/resource_tc_redis_replicate_attachment.go rename to tencentcloud/services/crs/resource_tc_redis_replicate_attachment.go index b287934987..e5d0639d72 100644 --- a/tencentcloud/resource_tc_redis_replicate_attachment.go +++ b/tencentcloud/services/crs/resource_tc_redis_replicate_attachment.go @@ -1,18 +1,21 @@ -package tencentcloud +package crs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudRedisReplicateAttachment() *schema.Resource { +func ResourceTencentCloudRedisReplicateAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisReplicateAttachmentCreate, Read: resourceTencentCloudRedisReplicateAttachmentRead, @@ -47,11 +50,11 @@ func resourceTencentCloudRedisReplicateAttachment() *schema.Resource { } func resourceTencentCloudRedisReplicateAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_replicate_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_replicate_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = redis.NewAddReplicationInstanceRequest() @@ -91,7 +94,7 @@ func resourceTencentCloudRedisReplicateAttachmentCreate(d *schema.ResourceData, } else { instanceRole = "r" } - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} err := service.AddReplicationInstance(ctx, groupId, instanceId, instanceRole) if err != nil { return err @@ -102,14 +105,14 @@ func resourceTencentCloudRedisReplicateAttachmentCreate(d *schema.ResourceData, } func resourceTencentCloudRedisReplicateAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_replicate_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_replicate_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} groupId := d.Id() @@ -141,11 +144,11 @@ func resourceTencentCloudRedisReplicateAttachmentRead(d *schema.ResourceData, me } func resourceTencentCloudRedisReplicateAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_replicate_attachment.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_replicate_attachment.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = redis.NewChangeMasterInstanceRequest() @@ -162,10 +165,10 @@ func resourceTencentCloudRedisReplicateAttachmentUpdate(d *schema.ResourceData, request.InstanceId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().ChangeMasterInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().ChangeMasterInstance(request) if e != nil { - return retryError(e) + 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()) } @@ -179,9 +182,9 @@ func resourceTencentCloudRedisReplicateAttachmentUpdate(d *schema.ResourceData, taskId := *response.Response.TaskId - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if taskId > 0 { - err := resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -211,7 +214,7 @@ func resourceTencentCloudRedisReplicateAttachmentUpdate(d *schema.ResourceData, remove := helper.InterfacesStrings(oldInstances.Difference(newInstances).List()) add := helper.InterfacesStrings(newInstances.Difference(oldInstances).List()) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if len(add) > 0 { for _, instanceId := range add { err := service.AddReplicationInstance(ctx, groupId, instanceId, "r") @@ -235,14 +238,14 @@ func resourceTencentCloudRedisReplicateAttachmentUpdate(d *schema.ResourceData, } func resourceTencentCloudRedisReplicateAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_replicate_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_replicate_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) groupId := d.Id() - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} replicateGroup, err := service.DescribeRedisReplicateInstanceById(ctx, groupId) if err != nil { return err diff --git a/tencentcloud/resource_tc_redis_replicate_attachment_test.go b/tencentcloud/services/crs/resource_tc_redis_replicate_attachment_test.go similarity index 89% rename from tencentcloud/resource_tc_redis_replicate_attachment_test.go rename to tencentcloud/services/crs/resource_tc_redis_replicate_attachment_test.go index dc07f2ae2d..2165a3d9d1 100644 --- a/tencentcloud/resource_tc_redis_replicate_attachment_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_replicate_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudRedisReplicateAttachmentResource_basic(t *testing.T) { // t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisReplicateAttachment, @@ -44,16 +46,16 @@ func TestAccTencentCloudRedisReplicateAttachmentResource_basic(t *testing.T) { const testAccRedisReplicateAttachmentVar = ` variable "security_groups" { - default = "` + defaultCrsSecurityGroups + `" + default = "` + tcacctest.DefaultCrsSecurityGroups + `" } variable "vpc_id" { - default = "` + defaultCrsVpcId + `" + default = "` + tcacctest.DefaultCrsVpcId + `" } variable "subnet_id" { - default = "` + defaultCrsSubnetId + `" + default = "` + tcacctest.DefaultCrsSubnetId + `" } variable "group_id" { - default = "` + defaultCrsGroupId + `" + default = "` + tcacctest.DefaultCrsGroupId + `" } ` const testAccRedisReplicateInstance = testAccRedisReplicateAttachmentVar + ` diff --git a/tencentcloud/resource_tc_redis_security_group_attachment.go b/tencentcloud/services/crs/resource_tc_redis_security_group_attachment.go similarity index 69% rename from tencentcloud/resource_tc_redis_security_group_attachment.go rename to tencentcloud/services/crs/resource_tc_redis_security_group_attachment.go index d4758a0cd6..e6485acf36 100644 --- a/tencentcloud/resource_tc_redis_security_group_attachment.go +++ b/tencentcloud/services/crs/resource_tc_redis_security_group_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package crs import ( "context" @@ -6,15 +6,18 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) const PRODUCT string = "redis" -func resourceTencentCloudRedisSecurityGroupAttachment() *schema.Resource { +func ResourceTencentCloudRedisSecurityGroupAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisSecurityGroupAttachmentCreate, Read: resourceTencentCloudRedisSecurityGroupAttachmentRead, @@ -41,10 +44,10 @@ func resourceTencentCloudRedisSecurityGroupAttachment() *schema.Resource { } func resourceTencentCloudRedisSecurityGroupAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_security_group_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_security_group_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = redis.NewAssociateSecurityGroupsRequest() @@ -63,10 +66,10 @@ func resourceTencentCloudRedisSecurityGroupAttachmentCreate(d *schema.ResourceDa request.SecurityGroupId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().AssociateSecurityGroups(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().AssociateSecurityGroups(request) if e != nil { - return retryError(e) + 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()) } @@ -77,21 +80,21 @@ func resourceTencentCloudRedisSecurityGroupAttachmentCreate(d *schema.ResourceDa return err } - d.SetId(instanceId + FILED_SP + securityGroupId) + d.SetId(instanceId + tccommon.FILED_SP + securityGroupId) return resourceTencentCloudRedisSecurityGroupAttachmentRead(d, meta) } func resourceTencentCloudRedisSecurityGroupAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_security_group_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_security_group_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -119,14 +122,14 @@ func resourceTencentCloudRedisSecurityGroupAttachmentRead(d *schema.ResourceData } func resourceTencentCloudRedisSecurityGroupAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_security_group_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_security_group_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_redis_security_group_attachment_test.go b/tencentcloud/services/crs/resource_tc_redis_security_group_attachment_test.go similarity index 67% rename from tencentcloud/resource_tc_redis_security_group_attachment_test.go rename to tencentcloud/services/crs/resource_tc_redis_security_group_attachment_test.go index 697753859a..f6bde086a9 100644 --- a/tencentcloud/resource_tc_redis_security_group_attachment_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_security_group_attachment_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package crs_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccrs "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/crs" + "context" "fmt" "strings" @@ -15,8 +19,8 @@ import ( func TestAccTencentCloudRedisSecurityGroupAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccTencentCloudRedisSecurityGroupDestroy, Steps: []resource.TestStep{ { @@ -24,8 +28,8 @@ func TestAccTencentCloudRedisSecurityGroupAttachmentResource_basic(t *testing.T) Check: resource.ComposeTestCheckFunc( testAccTencentCloudRedisSecurityGroupExists("tencentcloud_redis_security_group_attachment.security_group_attachment"), resource.TestCheckResourceAttrSet("tencentcloud_redis_security_group_attachment.security_group_attachment", "id"), - resource.TestCheckResourceAttr("tencentcloud_redis_security_group_attachment.security_group_attachment", "instance_id", defaultCrsInstanceId), - resource.TestCheckResourceAttr("tencentcloud_redis_security_group_attachment.security_group_attachment", "security_group_id", defaultCrsSecurityGroups), + resource.TestCheckResourceAttr("tencentcloud_redis_security_group_attachment.security_group_attachment", "instance_id", tcacctest.DefaultCrsInstanceId), + resource.TestCheckResourceAttr("tencentcloud_redis_security_group_attachment.security_group_attachment", "security_group_id", tcacctest.DefaultCrsSecurityGroups), ), }, { @@ -40,23 +44,23 @@ func TestAccTencentCloudRedisSecurityGroupAttachmentResource_basic(t *testing.T) func testAccTencentCloudRedisSecurityGroupExists(r string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[r] if !ok { return fmt.Errorf("resource %s is not found", r) } - items := strings.Split(rs.Primary.ID, FILED_SP) + items := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(items) != 2 { return fmt.Errorf("invalid ID %s", rs.Primary.ID) } instanceId := items[0] securityGroupId := items[1] - service := RedisService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - securityGroup, err := service.DescribeRedisSecurityGroupAttachmentById(ctx, PRODUCT, instanceId, securityGroupId) + service := svccrs.NewRedisService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + securityGroup, err := service.DescribeRedisSecurityGroupAttachmentById(ctx, svccrs.PRODUCT, instanceId, securityGroupId) if err != nil { return err } @@ -69,24 +73,24 @@ func testAccTencentCloudRedisSecurityGroupExists(r string) resource.TestCheckFun } func testAccTencentCloudRedisSecurityGroupDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svccrs.NewRedisService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_redis_security_group_attachment" { continue } time.Sleep(5 * time.Second) - items := strings.Split(rs.Primary.ID, FILED_SP) + items := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(items) != 2 { return fmt.Errorf("invalid ID %s", rs.Primary.ID) } instanceId := items[0] securityGroupId := items[1] - securityGroup, err := service.DescribeRedisSecurityGroupAttachmentById(ctx, PRODUCT, instanceId, securityGroupId) + securityGroup, err := service.DescribeRedisSecurityGroupAttachmentById(ctx, svccrs.PRODUCT, instanceId, securityGroupId) if err != nil { return err } @@ -99,10 +103,10 @@ func testAccTencentCloudRedisSecurityGroupDestroy(s *terraform.State) error { const testAccRedisSecurityGroupVar = ` variable "instance_id" { - default = "` + defaultCrsInstanceId + `" + default = "` + tcacctest.DefaultCrsInstanceId + `" } variable "security_group_id" { - default = "` + defaultCrsSecurityGroups + `" + default = "` + tcacctest.DefaultCrsSecurityGroups + `" } ` diff --git a/tencentcloud/resource_tc_redis_ssl.go b/tencentcloud/services/crs/resource_tc_redis_ssl.go similarity index 71% rename from tencentcloud/resource_tc_redis_ssl.go rename to tencentcloud/services/crs/resource_tc_redis_ssl.go index cc0e01561d..c246909e27 100644 --- a/tencentcloud/resource_tc_redis_ssl.go +++ b/tencentcloud/services/crs/resource_tc_redis_ssl.go @@ -1,17 +1,19 @@ -package tencentcloud +package crs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" ) -func resourceTencentCloudRedisSsl() *schema.Resource { +func ResourceTencentCloudRedisSsl() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisSslCreate, Read: resourceTencentCloudRedisSslRead, @@ -30,7 +32,7 @@ func resourceTencentCloudRedisSsl() *schema.Resource { "ssl_config": { Required: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue([]string{"enabled", "disabled"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"enabled", "disabled"}), Description: "The SSL configuration status of the instance: `enabled`,`disabled`.", }, }, @@ -38,8 +40,8 @@ func resourceTencentCloudRedisSsl() *schema.Resource { } func resourceTencentCloudRedisSslCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_ssl.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_ssl.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( instanceId string @@ -54,13 +56,13 @@ func resourceTencentCloudRedisSslCreate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudRedisSslRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_ssl.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_ssl.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() @@ -87,11 +89,11 @@ func resourceTencentCloudRedisSslRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudRedisSslUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_ssl.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_ssl.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( openSSLRequest = redis.NewOpenSSLRequest() @@ -104,15 +106,15 @@ func resourceTencentCloudRedisSslUpdate(d *schema.ResourceData, meta interface{} config := v.(string) if config == "enabled" { openSSLRequest.InstanceId = &instanceId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().OpenSSL(openSSLRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().OpenSSL(openSSLRequest) if e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { if ee.Code == "FailedOperation.SystemError" { return resource.NonRetryableError(e) } } - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, openSSLRequest.GetAction(), openSSLRequest.ToJsonString(), result.ToJsonString()) } @@ -125,15 +127,15 @@ func resourceTencentCloudRedisSslUpdate(d *schema.ResourceData, meta interface{} } } else { closeSSLRequest.InstanceId = &instanceId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().CloseSSL(closeSSLRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().CloseSSL(closeSSLRequest) if e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { if ee.Code == "FailedOperation.SystemError" { return resource.NonRetryableError(e) } } - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, closeSSLRequest.GetAction(), closeSSLRequest.ToJsonString(), result.ToJsonString()) } @@ -147,9 +149,9 @@ func resourceTencentCloudRedisSslUpdate(d *schema.ResourceData, meta interface{} } } - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if taskId > 0 { - err := resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -175,8 +177,8 @@ func resourceTencentCloudRedisSslUpdate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudRedisSslDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_ssl.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_ssl.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_redis_ssl_test.go b/tencentcloud/services/crs/resource_tc_redis_ssl_test.go similarity index 93% rename from tencentcloud/resource_tc_redis_ssl_test.go rename to tencentcloud/services/crs/resource_tc_redis_ssl_test.go index 32febd8fdf..5b050a7d11 100644 --- a/tencentcloud/resource_tc_redis_ssl_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_ssl_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudRedisSslResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisSsl, diff --git a/tencentcloud/resource_tc_redis_startup_instance_operation.go b/tencentcloud/services/crs/resource_tc_redis_startup_instance_operation.go similarity index 69% rename from tencentcloud/resource_tc_redis_startup_instance_operation.go rename to tencentcloud/services/crs/resource_tc_redis_startup_instance_operation.go index faf451250b..280af10d4f 100644 --- a/tencentcloud/resource_tc_redis_startup_instance_operation.go +++ b/tencentcloud/services/crs/resource_tc_redis_startup_instance_operation.go @@ -1,18 +1,21 @@ -package tencentcloud +package crs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudRedisStartupInstanceOperation() *schema.Resource { +func ResourceTencentCloudRedisStartupInstanceOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisStartupInstanceOperationCreate, Read: resourceTencentCloudRedisStartupInstanceOperationRead, @@ -30,11 +33,11 @@ func resourceTencentCloudRedisStartupInstanceOperation() *schema.Resource { } func resourceTencentCloudRedisStartupInstanceOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_startup_instance_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_startup_instance_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = redis.NewStartupInstanceRequest() @@ -46,10 +49,10 @@ func resourceTencentCloudRedisStartupInstanceOperationCreate(d *schema.ResourceD request.InstanceId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().StartupInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().StartupInstance(request) if e != nil { - return retryError(e) + 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()) } @@ -63,9 +66,9 @@ func resourceTencentCloudRedisStartupInstanceOperationCreate(d *schema.ResourceD d.SetId(instanceId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} taskId := *response.Response.TaskId - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -90,15 +93,15 @@ func resourceTencentCloudRedisStartupInstanceOperationCreate(d *schema.ResourceD } func resourceTencentCloudRedisStartupInstanceOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_startup_instance_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_startup_instance_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudRedisStartupInstanceOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_startup_instance_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_startup_instance_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_redis_startup_instance_operation_test.go b/tencentcloud/services/crs/resource_tc_redis_startup_instance_operation_test.go similarity index 82% rename from tencentcloud/resource_tc_redis_startup_instance_operation_test.go rename to tencentcloud/services/crs/resource_tc_redis_startup_instance_operation_test.go index 07b1c2cb4e..dff39a71e8 100644 --- a/tencentcloud/resource_tc_redis_startup_instance_operation_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_startup_instance_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixRedisStartupInstanceOperationResource_basic(t *te t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisStartupInstanceOperation, diff --git a/tencentcloud/resource_tc_redis_switch_master.go b/tencentcloud/services/crs/resource_tc_redis_switch_master.go similarity index 72% rename from tencentcloud/resource_tc_redis_switch_master.go rename to tencentcloud/services/crs/resource_tc_redis_switch_master.go index c5c79ad1cd..f46be906d5 100644 --- a/tencentcloud/resource_tc_redis_switch_master.go +++ b/tencentcloud/services/crs/resource_tc_redis_switch_master.go @@ -1,18 +1,21 @@ -package tencentcloud +package crs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudRedisSwitchMaster() *schema.Resource { +func ResourceTencentCloudRedisSwitchMaster() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisSwitchMasterCreate, Read: resourceTencentCloudRedisSwitchMasterRead, @@ -36,8 +39,8 @@ func resourceTencentCloudRedisSwitchMaster() *schema.Resource { } func resourceTencentCloudRedisSwitchMasterCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_switch_master.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_switch_master.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( instanceId string @@ -52,13 +55,13 @@ func resourceTencentCloudRedisSwitchMasterCreate(d *schema.ResourceData, meta in } func resourceTencentCloudRedisSwitchMasterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_switch_master.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_switch_master.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} instanceId := d.Id() paramMap := make(map[string]interface{}) @@ -90,11 +93,11 @@ func resourceTencentCloudRedisSwitchMasterRead(d *schema.ResourceData, meta inte } func resourceTencentCloudRedisSwitchMasterUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_switch_master.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_switch_master.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := redis.NewChangeReplicaToMasterRequest() response := redis.NewChangeReplicaToMasterResponse() @@ -106,8 +109,8 @@ func resourceTencentCloudRedisSwitchMasterUpdate(d *schema.ResourceData, meta in request.GroupId = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().ChangeReplicaToMaster(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().ChangeReplicaToMaster(request) if e != nil { if _, ok := e.(*sdkErrors.TencentCloudSDKError); !ok { return resource.RetryableError(e) @@ -125,9 +128,9 @@ func resourceTencentCloudRedisSwitchMasterUpdate(d *schema.ResourceData, meta in return err } - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} taskId := *response.Response.TaskId - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -152,8 +155,8 @@ func resourceTencentCloudRedisSwitchMasterUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudRedisSwitchMasterDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_switch_master.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_switch_master.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_redis_switch_master_test.go b/tencentcloud/services/crs/resource_tc_redis_switch_master_test.go similarity index 89% rename from tencentcloud/resource_tc_redis_switch_master_test.go rename to tencentcloud/services/crs/resource_tc_redis_switch_master_test.go index 13ffc6f406..7a8642c5e3 100644 --- a/tencentcloud/resource_tc_redis_switch_master_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_switch_master_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudRedisSwitchMasterResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisSwitchMaster, diff --git a/tencentcloud/resource_tc_redis_upgrade_cache_version_operation.go b/tencentcloud/services/crs/resource_tc_redis_upgrade_cache_version_operation.go similarity index 75% rename from tencentcloud/resource_tc_redis_upgrade_cache_version_operation.go rename to tencentcloud/services/crs/resource_tc_redis_upgrade_cache_version_operation.go index f8ade39dcc..295a973023 100644 --- a/tencentcloud/resource_tc_redis_upgrade_cache_version_operation.go +++ b/tencentcloud/services/crs/resource_tc_redis_upgrade_cache_version_operation.go @@ -1,18 +1,21 @@ -package tencentcloud +package crs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudRedisUpgradeCacheVersionOperation() *schema.Resource { +func ResourceTencentCloudRedisUpgradeCacheVersionOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisUpgradeCacheVersionOperationCreate, Read: resourceTencentCloudRedisUpgradeCacheVersionOperationRead, @@ -53,11 +56,11 @@ func resourceTencentCloudRedisUpgradeCacheVersionOperation() *schema.Resource { } func resourceTencentCloudRedisUpgradeCacheVersionOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_upgrade_cache_version_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_upgrade_cache_version_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = redis.NewUpgradeSmallVersionRequest() @@ -81,10 +84,10 @@ func resourceTencentCloudRedisUpgradeCacheVersionOperationCreate(d *schema.Resou request.InstanceTypeUpgradeNow = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().UpgradeSmallVersion(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().UpgradeSmallVersion(request) if e != nil { - return retryError(e) + 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()) } @@ -98,9 +101,9 @@ func resourceTencentCloudRedisUpgradeCacheVersionOperationCreate(d *schema.Resou d.SetId(instanceId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} taskId := *response.Response.FlowId - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -125,15 +128,15 @@ func resourceTencentCloudRedisUpgradeCacheVersionOperationCreate(d *schema.Resou } func resourceTencentCloudRedisUpgradeCacheVersionOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_upgrade_cache_version_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_upgrade_cache_version_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudRedisUpgradeCacheVersionOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_upgrade_cache_version_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_upgrade_cache_version_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_redis_upgrade_cache_version_operation_test.go b/tencentcloud/services/crs/resource_tc_redis_upgrade_cache_version_operation_test.go similarity index 82% rename from tencentcloud/resource_tc_redis_upgrade_cache_version_operation_test.go rename to tencentcloud/services/crs/resource_tc_redis_upgrade_cache_version_operation_test.go index c8adcad8b9..d7c4c4208a 100644 --- a/tencentcloud/resource_tc_redis_upgrade_cache_version_operation_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_upgrade_cache_version_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixRedisUpgradeCacheVersionOperationResource_basic(t t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisUpgradeCacheVersionOperation, diff --git a/tencentcloud/resource_tc_redis_upgrade_multi_zone_operation.go b/tencentcloud/services/crs/resource_tc_redis_upgrade_multi_zone_operation.go similarity index 75% rename from tencentcloud/resource_tc_redis_upgrade_multi_zone_operation.go rename to tencentcloud/services/crs/resource_tc_redis_upgrade_multi_zone_operation.go index c69172bf0a..9d2e1d6477 100644 --- a/tencentcloud/resource_tc_redis_upgrade_multi_zone_operation.go +++ b/tencentcloud/services/crs/resource_tc_redis_upgrade_multi_zone_operation.go @@ -1,18 +1,21 @@ -package tencentcloud +package crs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudRedisUpgradeMultiZoneOperation() *schema.Resource { +func ResourceTencentCloudRedisUpgradeMultiZoneOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisUpgradeMultiZoneOperationCreate, Read: resourceTencentCloudRedisUpgradeMultiZoneOperationRead, @@ -39,11 +42,11 @@ func resourceTencentCloudRedisUpgradeMultiZoneOperation() *schema.Resource { } func resourceTencentCloudRedisUpgradeMultiZoneOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_upgrade_multi_zone_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_upgrade_multi_zone_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = redis.NewUpgradeVersionToMultiAvailabilityZonesRequest() @@ -59,10 +62,10 @@ func resourceTencentCloudRedisUpgradeMultiZoneOperationCreate(d *schema.Resource request.UpgradeProxyAndRedisServer = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().UpgradeVersionToMultiAvailabilityZones(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().UpgradeVersionToMultiAvailabilityZones(request) if e != nil { - return retryError(e) + 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()) } @@ -76,9 +79,9 @@ func resourceTencentCloudRedisUpgradeMultiZoneOperationCreate(d *schema.Resource d.SetId(instanceId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} taskId := *response.Response.FlowId - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -103,15 +106,15 @@ func resourceTencentCloudRedisUpgradeMultiZoneOperationCreate(d *schema.Resource } func resourceTencentCloudRedisUpgradeMultiZoneOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_upgrade_multi_zone_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_upgrade_multi_zone_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudRedisUpgradeMultiZoneOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_upgrade_multi_zone_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_upgrade_multi_zone_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_redis_upgrade_multi_zone_operation_test.go b/tencentcloud/services/crs/resource_tc_redis_upgrade_multi_zone_operation_test.go similarity index 85% rename from tencentcloud/resource_tc_redis_upgrade_multi_zone_operation_test.go rename to tencentcloud/services/crs/resource_tc_redis_upgrade_multi_zone_operation_test.go index 1aa725b014..68b45a350b 100644 --- a/tencentcloud/resource_tc_redis_upgrade_multi_zone_operation_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_upgrade_multi_zone_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudRedisUpgradeMultiZoneOperationResource_basic(t *testing. t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisUpgradeMultiZoneOperation(), @@ -25,7 +27,7 @@ func TestAccTencentCloudRedisUpgradeMultiZoneOperationResource_basic(t *testing. }) } -// const testAccRedisUpgradeMultiZoneOperation = defaultVpcVariable + ` +// const testAccRedisUpgradeMultiZoneOperation = tcacctest.DefaultVpcVariable + ` // resource "tencentcloud_redis_instance" "redis_cluster" { // availability_zone = "ap-guangzhou-3" diff --git a/tencentcloud/resource_tc_redis_upgrade_proxy_version_operation.go b/tencentcloud/services/crs/resource_tc_redis_upgrade_proxy_version_operation.go similarity index 76% rename from tencentcloud/resource_tc_redis_upgrade_proxy_version_operation.go rename to tencentcloud/services/crs/resource_tc_redis_upgrade_proxy_version_operation.go index b7360ce90c..cb410492fa 100644 --- a/tencentcloud/resource_tc_redis_upgrade_proxy_version_operation.go +++ b/tencentcloud/services/crs/resource_tc_redis_upgrade_proxy_version_operation.go @@ -1,18 +1,21 @@ -package tencentcloud +package crs import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudRedisUpgradeProxyVersionOperation() *schema.Resource { +func ResourceTencentCloudRedisUpgradeProxyVersionOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudRedisUpgradeProxyVersionOperationCreate, Read: resourceTencentCloudRedisUpgradeProxyVersionOperationRead, @@ -53,11 +56,11 @@ func resourceTencentCloudRedisUpgradeProxyVersionOperation() *schema.Resource { } func resourceTencentCloudRedisUpgradeProxyVersionOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_upgrade_proxy_version_operation.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_upgrade_proxy_version_operation.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = redis.NewUpgradeProxyVersionRequest() @@ -81,10 +84,10 @@ func resourceTencentCloudRedisUpgradeProxyVersionOperationCreate(d *schema.Resou request.InstanceTypeUpgradeNow = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseRedisClient().UpgradeProxyVersion(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseRedisClient().UpgradeProxyVersion(request) if e != nil { - return retryError(e) + 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()) } @@ -98,9 +101,9 @@ func resourceTencentCloudRedisUpgradeProxyVersionOperationCreate(d *schema.Resou d.SetId(instanceId) - service := RedisService{client: meta.(*TencentCloudClient).apiV3Conn} + service := RedisService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} taskId := *response.Response.FlowId - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeTaskInfo(ctx, instanceId, taskId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -125,15 +128,15 @@ func resourceTencentCloudRedisUpgradeProxyVersionOperationCreate(d *schema.Resou } func resourceTencentCloudRedisUpgradeProxyVersionOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_upgrade_proxy_version_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_upgrade_proxy_version_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudRedisUpgradeProxyVersionOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_redis_upgrade_proxy_version_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_redis_upgrade_proxy_version_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_redis_upgrade_proxy_version_operation_test.go b/tencentcloud/services/crs/resource_tc_redis_upgrade_proxy_version_operation_test.go similarity index 82% rename from tencentcloud/resource_tc_redis_upgrade_proxy_version_operation_test.go rename to tencentcloud/services/crs/resource_tc_redis_upgrade_proxy_version_operation_test.go index 6496321f37..f6450642af 100644 --- a/tencentcloud/resource_tc_redis_upgrade_proxy_version_operation_test.go +++ b/tencentcloud/services/crs/resource_tc_redis_upgrade_proxy_version_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package crs_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixRedisUpgradeProxyVersionOperationResource_basic(t t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccRedisUpgradeProxyVersionOperation, diff --git a/tencentcloud/services/crs/service_tencentcloud_redis.go b/tencentcloud/services/crs/service_tencentcloud_redis.go new file mode 100644 index 0000000000..0cdc893750 --- /dev/null +++ b/tencentcloud/services/crs/service_tencentcloud_redis.go @@ -0,0 +1,1933 @@ +package crs + +import ( + "context" + "fmt" + "log" + "strconv" + "time" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +func NewRedisService(client *connectivity.TencentCloudClient) RedisService { + return RedisService{client: client} +} + +type RedisService struct { + client *connectivity.TencentCloudClient + zoneMap map[int64]string +} + +type TencentCloudRedisDetail struct { + RedisId string + Name string + Zone string + ProjectId int64 + TypeId int64 + Type string + MemSize int64 + Status string + VpcId string + SubnetId string + Ip string + Port int64 + RedisShardNum int64 + RedisReplicasNum int64 + CreateTime string + Tags map[string]string + BillingMode string + NodeInfo []map[string]interface{} +} + +func (me *RedisService) fullZoneId() (errRet error) { + if me.zoneMap == nil { + me.zoneMap = make(map[int64]string) + } + if len(me.zoneMap) != 0 { + return + } + response, err := me.client.UseCvmClient().DescribeZones(cvm.NewDescribeZonesRequest()) + if err != nil { + return err + } + for _, item := range response.Response.ZoneSet { + if zoneId, err := strconv.ParseInt(*item.ZoneId, 10, 64); err != nil { + return fmt.Errorf("[sdk]DescribeZones return ZoneId is not illegal,%s", *item.ZoneId) + } else { + me.zoneMap[zoneId] = *item.Zone + } + } + + return nil +} + +func (me *RedisService) getZoneId(name string) (id int64, errRet error) { + if errRet = me.fullZoneId(); errRet != nil { + return + } + for key, value := range me.zoneMap { + if value == name { + id = key + return + } + } + errRet = fmt.Errorf("this redis zone %s not support yet", name) + return +} + +func (me *RedisService) getZoneName(id int64) (name string, errRet error) { + if errRet = me.fullZoneId(); errRet != nil { + return + } + name = me.zoneMap[id] + if name == "" { + errRet = fmt.Errorf("this redis zoneid %d not support yet", id) + } + return +} + +func (me *RedisService) DescribeRedisZoneConfig(ctx context.Context) (sellConfigures []*redis.RegionConf, errRet error) { + logId := tccommon.GetLogId(ctx) + request := redis.NewDescribeProductInfoRequest() + 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.UseRedisClient().DescribeProductInfo(request) + if err != nil { + errRet = err + return + } + sellConfigures = response.Response.RegionSet + return +} + +func (me *RedisService) DescribeInstances(ctx context.Context, zoneName, searchKey string, + projectId, needLimit int64) (instances []TencentCloudRedisDetail, errRet error) { + + logId := tccommon.GetLogId(ctx) + + var zoneId int64 = -1 + + if zoneName != "" { + zoneId, errRet = me.getZoneId(zoneName) + if errRet != nil { + return + } + } + + listInitSize := map[bool]int64{true: 500, false: needLimit}[needLimit > 500 || needLimit < 1] + instances = make([]TencentCloudRedisDetail, 0, listInitSize) + + request := redis.NewDescribeInstancesRequest() + + 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()) + } + }() + + var ( + limit, offset uint64 = 2, 0 + leftNumber int64 + leftNumberInit bool + ) + + request.Limit = &limit + request.Offset = &offset + +needMoreItems: + if searchKey != "" { + request.SearchKey = &searchKey + } + if projectId >= 0 { + request.ProjectIds = []*int64{&projectId} + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseRedisClient().DescribeInstances(request) + if err != nil { + errRet = err + return + } + if !leftNumberInit { + leftNumber = *response.Response.TotalCount + leftNumberInit = true + } + leftNumber = leftNumber - int64(limit) + offset = offset + limit + for _, item := range response.Response.InstanceSet { + if zoneId != -1 && *item.ZoneId != zoneId { + continue + } + var instance TencentCloudRedisDetail + instance.Type = REDIS_NAMES[*item.Type] + if REDIS_STATUS[*item.Status] == "" { + instance.Status = "unknown" + } else { + instance.Status = REDIS_STATUS[*item.Status] + } + + name, err := me.getZoneName(*item.ZoneId) + if err != nil { + errRet = err + return + } + + instance.Zone = name + instance.CreateTime = *item.Createtime + instance.Ip = *item.WanIp + instance.MemSize = *item.RedisShardSize + instance.Name = *item.InstanceName + instance.Port = *item.Port + instance.ProjectId = *item.ProjectId + instance.RedisId = *item.InstanceId + instance.SubnetId = *item.UniqSubnetId + instance.VpcId = *item.UniqVpcId + instance.BillingMode = REDIS_CHARGE_TYPE_NAME[*item.BillingMode] + + instance.TypeId = *item.Type + if item.RedisReplicasNum != nil { + instance.RedisReplicasNum = *item.RedisReplicasNum + } + if item.RedisShardNum != nil { + instance.RedisShardNum = *item.RedisShardNum + } + + if item.NodeSet != nil { + nodeInfos := make([]map[string]interface{}, 0, len(item.NodeSet)) + for i := range item.NodeSet { + dMap := make(map[string]interface{}) + nodeInfo := item.NodeSet[i] + if *nodeInfo.NodeType == 0 { + dMap["master"] = true + } else { + dMap["master"] = false + } + dMap["id"] = *nodeInfo.NodeId + dMap["zone_id"] = *nodeInfo.ZoneId + nodeInfos = append(nodeInfos, dMap) + } + instance.NodeInfo = nodeInfos + } + instance.Tags = make(map[string]string, len(item.InstanceTags)) + for _, tag := range item.InstanceTags { + if tag.TagKey == nil { + return nil, fmt.Errorf("[CRITAL]%s api[%s] redis instance tag key is nil", logId, request.GetAction()) + } + if tag.TagValue == nil { + return nil, fmt.Errorf("[CRITAL]%s api[%s] redis instance tag value is nil", logId, request.GetAction()) + } + + instance.Tags[*tag.TagKey] = *tag.TagValue + } + + instances = append(instances, instance) + + if needLimit > 0 && int64(len(instances)) >= needLimit { + return + } + } + if leftNumber < 0 { + return + } else { + goto needMoreItems + } +} + +func (me *RedisService) CreateInstances(ctx context.Context, + zoneName string, typeId int64, password, vpcId, subnetId, redisName string, + memSize, projectId, port int64, + securityGroups []string, + redisShardNum, + redisReplicasNum int, + chargeTypeID int64, + chargePeriod uint64, + nodeInfo []*redis.RedisNodeInfo, + noAuth bool, + autoRenewFlag int, + replicasReadonly bool, + paramsTemplateId string, +) (instanceIds []*string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := redis.NewCreateInstancesRequest() + 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()) + } + }() + + // zone + var intZoneId int64 + intZoneId, errRet = me.getZoneId(zoneName) + if errRet != nil { + return + } + request.ZoneId = helper.Int64Uint64(intZoneId) + request.TypeId = helper.Int64Uint64(typeId) + + // vpc + if (vpcId == "" && subnetId != "") || (vpcId != "" && subnetId == "") { + errRet = fmt.Errorf("redis need vpcId and subnetId both set or none") + return + } + if vpcId != "" && subnetId != "" { + request.VpcId = &vpcId + request.SubnetId = &subnetId + } else { + if len(securityGroups) > 0 { + errRet = fmt.Errorf("redis need empty security_groups if vpc_id and subnet_id is empty") + return + } + } + + if projectId >= 0 { + request.ProjectId = &projectId + } + + var ( + vport = uint64(port) + umemSize = uint64(memSize) + goodsNum uint64 = 1 + ) + request.VPort = &vport + request.MemSize = &umemSize + request.BillingMode = &chargeTypeID + request.GoodsNum = &goodsNum + request.Period = &chargePeriod + if redisShardNum > 0 { + request.RedisShardNum = helper.IntInt64(redisShardNum) + } + if redisReplicasNum > 0 { + request.RedisReplicasNum = helper.IntInt64(redisReplicasNum) + } + if redisName != "" { + request.InstanceName = &redisName + } + + request.Password = &password + + if len(securityGroups) > 0 { + request.SecurityGroupIdList = make([]*string, 0, len(securityGroups)) + for v := range securityGroups { + request.SecurityGroupIdList = append(request.SecurityGroupIdList, &securityGroups[v]) + } + } + + if len(nodeInfo) > 0 { + request.NodeSet = nodeInfo + } + + if noAuth { + request.NoAuth = &noAuth + } + if chargeTypeID == REDIS_CHARGE_TYPE_ID[REDIS_CHARGE_TYPE_PREPAID] { + request.AutoRenew = helper.IntUint64(autoRenewFlag) + } + if replicasReadonly { + request.ReplicasReadonly = &replicasReadonly + } + if paramsTemplateId != "" { + request.TemplateId = ¶msTemplateId + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseRedisClient().CreateInstances(request) + if err != nil { + errRet = err + return + } + log.Println(response.ToJsonString()) + instanceIds = response.Response.InstanceIds + return +} + +func (me *RedisService) CheckRedisOnlineOk(ctx context.Context, redisId string, retryTimeout time.Duration) (has bool, + online bool, + info *redis.InstanceSet, + errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := redis.NewDescribeInstancesRequest() + + 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()) + } + }() + request.InstanceId = &redisId + + // Post https://cdb.tencentcloudapi.com/: always get "Gateway Time-out" + var response *redis.DescribeInstancesResponse + err := resource.Retry(retryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, e := me.client.UseRedisClient().DescribeInstances(request) + if e != nil { + log.Printf("[CRITAL]%s CheckRedisOnlineOk fail, reason:%s\n", logId, e.Error()) + return tccommon.RetryError(e) + } + response = result + + if len(response.Response.InstanceSet) == 0 { + has = false + return resource.NonRetryableError(fmt.Errorf("instance %s not exist", redisId)) + } + + info = response.Response.InstanceSet[0] + has = true + + if *info.Status == REDIS_STATUS_ONLINE { + online = true + return nil + } + + if *info.Status == REDIS_STATUS_INIT || *info.Status == REDIS_STATUS_PROCESSING { + online = false + return resource.RetryableError(fmt.Errorf("istance %s status is %d, retrying", redisId, *info.Status)) + } + + return nil + }) + + if err != nil { + errRet = err + return + } + + return +} + +func (me *RedisService) CheckRedisUpdateOk(ctx context.Context, redisId string) (errRet error) { + var startUpdate bool + logId := tccommon.GetLogId(ctx) + request := redis.NewDescribeInstancesRequest() + 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()) + } + }() + request.InstanceId = &redisId + errRet = resource.Retry(tccommon.ReadRetryTimeout*20, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseRedisClient().DescribeInstances(request) + if err != nil { + return tccommon.RetryError(err) + } + if len(result.Response.InstanceSet) == 0 { + return resource.NonRetryableError(fmt.Errorf("redis %s not exist", redisId)) + } + info := result.Response.InstanceSet[0] + if !startUpdate && *info.Status == REDIS_STATUS_ONLINE { + return resource.RetryableError(fmt.Errorf("waiting for upgrade start")) + } + startUpdate = true + if *info.Status == REDIS_STATUS_PROCESSING || *info.Status == REDIS_STATUS_INIT { + return resource.RetryableError(fmt.Errorf("instance %s status is %d", redisId, *info.Status)) + } + return nil + }) + + return +} + +func (me *RedisService) CheckRedisDestroyOk(ctx context.Context, redisId string) (has bool, + isolated bool, + errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := redis.NewDescribeInstancesRequest() + + 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()) + } + }() + request.InstanceId = &redisId + + // Post https://cdb.tencentcloudapi.com/: always get "Gateway Time-out" + var response *redis.DescribeInstancesResponse + err := resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, e := me.client.UseRedisClient().DescribeInstances(request) + if e != nil { + log.Printf("[CRITAL]%s CheckRedisDestroyOk fail, reason:%s\n", logId, e.Error()) + return tccommon.RetryError(e) + } + response = result + return nil + }) + + if err != nil { + errRet = err + return + } + + if len(response.Response.InstanceSet) == 0 { + has = false + return + } + + if len(response.Response.InstanceSet) != 1 { + errRet = fmt.Errorf("redis DescribeInstances one id get %d redis info", len(response.Response.InstanceSet)) + return + } + + has = true + + info := response.Response.InstanceSet[0] + if *info.Status <= REDIS_STATUS_ISOLATE { + isolated = true + return + } else { + isolated = false + return + } +} + +func (me *RedisService) DescribeInstanceDealDetail(ctx context.Context, dealId string) (done bool, redisId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := redis.NewDescribeInstanceDealDetailRequest() + + 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()) + } + }() + + request.DealIds = []*string{&dealId} + + // Post https://cdb.tencentcloudapi.com/: always get "Gateway Time-out" + var response *redis.DescribeInstanceDealDetailResponse + err := resource.Retry(10*tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, e := me.client.UseRedisClient().DescribeInstanceDealDetail(request) + if e != nil { + log.Printf("[CRITAL]%s DescribeInstanceDealDetail fail, reason:%s\n", logId, e.Error()) + return tccommon.RetryError(e) + } + response = result + return nil + }) + + if err != nil { + errRet = err + return + } + + if len(response.Response.DealDetails) != 1 { + errRet = fmt.Errorf("Redis api DescribeInstanceDealDetail one dealId[%s] return %d deal infos.", + dealId, len(response.Response.DealDetails)) + return + } + + dealDetail := response.Response.DealDetails[0] + status := *dealDetail.Status + + if status == REDIS_ORDER_SUCCESS_DELIVERY { + + if len(dealDetail.InstanceIds) != 1 { + errRet = fmt.Errorf("redis one dealid give %d redis id", len(dealDetail.InstanceIds)) + return + } + redisId = *dealDetail.InstanceIds[0] + done = true + return + } + if status < REDIS_ORDER_SUCCESS_DELIVERY || status == REDIS_ORDER_PAYMENT { + return + } + errRet = fmt.Errorf("redis instance delivery failure, deal status is %d", status) + return +} + +func (me *RedisService) ModifyInstanceName(ctx context.Context, redisId string, name string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := redis.NewModifyInstanceRequest() + + 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()) + } + }() + op := "rename" + request.InstanceName = &name + request.Operation = &op + request.InstanceId = &redisId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseRedisClient().ModifyInstance(request) + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + errRet = err + return +} + +func (me *RedisService) ModifyInstanceProjectId(ctx context.Context, redisId string, projectId int64) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := redis.NewModifyInstanceRequest() + + 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()) + } + }() + op := "modifyProject" + request.ProjectId = &projectId + request.Operation = &op + request.InstanceId = &redisId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseRedisClient().ModifyInstance(request) + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + errRet = err + return +} + +func (me *RedisService) DescribeInstanceSecurityGroup(ctx context.Context, redisId string) (sg []string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := redis.NewDescribeInstanceSecurityGroupRequest() + request.InstanceIds = []*string{&redisId} + 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.UseRedisClient().DescribeInstanceSecurityGroup(request) + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + if err != nil { + errRet = err + return + } + + if len(response.Response.InstanceSecurityGroupsDetail) > 0 { + for _, item := range response.Response.InstanceSecurityGroupsDetail { + if *item.InstanceId == redisId { + sg = make([]string, 0, len(item.SecurityGroupDetails)) + for _, v := range item.SecurityGroupDetails { + sg = append(sg, *v.SecurityGroupId) + } + break + } + } + } + return +} + +// DescribeDBSecurityGroups support query different type of DB by passing product name +func (me *RedisService) DescribeDBSecurityGroups(ctx context.Context, product string, instanceId string) (sg []string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := redis.NewDescribeDBSecurityGroupsRequest() + request.Product = &product + request.InstanceId = &instanceId + 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.UseRedisClient().DescribeDBSecurityGroups(request) + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + if err != nil { + errRet = err + return + } + + groups := response.Response.Groups + if len(groups) > 0 { + for i := range groups { + sg = append(sg, *groups[i].SecurityGroupId) + } + } + return +} + +func (me *RedisService) ModifyDBInstanceSecurityGroups(ctx context.Context, product string, instanceId string, securityGroupIds []*string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := redis.NewModifyDBInstanceSecurityGroupsRequest() + request.Product = &product + request.InstanceId = &instanceId + request.SecurityGroupIds = securityGroupIds + + 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.UseRedisClient().ModifyDBInstanceSecurityGroups(request) + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + errRet = err + return +} + +func (me *RedisService) DestroyPostpaidInstance(ctx context.Context, redisId string) (taskId int64, errRet error) { + logId := tccommon.GetLogId(ctx) + request := redis.NewDestroyPostpaidInstanceRequest() + request.InstanceId = &redisId + 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.UseRedisClient().DestroyPostpaidInstance(request) + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } else { + errRet = err + return + } + + taskId = *response.Response.TaskId + return +} + +func (me *RedisService) DestroyPrepaidInstance(ctx context.Context, redisId string) (dealId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := redis.NewDestroyPrepaidInstanceRequest() + request.InstanceId = &redisId + 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()) + } + }() + // For prepaid instance, deal status synchronization will take some time so need to retry. + var response *redis.DestroyPrepaidInstanceResponse + err := resource.Retry(5*tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, e := me.client.UseRedisClient().DestroyPrepaidInstance(request) + if e != nil { + log.Printf("[CRITAL]%s DestroyPrepaidInstance fail, reason:%s\n", logId, e.Error()) + return tccommon.RetryError(e) + } + response = result + return nil + }) + if err == nil { + dealId = *response.Response.DealId + } else { + errRet = err + return + } + + return +} + +func (me *RedisService) CleanUpInstance(ctx context.Context, redisId string) (taskId int64, errRet error) { + logId := tccommon.GetLogId(ctx) + request := redis.NewCleanUpInstanceRequest() + request.InstanceId = &redisId + 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()) + } + }() + // Cleaning up action for prepaid instances needs to retry. + var response *redis.CleanUpInstanceResponse + err := resource.Retry(6*tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, e := me.client.UseRedisClient().CleanUpInstance(request) + if e != nil { + log.Printf("[CRITAL]%s CleanUpInstance fail, reason:%s\n", logId, e.Error()) + return tccommon.RetryError(e) + } + response = result + return nil + }) + if err != nil { + errRet = err + return + } + taskId = *response.Response.TaskId + return +} + +func (me *RedisService) UpgradeInstance(ctx context.Context, redisId string, newMemSize, redisShardNum, redisReplicasNum int, nodeSet []*redis.RedisNodeInfo) (dealId string, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewUpgradeInstanceRequest() + request.InstanceId = &redisId + if newMemSize > 0 { + request.MemSize = helper.IntUint64(newMemSize) + } + if redisShardNum > 0 { + request.RedisShardNum = helper.IntUint64(redisShardNum) + } + if redisReplicasNum != 0 { + request.RedisReplicasNum = helper.IntUint64(redisReplicasNum) + } + if len(nodeSet) > 0 { + request.NodeSet = nodeSet + } + + 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.UseRedisClient().UpgradeInstance(request) + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } else { + errRet = err + return + } + + dealId = *response.Response.DealId + return +} + +func (me *RedisService) DescribeTaskInfo(ctx context.Context, redisId string, taskId int64) (ok bool, errRet error) { + logId := tccommon.GetLogId(ctx) + var uintTaskId = uint64(taskId) + request := redis.NewDescribeTaskInfoRequest() + request.TaskId = &uintTaskId + + 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.UseRedisClient().DescribeTaskInfo(request) + + if err != nil { + errRet = err + return + } + if *response.Response.Status == REDIS_TASK_RUNNING || *response.Response.Status == REDIS_TASK_PREPARING { + return + } + if *response.Response.Status == REDIS_TASK_SUCCEED { + ok = true + return + } + errRet = fmt.Errorf("redis task exe fail, task status is %s", *response.Response.Status) + return +} + +func (me *RedisService) ResetPassword(ctx context.Context, redisId string, newPassword string, noAuth bool) (taskId int64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewResetPasswordRequest() + request.InstanceId = &redisId + request.Password = &newPassword + request.NoAuth = &noAuth + 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.UseRedisClient().ResetPassword(request) + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } else { + errRet = err + return + } + + taskId = *response.Response.TaskId + return + +} + +func (me *RedisService) ModifyAutoBackupConfig(ctx context.Context, redisId string, weekDays []string, timePeriod string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewModifyAutoBackupConfigRequest() + request.InstanceId = &redisId + request.WeekDays = make([]*string, 0, len(weekDays)) + for index := range weekDays { + request.WeekDays = append(request.WeekDays, &weekDays[index]) + } + request.TimePeriod = &timePeriod + 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.UseRedisClient().ModifyAutoBackupConfig(request) + errRet = err + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + } + return +} + +func (me *RedisService) DescribeAutoBackupConfig(ctx context.Context, redisId string) (weekDays []string, timePeriod string, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewDescribeAutoBackupConfigRequest() + request.InstanceId = &redisId + + 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.UseRedisClient().DescribeAutoBackupConfig(request) + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + } + if err != nil { + errRet = err + return + } + + timePeriod = *response.Response.TimePeriod + + if len(response.Response.WeekDays) > 0 { + weekDays = make([]string, 0, len(response.Response.WeekDays)) + for _, v := range response.Response.WeekDays { + weekDays = append(weekDays, *v) + } + } + return +} + +func (me *RedisService) DescribeParamTemplates(ctx context.Context, request *redis.DescribeParamTemplatesRequest) (params []*redis.ParamTemplateInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseRedisClient().DescribeParamTemplates(request) + + if err != nil { + errRet = err + return + } + + params = response.Response.Items + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *RedisService) DescribeParamTemplateById(ctx context.Context, id string) (params *redis.ParamTemplateInfo, errRet error) { + request := redis.NewDescribeParamTemplatesRequest() + + request.TemplateIds = []*string{&id} + + result, err := me.DescribeParamTemplates(ctx, request) + + if err != nil { + errRet = err + return + } + + if len(result) == 0 { + return + } + + params = result[0] + + return +} + +func (me *RedisService) ApplyParamsTemplate(ctx context.Context, request *redis.ApplyParamsTemplateRequest) (taskIds []*int64, errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseRedisClient().ApplyParamsTemplate(request) + + if err != nil { + errRet = err + return + } + + taskIds = response.Response.TaskIds + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *RedisService) DescribeParamTemplateInfo(ctx context.Context, templateId string) (info *redis.DescribeParamTemplateInfoResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + request := redis.NewDescribeParamTemplateInfoRequest() + 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()) + } + }() + + request.TemplateId = &templateId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseRedisClient().DescribeParamTemplateInfo(request) + + if err != nil { + errRet = err + return + } + + info = response.Response + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *RedisService) CreateParamTemplate(ctx context.Context, request *redis.CreateParamTemplateRequest) (id string, errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseRedisClient().CreateParamTemplate(request) + + if err != nil { + errRet = err + return + } + + if response.Response == nil { + errRet = fmt.Errorf("[%s] returns nil response", request.GetAction()) + return + } + + id = *response.Response.TemplateId + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *RedisService) ModifyParamTemplate(ctx context.Context, request *redis.ModifyParamTemplateRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseRedisClient().ModifyParamTemplate(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 +} + +func (me *RedisService) DeleteParamTemplate(ctx context.Context, request *redis.DeleteParamTemplateRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseRedisClient().DeleteParamTemplate(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 +} + +func (me *RedisService) DescribeRedisAccountById(ctx context.Context, instanceId, accountName string) (account *redis.Account, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewDescribeInstanceAccountRequest() + request.InstanceId = &instanceId + + 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()) + + var offset int64 = 0 + var limit int64 = 50 + for { + request.Offset = &offset + request.Limit = &limit + ratelimit.Check(request.GetAction()) + response, err := me.client.UseRedisClient().DescribeInstanceAccount(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.Accounts) < 1 { + break + } + for _, v := range response.Response.Accounts { + if *v.AccountName == accountName { + account = v + return + } + } + if len(response.Response.Accounts) < int(limit) { + break + } + offset += limit + } + + return +} + +func (me *RedisService) DeleteRedisAccountById(ctx context.Context, instanceId, accountName string) (taskId int64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewDeleteInstanceAccountRequest() + request.InstanceId = &instanceId + request.AccountName = &accountName + + 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.UseRedisClient().DeleteInstanceAccount(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()) + taskId = *response.Response.TaskId + + return +} + +func (me *RedisService) RedisAccountStateRefreshFunc(instanceId, accountName string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + ctx := tccommon.ContextNil + + object, err := me.DescribeRedisAccountById(ctx, instanceId, accountName) + if err != nil { + return nil, "", err + } + + if object == nil { + return nil, "", nil + } + + return object, helper.PString(helper.String(strconv.FormatInt(*object.Status, 10))), nil + } +} + +func (me *RedisService) DescribeRedisInstanceById(ctx context.Context, instanceId string) (param *redis.InstanceSet, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewDescribeInstancesRequest() + request.InstanceId = &instanceId + + 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.UseRedisClient().DescribeInstances(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()) + + if len(response.Response.InstanceSet) < 1 { + return + } + + param = response.Response.InstanceSet[0] + return +} + +func (me *RedisService) DescribeRedisParamById(ctx context.Context, instanceId string) (params map[string]interface{}, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewDescribeInstanceParamsRequest() + request.InstanceId = &instanceId + + 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.UseRedisClient().DescribeInstanceParams(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()) + + param := response.Response + instanceParams := make(map[string]interface{}) + if param.InstanceEnumParam != nil { + for _, v := range param.InstanceEnumParam { + key := *v.ParamName + value := *v.CurrentValue + instanceParams[key] = value + } + } + if param.InstanceIntegerParam != nil { + for _, v := range param.InstanceIntegerParam { + key := *v.ParamName + value := *v.CurrentValue + instanceParams[key] = value + } + } + if param.InstanceMultiParam != nil { + for _, v := range param.InstanceMultiParam { + key := *v.ParamName + value := *v.CurrentValue + instanceParams[key] = value + } + } + if param.InstanceTextParam != nil { + for _, v := range param.InstanceTextParam { + key := *v.ParamName + value := *v.CurrentValue + instanceParams[key] = value + } + } + params = instanceParams + return +} + +func (me *RedisService) DescribeRedisSslById(ctx context.Context, instanceId string) (ssl *redis.DescribeSSLStatusResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewDescribeSSLStatusRequest() + request.InstanceId = &instanceId + + 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.UseRedisClient().DescribeSSLStatus(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()) + + ssl = response.Response + return +} + +func (me *RedisService) DescribeRedisMaintenanceWindowById(ctx context.Context, instanceId string) (maintenanceWindow *redis.DescribeMaintenanceWindowResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewDescribeMaintenanceWindowRequest() + request.InstanceId = &instanceId + + 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.UseRedisClient().DescribeMaintenanceWindow(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()) + + maintenanceWindow = response.Response + return +} + +func (me *RedisService) DescribeRedisBackupDownloadInfoByFilter(ctx context.Context, param map[string]interface{}) (backup []*redis.BackupDownloadInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = redis.NewDescribeBackupUrlRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "instance_id" { + request.InstanceId = v.(*string) + } + if k == "backup_id" { + request.BackupId = v.(*string) + } + if k == "limit_type" { + request.LimitType = v.(*string) + } + if k == "vpc_comparison_symbol" { + request.VpcComparisonSymbol = v.(*string) + } + if k == "ip_comparison_symbol" { + request.IpComparisonSymbol = v.(*string) + } + if k == "limit_vpc" { + request.LimitVpc = v.([]*redis.BackupLimitVpcItem) + } + if k == "limit_ip" { + request.LimitIp = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseRedisClient().DescribeBackupUrl(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()) + + backup = response.Response.BackupInfos + + return +} + +func (me *RedisService) DescribeRedisBackupByFilter(ctx context.Context, param map[string]interface{}) (backup []*redis.RedisBackupSet, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = redis.NewDescribeInstanceBackupsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "instance_id" { + request.InstanceId = v.(*string) + } + if k == "begin_time" { + request.BeginTime = v.(*string) + } + if k == "end_time" { + request.EndTime = v.(*string) + } + if k == "status" { + request.Status = v.([]*int64) + } + if k == "instance_name" { + request.InstanceName = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseRedisClient().DescribeInstanceBackups(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()) + + if response == nil || len(response.Response.BackupSet) < 1 { + break + } + backup = append(backup, response.Response.BackupSet...) + if len(response.Response.BackupSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *RedisService) DescribeRedisParamRecordsByFilter(ctx context.Context, param map[string]interface{}) (params []*redis.InstanceParamHistory, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = redis.NewDescribeInstanceParamRecordsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + instances = make([]*redis.InstanceParamHistory, 0) + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseRedisClient().DescribeInstanceParamRecords(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()) + + if response == nil || len(response.Response.InstanceParamHistory) < 1 { + break + } + instances = append(instances, response.Response.InstanceParamHistory...) + if len(response.Response.InstanceParamHistory) < int(limit) { + break + } + + offset += limit + } + if len(instances) < 1 { + return + } + params = instances + + return +} + +func (me *RedisService) DescribeRedisInstanceShardsByFilter(ctx context.Context, param map[string]interface{}) (instanceShards []*redis.InstanceClusterShard, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = redis.NewDescribeInstanceShardsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + if k == "FilterSlave" { + request.FilterSlave = v.(*bool) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseRedisClient().DescribeInstanceShards(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()) + + if response == nil || len(response.Response.InstanceShards) < 1 { + return + } + instanceShards = response.Response.InstanceShards + + return +} + +func (me *RedisService) DescribeRedisInstanceZoneInfoByFilter(ctx context.Context, param map[string]interface{}) (instanceZoneInfo []*redis.ReplicaGroup, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = redis.NewDescribeInstanceZoneInfoRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseRedisClient().DescribeInstanceZoneInfo(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()) + + if response == nil || len(response.Response.ReplicaGroups) < 1 { + return + } + instanceZoneInfo = response.Response.ReplicaGroups + + return +} + +func (me *RedisService) DescribeRedisInstanceTaskListByFilter(ctx context.Context, param map[string]interface{}) (instanceTaskList []*redis.TaskInfoDetail, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = redis.NewDescribeTaskListRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + if k == "InstanceName" { + request.InstanceName = v.(*string) + } + if k == "ProjectIds" { + request.ProjectIds = v.([]*int64) + } + if k == "TaskTypes" { + request.TaskTypes = v.([]*string) + } + if k == "BeginTime" { + request.BeginTime = v.(*string) + } + if k == "EndTime" { + request.EndTime = v.(*string) + } + if k == "TaskStatus" { + request.TaskStatus = v.([]*int64) + } + if k == "Result" { + request.Result = v.([]*int64) + } + if k == "OperateUin" { + request.OperateUin = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseRedisClient().DescribeTaskList(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()) + + if response == nil || len(response.Response.Tasks) < 1 { + break + } + instanceTaskList = append(instanceTaskList, response.Response.Tasks...) + if len(response.Response.Tasks) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *RedisService) AddReplicationInstance(ctx context.Context, groupId, instanceId, instanceRole string) error { + logId := tccommon.GetLogId(ctx) + var ( + request = redis.NewAddReplicationInstanceRequest() + response = redis.NewAddReplicationInstanceResponse() + ) + + request.GroupId = &groupId + request.InstanceId = &instanceId + request.InstanceRole = &instanceRole + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseRedisClient().AddReplicationInstance(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 redis replicateAttachment failed, reason:%+v", logId, err) + return err + } + + taskId := *response.Response.TaskId + + if taskId > 0 { + err := resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { + ok, err := me.DescribeTaskInfo(ctx, instanceId, taskId) + if err != nil { + if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { + return resource.RetryableError(err) + } else { + return resource.NonRetryableError(err) + } + } + if ok { + return nil + } else { + return resource.RetryableError(fmt.Errorf("Add replication is processing")) + } + }) + + if err != nil { + log.Printf("[CRITAL]%s redis add replication fail, reason:%s\n", logId, err.Error()) + return err + } + } + + return nil +} + +func (me *RedisService) DescribeRedisReplicateInstanceById(ctx context.Context, groupId string) (replicateGroup *redis.Groups, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewDescribeReplicationGroupRequest() + request.GroupId = &groupId + + 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()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseRedisClient().DescribeReplicationGroup(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()) + + if response == nil || len(response.Response.Groups) < 1 { + return + } + + replicateGroup = response.Response.Groups[0] + + return +} + +func (me *RedisService) DescribeRedisBackupDownloadRestrictionById(ctx context.Context) (backupDownloadRestriction *redis.DescribeBackupDownloadRestrictionResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewDescribeBackupDownloadRestrictionRequest() + + 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.UseRedisClient().DescribeBackupDownloadRestriction(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()) + + backupDownloadRestriction = response.Response + return +} + +func (me *RedisService) DescribeRedisInstanceNodeInfoByFilter(ctx context.Context, param map[string]interface{}) (instanceNodeInfo *redis.DescribeInstanceNodeInfoResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = redis.NewDescribeInstanceNodeInfoRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseRedisClient().DescribeInstanceNodeInfo(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()) + + instanceNodeInfo = response.Response + return +} + +func (me *RedisService) DescribeBandwidthRangeById(ctx context.Context, instanceId string) (connectionConfig *redis.DescribeBandwidthRangeResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewDescribeBandwidthRangeRequest() + request.InstanceId = &instanceId + + 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.UseRedisClient().DescribeBandwidthRange(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()) + + connectionConfig = response.Response + return +} + +func (me *RedisService) DeleteRedisReplicateAttachmentById(ctx context.Context, instanceId string, groupId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewRemoveReplicationInstanceRequest() + request.InstanceId = &instanceId + request.GroupId = &groupId + request.SyncType = helper.Bool(false) + + 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.UseRedisClient().RemoveReplicationInstance(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()) + + taskId := *response.Response.TaskId + + if taskId > 0 { + err := resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { + ok, err := me.DescribeTaskInfo(ctx, instanceId, taskId) + if err != nil { + if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { + return resource.RetryableError(err) + } else { + return resource.NonRetryableError(err) + } + } + if ok { + return nil + } else { + return resource.RetryableError(fmt.Errorf("remove replication is processing")) + } + }) + + if err != nil { + log.Printf("[CRITAL]%s redis remove replication fail, reason:%s\n", logId, err.Error()) + errRet = err + return + } + } + + return +} + +func (me *RedisService) DescribeRedisSecurityGroupAttachmentById(ctx context.Context, product string, instanceId string, securityGroupId string) (securityGroupAttachment *redis.SecurityGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewDescribeDBSecurityGroupsRequest() + request.Product = &product + request.InstanceId = &instanceId + + 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.UseRedisClient().DescribeDBSecurityGroups(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()) + + if len(response.Response.Groups) < 1 { + return + } + + for _, v := range response.Response.Groups { + if *v.SecurityGroupId == securityGroupId { + securityGroupAttachment = v + return + } + } + + return +} + +func (me *RedisService) DeleteRedisSecurityGroupAttachmentById(ctx context.Context, product string, instanceId string, securityGroupId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := redis.NewDisassociateSecurityGroupsRequest() + request.Product = &product + request.SecurityGroupId = &securityGroupId + request.InstanceIds = []*string{&instanceId} + + 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.UseRedisClient().DisassociateSecurityGroups(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 +} diff --git a/tencentcloud/services/crs/service_tencentcloud_tag.go b/tencentcloud/services/crs/service_tencentcloud_tag.go new file mode 100644 index 0000000000..a37bd91256 --- /dev/null +++ b/tencentcloud/services/crs/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package crs + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 4558839765d0cc4c9153337cc7938884afe45a0c Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 15:08:08 +0800 Subject: [PATCH 23/31] refactor: migrate package tencentcloud/services/css --- tencentcloud/provider.go | 76 +++++----- .../css}/data_source_tc_css_backup_stream.go | 23 +-- .../data_source_tc_css_backup_stream_test.go | 10 +- ...ata_source_tc_css_deliver_log_down_list.go | 32 ++--- ...ata_source_tc_css_deliver_log_down_list.md | 7 + ...ource_tc_css_deliver_log_down_list_test.go | 10 +- .../css}/data_source_tc_css_domains.go | 23 +-- .../css}/data_source_tc_css_domains_test.go | 10 +- .../css}/data_source_tc_css_monitor_report.go | 23 +-- .../data_source_tc_css_monitor_report_test.go | 10 +- .../css}/data_source_tc_css_pad_templates.go | 23 +-- .../data_source_tc_css_pad_templates_test.go | 10 +- ...a_source_tc_css_pull_stream_task_status.go | 23 +-- ...rce_tc_css_pull_stream_task_status_test.go | 10 +- .../data_source_tc_css_stream_monitor_list.go | 23 +-- ..._source_tc_css_stream_monitor_list_test.go | 10 +- ..._source_tc_css_time_shift_record_detail.go | 23 +-- ...ce_tc_css_time_shift_record_detail_test.go | 10 +- ...ta_source_tc_css_time_shift_stream_list.go | 23 +-- ...urce_tc_css_time_shift_stream_list_test.go | 10 +- .../css}/data_source_tc_css_watermarks.go | 23 +-- .../data_source_tc_css_watermarks_test.go | 10 +- ...ata_source_tc_css_xp2p_detail_info_list.go | 23 +-- ...ource_tc_css_xp2p_detail_info_list_test.go | 10 +- .../{ => services/css}/extension_css.go | 2 +- ...css_authenticate_domain_owner_operation.go | 27 ++-- ...uthenticate_domain_owner_operation_test.go | 8 +- .../css}/resource_tc_css_backup_stream.go | 43 +++--- .../resource_tc_css_backup_stream_test.go | 8 +- ...esource_tc_css_callback_rule_attachment.go | 45 +++--- ...ce_tc_css_callback_rule_attachment_test.go | 8 +- .../css}/resource_tc_css_callback_template.go | 51 +++---- .../resource_tc_css_callback_template_test.go | 8 +- .../css}/resource_tc_css_domain.go | 71 ++++----- .../css}/resource_tc_css_domain_referer.go | 37 ++--- .../resource_tc_css_domain_referer_test.go | 14 +- .../css}/resource_tc_css_domain_test.go | 37 ++--- ...esource_tc_css_enable_optimal_switching.go | 37 ++--- ...ce_tc_css_enable_optimal_switching_test.go | 8 +- ...e_tc_css_live_transcode_rule_attachment.go | 45 +++--- ...css_live_transcode_rule_attachment_test.go | 43 +++--- ...resource_tc_css_live_transcode_template.go | 53 +++---- ...rce_tc_css_live_transcode_template_test.go | 37 ++--- .../resource_tc_css_pad_rule_attachment.go | 45 +++--- ...esource_tc_css_pad_rule_attachment_test.go | 8 +- .../css}/resource_tc_css_pad_template.go | 51 +++---- .../css}/resource_tc_css_pad_template_test.go | 8 +- .../resource_tc_css_play_auth_key_config.go | 37 ++--- ...source_tc_css_play_auth_key_config_test.go | 16 ++- ...urce_tc_css_play_domain_cert_attachment.go | 45 +++--- ...tc_css_play_domain_cert_attachment_test.go | 32 +++-- .../css}/resource_tc_css_pull_stream_task.go | 53 +++---- ...esource_tc_css_pull_stream_task_restart.go | 31 ++-- ...ce_tc_css_pull_stream_task_restart_test.go | 10 +- .../resource_tc_css_pull_stream_task_test.go | 61 ++++---- .../resource_tc_css_push_auth_key_config.go | 37 ++--- ...source_tc_css_push_auth_key_config_test.go | 16 ++- .../resource_tc_css_record_rule_attachment.go | 45 +++--- ...urce_tc_css_record_rule_attachment_test.go | 8 +- .../css}/resource_tc_css_record_template.go | 135 ++++-------------- .../css/resource_tc_css_record_template.md | 83 +++++++++++ .../resource_tc_css_record_template_test.go | 8 +- ...esource_tc_css_snapshot_rule_attachment.go | 45 +++--- ...ce_tc_css_snapshot_rule_attachment_test.go | 8 +- .../css}/resource_tc_css_snapshot_template.go | 51 +++---- .../resource_tc_css_snapshot_template_test.go | 8 +- .../resource_tc_css_start_stream_monitor.go | 45 +++--- ...source_tc_css_start_stream_monitor_test.go | 8 +- .../css}/resource_tc_css_stream_monitor.go | 51 +++---- .../resource_tc_css_stream_monitor_test.go | 8 +- ...source_tc_css_timeshift_rule_attachment.go | 45 +++--- ...e_tc_css_timeshift_rule_attachment_test.go | 8 +- .../resource_tc_css_timeshift_template.go | 51 +++---- ...resource_tc_css_timeshift_template_test.go | 8 +- .../css}/resource_tc_css_watermark.go | 53 +++---- ...source_tc_css_watermark_rule_attachment.go | 45 +++--- ...e_tc_css_watermark_rule_attachment_test.go | 28 ++-- .../css}/resource_tc_css_watermark_test.go | 42 +++--- .../css}/service_tencentcloud_css.go | 127 ++++++++-------- 79 files changed, 1301 insertions(+), 1096 deletions(-) rename tencentcloud/{ => services/css}/data_source_tc_css_backup_stream.go (88%) rename tencentcloud/{ => services/css}/data_source_tc_css_backup_stream_test.go (59%) rename tencentcloud/{ => services/css}/data_source_tc_css_deliver_log_down_list.go (79%) create mode 100644 tencentcloud/services/css/data_source_tc_css_deliver_log_down_list.md rename tencentcloud/{ => services/css}/data_source_tc_css_deliver_log_down_list_test.go (63%) rename tencentcloud/{ => services/css}/data_source_tc_css_domains.go (90%) rename tencentcloud/{ => services/css}/data_source_tc_css_domains_test.go (72%) rename tencentcloud/{ => services/css}/data_source_tc_css_monitor_report.go (87%) rename tencentcloud/{ => services/css}/data_source_tc_css_monitor_report_test.go (66%) rename tencentcloud/{ => services/css}/data_source_tc_css_pad_templates.go (85%) rename tencentcloud/{ => services/css}/data_source_tc_css_pad_templates_test.go (86%) rename tencentcloud/{ => services/css}/data_source_tc_css_pull_stream_task_status.go (84%) rename tencentcloud/{ => services/css}/data_source_tc_css_pull_stream_task_status_test.go (81%) rename tencentcloud/{ => services/css}/data_source_tc_css_stream_monitor_list.go (95%) rename tencentcloud/{ => services/css}/data_source_tc_css_stream_monitor_list_test.go (88%) rename tencentcloud/{ => services/css}/data_source_tc_css_time_shift_record_detail.go (86%) rename tencentcloud/{ => services/css}/data_source_tc_css_time_shift_record_detail_test.go (71%) rename tencentcloud/{ => services/css}/data_source_tc_css_time_shift_stream_list.go (89%) rename tencentcloud/{ => services/css}/data_source_tc_css_time_shift_stream_list_test.go (69%) rename tencentcloud/{ => services/css}/data_source_tc_css_watermarks.go (85%) rename tencentcloud/{ => services/css}/data_source_tc_css_watermarks_test.go (86%) rename tencentcloud/{ => services/css}/data_source_tc_css_xp2p_detail_info_list.go (91%) rename tencentcloud/{ => services/css}/data_source_tc_css_xp2p_detail_info_list_test.go (66%) rename tencentcloud/{ => services/css}/extension_css.go (95%) rename tencentcloud/{ => services/css}/resource_tc_css_authenticate_domain_owner_operation.go (75%) rename tencentcloud/{ => services/css}/resource_tc_css_authenticate_domain_owner_operation_test.go (90%) rename tencentcloud/{ => services/css}/resource_tc_css_backup_stream.go (74%) rename tencentcloud/{ => services/css}/resource_tc_css_backup_stream_test.go (88%) rename tencentcloud/{ => services/css}/resource_tc_css_callback_rule_attachment.go (73%) rename tencentcloud/{ => services/css}/resource_tc_css_callback_rule_attachment_test.go (88%) rename tencentcloud/{ => services/css}/resource_tc_css_callback_template.go (82%) rename tencentcloud/{ => services/css}/resource_tc_css_callback_template_test.go (96%) rename tencentcloud/{ => services/css}/resource_tc_css_domain.go (77%) rename tencentcloud/{ => services/css}/resource_tc_css_domain_referer.go (76%) rename tencentcloud/{ => services/css}/resource_tc_css_domain_referer_test.go (86%) rename tencentcloud/{ => services/css}/resource_tc_css_domain_test.go (78%) rename tencentcloud/{ => services/css}/resource_tc_css_enable_optimal_switching.go (72%) rename tencentcloud/{ => services/css}/resource_tc_css_enable_optimal_switching_test.go (86%) rename tencentcloud/{ => services/css}/resource_tc_css_live_transcode_rule_attachment.go (77%) rename tencentcloud/{ => services/css}/resource_tc_css_live_transcode_rule_attachment_test.go (77%) rename tencentcloud/{ => services/css}/resource_tc_css_live_transcode_template.go (88%) rename tencentcloud/{ => services/css}/resource_tc_css_live_transcode_template_test.go (87%) rename tencentcloud/{ => services/css}/resource_tc_css_pad_rule_attachment.go (75%) rename tencentcloud/{ => services/css}/resource_tc_css_pad_rule_attachment_test.go (89%) rename tencentcloud/{ => services/css}/resource_tc_css_pad_template.go (77%) rename tencentcloud/{ => services/css}/resource_tc_css_pad_template_test.go (94%) rename tencentcloud/{ => services/css}/resource_tc_css_play_auth_key_config.go (77%) rename tencentcloud/{ => services/css}/resource_tc_css_play_auth_key_config_test.go (81%) rename tencentcloud/{ => services/css}/resource_tc_css_play_domain_cert_attachment.go (80%) rename tencentcloud/{ => services/css}/resource_tc_css_play_domain_cert_attachment_test.go (72%) rename tencentcloud/{ => services/css}/resource_tc_css_pull_stream_task.go (91%) rename tencentcloud/{ => services/css}/resource_tc_css_pull_stream_task_restart.go (65%) rename tencentcloud/{ => services/css}/resource_tc_css_pull_stream_task_restart_test.go (71%) rename tencentcloud/{ => services/css}/resource_tc_css_pull_stream_task_test.go (72%) rename tencentcloud/{ => services/css}/resource_tc_css_push_auth_key_config.go (77%) rename tencentcloud/{ => services/css}/resource_tc_css_push_auth_key_config_test.go (82%) rename tencentcloud/{ => services/css}/resource_tc_css_record_rule_attachment.go (76%) rename tencentcloud/{ => services/css}/resource_tc_css_record_rule_attachment_test.go (89%) rename tencentcloud/{ => services/css}/resource_tc_css_record_template.go (93%) create mode 100644 tencentcloud/services/css/resource_tc_css_record_template.md rename tencentcloud/{ => services/css}/resource_tc_css_record_template_test.go (91%) rename tencentcloud/{ => services/css}/resource_tc_css_snapshot_rule_attachment.go (76%) rename tencentcloud/{ => services/css}/resource_tc_css_snapshot_rule_attachment_test.go (89%) rename tencentcloud/{ => services/css}/resource_tc_css_snapshot_template.go (83%) rename tencentcloud/{ => services/css}/resource_tc_css_snapshot_template_test.go (96%) rename tencentcloud/{ => services/css}/resource_tc_css_start_stream_monitor.go (66%) rename tencentcloud/{ => services/css}/resource_tc_css_start_stream_monitor_test.go (83%) rename tencentcloud/{ => services/css}/resource_tc_css_stream_monitor.go (91%) rename tencentcloud/{ => services/css}/resource_tc_css_stream_monitor_test.go (97%) rename tencentcloud/{ => services/css}/resource_tc_css_timeshift_rule_attachment.go (76%) rename tencentcloud/{ => services/css}/resource_tc_css_timeshift_rule_attachment_test.go (90%) rename tencentcloud/{ => services/css}/resource_tc_css_timeshift_template.go (82%) rename tencentcloud/{ => services/css}/resource_tc_css_timeshift_template_test.go (94%) rename tencentcloud/{ => services/css}/resource_tc_css_watermark.go (76%) rename tencentcloud/{ => services/css}/resource_tc_css_watermark_rule_attachment.go (75%) rename tencentcloud/{ => services/css}/resource_tc_css_watermark_rule_attachment_test.go (77%) rename tencentcloud/{ => services/css}/resource_tc_css_watermark_test.go (75%) rename tencentcloud/{ => services/css}/service_tencentcloud_css.go (96%) diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index d893712598..a2505a3180 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -10,6 +10,8 @@ import ( "strconv" "strings" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/css" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cos" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/crs" @@ -760,17 +762,17 @@ func Provider() *schema.Provider { "tencentcloud_cynosdb_rollback_time_range": dataSourceTencentCloudCynosdbRollbackTimeRange(), "tencentcloud_cynosdb_proxy_node": dataSourceTencentCloudCynosdbProxyNode(), "tencentcloud_cynosdb_proxy_version": dataSourceTencentCloudCynosdbProxyVersion(), - "tencentcloud_css_domains": dataSourceTencentCloudCssDomains(), - "tencentcloud_css_backup_stream": dataSourceTencentCloudCssBackupStream(), - "tencentcloud_css_deliver_log_down_list": dataSourceTencentCloudCssDeliverLogDownList(), - "tencentcloud_css_monitor_report": dataSourceTencentCloudCssMonitorReport(), - "tencentcloud_css_pad_templates": dataSourceTencentCloudCssPadTemplates(), - "tencentcloud_css_pull_stream_task_status": dataSourceTencentCloudCssPullStreamTaskStatus(), - "tencentcloud_css_stream_monitor_list": dataSourceTencentCloudCssStreamMonitorList(), - "tencentcloud_css_time_shift_record_detail": dataSourceTencentCloudCssTimeShiftRecordDetail(), - "tencentcloud_css_time_shift_stream_list": dataSourceTencentCloudCssTimeShiftStreamList(), - "tencentcloud_css_watermarks": dataSourceTencentCloudCssWatermarks(), - "tencentcloud_css_xp2p_detail_info_list": dataSourceTencentCloudCssXp2pDetailInfoList(), + "tencentcloud_css_domains": css.DataSourceTencentCloudCssDomains(), + "tencentcloud_css_backup_stream": css.DataSourceTencentCloudCssBackupStream(), + "tencentcloud_css_deliver_log_down_list": css.DataSourceTencentCloudCssDeliverLogDownList(), + "tencentcloud_css_monitor_report": css.DataSourceTencentCloudCssMonitorReport(), + "tencentcloud_css_pad_templates": css.DataSourceTencentCloudCssPadTemplates(), + "tencentcloud_css_pull_stream_task_status": css.DataSourceTencentCloudCssPullStreamTaskStatus(), + "tencentcloud_css_stream_monitor_list": css.DataSourceTencentCloudCssStreamMonitorList(), + "tencentcloud_css_time_shift_record_detail": css.DataSourceTencentCloudCssTimeShiftRecordDetail(), + "tencentcloud_css_time_shift_stream_list": css.DataSourceTencentCloudCssTimeShiftStreamList(), + "tencentcloud_css_watermarks": css.DataSourceTencentCloudCssWatermarks(), + "tencentcloud_css_xp2p_detail_info_list": css.DataSourceTencentCloudCssXp2pDetailInfoList(), "tencentcloud_chdfs_access_groups": chdfs.DataSourceTencentCloudChdfsAccessGroups(), "tencentcloud_chdfs_mount_points": chdfs.DataSourceTencentCloudChdfsMountPoints(), "tencentcloud_chdfs_file_systems": chdfs.DataSourceTencentCloudChdfsFileSystems(), @@ -1517,32 +1519,32 @@ func Provider() *schema.Provider { "tencentcloud_mariadb_instance_config": resourceTencentCloudMariadbInstanceConfig(), "tencentcloud_tdcpg_cluster": resourceTencentCloudTdcpgCluster(), "tencentcloud_tdcpg_instance": resourceTencentCloudTdcpgInstance(), - "tencentcloud_css_watermark": resourceTencentCloudCssWatermark(), - "tencentcloud_css_watermark_rule_attachment": resourceTencentCloudCssWatermarkRuleAttachment(), - "tencentcloud_css_pull_stream_task": resourceTencentCloudCssPullStreamTask(), - "tencentcloud_css_live_transcode_template": resourceTencentCloudCssLiveTranscodeTemplate(), - "tencentcloud_css_live_transcode_rule_attachment": resourceTencentCloudCssLiveTranscodeRuleAttachment(), - "tencentcloud_css_domain": resourceTencentCloudCssDomain(), - "tencentcloud_css_authenticate_domain_owner_operation": resourceTencentCloudCssAuthenticateDomainOwnerOperation(), - "tencentcloud_css_play_domain_cert_attachment": resourceTencentCloudCssPlayDomainCertAttachment(), - "tencentcloud_css_play_auth_key_config": resourceTencentCloudCssPlayAuthKeyConfig(), - "tencentcloud_css_push_auth_key_config": resourceTencentCloudCssPushAuthKeyConfig(), - "tencentcloud_css_backup_stream": resourceTencentCloudCssBackupStream(), - "tencentcloud_css_callback_rule_attachment": resourceTencentCloudCssCallbackRuleAttachment(), - "tencentcloud_css_callback_template": resourceTencentCloudCssCallbackTemplate(), - "tencentcloud_css_domain_referer": resourceTencentCloudCssDomainReferer(), - "tencentcloud_css_enable_optimal_switching": resourceTencentCloudCssEnableOptimalSwitching(), - "tencentcloud_css_record_rule_attachment": resourceTencentCloudCssRecordRuleAttachment(), - "tencentcloud_css_record_template": resourceTencentCloudCssRecordTemplate(), - "tencentcloud_css_snapshot_rule_attachment": resourceTencentCloudCssSnapshotRuleAttachment(), - "tencentcloud_css_snapshot_template": resourceTencentCloudCssSnapshotTemplate(), - "tencentcloud_css_pad_template": resourceTencentCloudCssPadTemplate(), - "tencentcloud_css_pad_rule_attachment": resourceTencentCloudCssPadRuleAttachment(), - "tencentcloud_css_timeshift_template": resourceTencentCloudCssTimeshiftTemplate(), - "tencentcloud_css_timeshift_rule_attachment": resourceTencentCloudCssTimeshiftRuleAttachment(), - "tencentcloud_css_stream_monitor": resourceTencentCloudCssStreamMonitor(), - "tencentcloud_css_start_stream_monitor": resourceTencentCloudCssStartStreamMonitor(), - "tencentcloud_css_pull_stream_task_restart": resourceTencentCloudCssPullStreamTaskRestart(), + "tencentcloud_css_watermark": css.ResourceTencentCloudCssWatermark(), + "tencentcloud_css_watermark_rule_attachment": css.ResourceTencentCloudCssWatermarkRuleAttachment(), + "tencentcloud_css_pull_stream_task": css.ResourceTencentCloudCssPullStreamTask(), + "tencentcloud_css_live_transcode_template": css.ResourceTencentCloudCssLiveTranscodeTemplate(), + "tencentcloud_css_live_transcode_rule_attachment": css.ResourceTencentCloudCssLiveTranscodeRuleAttachment(), + "tencentcloud_css_domain": css.ResourceTencentCloudCssDomain(), + "tencentcloud_css_authenticate_domain_owner_operation": css.ResourceTencentCloudCssAuthenticateDomainOwnerOperation(), + "tencentcloud_css_play_domain_cert_attachment": css.ResourceTencentCloudCssPlayDomainCertAttachment(), + "tencentcloud_css_play_auth_key_config": css.ResourceTencentCloudCssPlayAuthKeyConfig(), + "tencentcloud_css_push_auth_key_config": css.ResourceTencentCloudCssPushAuthKeyConfig(), + "tencentcloud_css_backup_stream": css.ResourceTencentCloudCssBackupStream(), + "tencentcloud_css_callback_rule_attachment": css.ResourceTencentCloudCssCallbackRuleAttachment(), + "tencentcloud_css_callback_template": css.ResourceTencentCloudCssCallbackTemplate(), + "tencentcloud_css_domain_referer": css.ResourceTencentCloudCssDomainReferer(), + "tencentcloud_css_enable_optimal_switching": css.ResourceTencentCloudCssEnableOptimalSwitching(), + "tencentcloud_css_record_rule_attachment": css.ResourceTencentCloudCssRecordRuleAttachment(), + "tencentcloud_css_record_template": css.ResourceTencentCloudCssRecordTemplate(), + "tencentcloud_css_snapshot_rule_attachment": css.ResourceTencentCloudCssSnapshotRuleAttachment(), + "tencentcloud_css_snapshot_template": css.ResourceTencentCloudCssSnapshotTemplate(), + "tencentcloud_css_pad_template": css.ResourceTencentCloudCssPadTemplate(), + "tencentcloud_css_pad_rule_attachment": css.ResourceTencentCloudCssPadRuleAttachment(), + "tencentcloud_css_timeshift_template": css.ResourceTencentCloudCssTimeshiftTemplate(), + "tencentcloud_css_timeshift_rule_attachment": css.ResourceTencentCloudCssTimeshiftRuleAttachment(), + "tencentcloud_css_stream_monitor": css.ResourceTencentCloudCssStreamMonitor(), + "tencentcloud_css_start_stream_monitor": css.ResourceTencentCloudCssStartStreamMonitor(), + "tencentcloud_css_pull_stream_task_restart": css.ResourceTencentCloudCssPullStreamTaskRestart(), "tencentcloud_pts_project": resourceTencentCloudPtsProject(), "tencentcloud_pts_alert_channel": resourceTencentCloudPtsAlertChannel(), "tencentcloud_pts_scenario": resourceTencentCloudPtsScenario(), diff --git a/tencentcloud/data_source_tc_css_backup_stream.go b/tencentcloud/services/css/data_source_tc_css_backup_stream.go similarity index 88% rename from tencentcloud/data_source_tc_css_backup_stream.go rename to tencentcloud/services/css/data_source_tc_css_backup_stream.go index 572edf9a79..60d1ae759d 100644 --- a/tencentcloud/data_source_tc_css_backup_stream.go +++ b/tencentcloud/services/css/data_source_tc_css_backup_stream.go @@ -1,15 +1,18 @@ -package tencentcloud +package css import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCssBackupStream() *schema.Resource { +func DataSourceTencentCloudCssBackupStream() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCssBackupStreamRead, Schema: map[string]*schema.Schema{ @@ -93,25 +96,25 @@ func dataSourceTencentCloudCssBackupStream() *schema.Resource { } func dataSourceTencentCloudCssBackupStreamRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_css_backup_stream.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_css_backup_stream.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("stream_name"); ok { paramMap["StreamName"] = helper.String(v.(string)) } - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var streamInfoList []*css.BackupStreamGroupInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCssBackupStreamByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } streamInfoList = result return nil @@ -184,7 +187,7 @@ func dataSourceTencentCloudCssBackupStreamRead(d *schema.ResourceData, meta inte d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_css_backup_stream_test.go b/tencentcloud/services/css/data_source_tc_css_backup_stream_test.go similarity index 59% rename from tencentcloud/data_source_tc_css_backup_stream_test.go rename to tencentcloud/services/css/data_source_tc_css_backup_stream_test.go index 8bc0e8757d..dc649e6474 100644 --- a/tencentcloud/data_source_tc_css_backup_stream_test.go +++ b/tencentcloud/services/css/data_source_tc_css_backup_stream_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCssBackupStreamDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssBackupStreamDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_css_backup_stream.backup_stream")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_css_backup_stream.backup_stream")), }, }, }) diff --git a/tencentcloud/data_source_tc_css_deliver_log_down_list.go b/tencentcloud/services/css/data_source_tc_css_deliver_log_down_list.go similarity index 79% rename from tencentcloud/data_source_tc_css_deliver_log_down_list.go rename to tencentcloud/services/css/data_source_tc_css_deliver_log_down_list.go index 06efec059f..27261a5e2d 100644 --- a/tencentcloud/data_source_tc_css_deliver_log_down_list.go +++ b/tencentcloud/services/css/data_source_tc_css_deliver_log_down_list.go @@ -1,14 +1,4 @@ -/* -Use this data source to query detailed information of css deliver_log_down_list - -Example Usage - -```hcl -data "tencentcloud_css_deliver_log_down_list" "deliver_log_down_list" { -} -``` -*/ -package tencentcloud +package css import ( "context" @@ -16,10 +6,12 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCssDeliverLogDownList() *schema.Resource { +func DataSourceTencentCloudCssDeliverLogDownList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCssDeliverLogDownListRead, Schema: map[string]*schema.Schema{ @@ -63,21 +55,21 @@ func dataSourceTencentCloudCssDeliverLogDownList() *schema.Resource { } func dataSourceTencentCloudCssDeliverLogDownListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_css_deliver_log_down_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_css_deliver_log_down_list.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var logInfoList []*css.PushLogInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCssDeliverLogDownListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } logInfoList = result return nil @@ -119,7 +111,7 @@ func dataSourceTencentCloudCssDeliverLogDownListRead(d *schema.ResourceData, met d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/services/css/data_source_tc_css_deliver_log_down_list.md b/tencentcloud/services/css/data_source_tc_css_deliver_log_down_list.md new file mode 100644 index 0000000000..e9d60667e1 --- /dev/null +++ b/tencentcloud/services/css/data_source_tc_css_deliver_log_down_list.md @@ -0,0 +1,7 @@ +Use this data source to query detailed information of css deliver_log_down_list + +Example Usage + +```hcl +data "tencentcloud_css_deliver_log_down_list" "deliver_log_down_list" { +} diff --git a/tencentcloud/data_source_tc_css_deliver_log_down_list_test.go b/tencentcloud/services/css/data_source_tc_css_deliver_log_down_list_test.go similarity index 63% rename from tencentcloud/data_source_tc_css_deliver_log_down_list_test.go rename to tencentcloud/services/css/data_source_tc_css_deliver_log_down_list_test.go index 62fce55882..f0002c7e06 100644 --- a/tencentcloud/data_source_tc_css_deliver_log_down_list_test.go +++ b/tencentcloud/services/css/data_source_tc_css_deliver_log_down_list_test.go @@ -1,23 +1,25 @@ -package tencentcloud +package css_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudCssDeliverLogDownListDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssDeliverLogDownListDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_css_deliver_log_down_list.deliver_log_down_list"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_css_deliver_log_down_list.deliver_log_down_list"), ), }, }, diff --git a/tencentcloud/data_source_tc_css_domains.go b/tencentcloud/services/css/data_source_tc_css_domains.go similarity index 90% rename from tencentcloud/data_source_tc_css_domains.go rename to tencentcloud/services/css/data_source_tc_css_domains.go index 5541eb16c8..ee2e5ebd49 100644 --- a/tencentcloud/data_source_tc_css_domains.go +++ b/tencentcloud/services/css/data_source_tc_css_domains.go @@ -1,15 +1,18 @@ -package tencentcloud +package css import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCssDomains() *schema.Resource { +func DataSourceTencentCloudCssDomains() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCssDomainsRead, Schema: map[string]*schema.Schema{ @@ -123,12 +126,12 @@ func dataSourceTencentCloudCssDomains() *schema.Resource { } func dataSourceTencentCloudCssDomainsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_css_domains.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_css_domains.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOkExists("domain_status"); ok { @@ -151,14 +154,14 @@ func dataSourceTencentCloudCssDomainsRead(d *schema.ResourceData, meta interface paramMap["PlayType"] = helper.IntUint64(v.(int)) } - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var domainList []*css.DomainInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCssDomainsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } domainList = result return nil @@ -232,7 +235,7 @@ func dataSourceTencentCloudCssDomainsRead(d *schema.ResourceData, meta interface d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_css_domains_test.go b/tencentcloud/services/css/data_source_tc_css_domains_test.go similarity index 72% rename from tencentcloud/data_source_tc_css_domains_test.go rename to tencentcloud/services/css/data_source_tc_css_domains_test.go index 57187ddee6..bf5ec9f2ec 100644 --- a/tencentcloud/data_source_tc_css_domains_test.go +++ b/tencentcloud/services/css/data_source_tc_css_domains_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,14 +12,14 @@ func TestAccTencentCloudCssDomainsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssDomainsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_css_domains.domains"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_css_domains.domains"), resource.TestCheckResourceAttrSet("data.tencentcloud_css_domains.domains", "domain_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_css_domains.domains", "domain_list.0.name"), ), diff --git a/tencentcloud/data_source_tc_css_monitor_report.go b/tencentcloud/services/css/data_source_tc_css_monitor_report.go similarity index 87% rename from tencentcloud/data_source_tc_css_monitor_report.go rename to tencentcloud/services/css/data_source_tc_css_monitor_report.go index c9218e0370..67a5c720d0 100644 --- a/tencentcloud/data_source_tc_css_monitor_report.go +++ b/tencentcloud/services/css/data_source_tc_css_monitor_report.go @@ -1,15 +1,18 @@ -package tencentcloud +package css import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCssMonitorReport() *schema.Resource { +func DataSourceTencentCloudCssMonitorReport() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCssMonitorReportRead, Schema: map[string]*schema.Schema{ @@ -89,12 +92,12 @@ func dataSourceTencentCloudCssMonitorReport() *schema.Resource { } func dataSourceTencentCloudCssMonitorReportRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_css_monitor_report.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_css_monitor_report.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var monitorId string paramMap := make(map[string]interface{}) @@ -103,13 +106,13 @@ func dataSourceTencentCloudCssMonitorReportRead(d *schema.ResourceData, meta int paramMap["MonitorId"] = helper.String(v.(string)) } - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var mPSResult *css.DescribeMonitorReportResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCssMonitorReportByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } mPSResult = result return nil @@ -153,7 +156,7 @@ func dataSourceTencentCloudCssMonitorReportRead(d *schema.ResourceData, meta int d.SetId(helper.DataResourceIdsHash([]string{monitorId})) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_css_monitor_report_test.go b/tencentcloud/services/css/data_source_tc_css_monitor_report_test.go similarity index 66% rename from tencentcloud/data_source_tc_css_monitor_report_test.go rename to tencentcloud/services/css/data_source_tc_css_monitor_report_test.go index 469de1d3ce..e95d3e89cf 100644 --- a/tencentcloud/data_source_tc_css_monitor_report_test.go +++ b/tencentcloud/services/css/data_source_tc_css_monitor_report_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,14 +12,14 @@ func TestAccTencentCloudCssMonitorReportDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssMonitorReportDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_css_monitor_report.monitor_report"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_css_monitor_report.monitor_report"), ), }, }, diff --git a/tencentcloud/data_source_tc_css_pad_templates.go b/tencentcloud/services/css/data_source_tc_css_pad_templates.go similarity index 85% rename from tencentcloud/data_source_tc_css_pad_templates.go rename to tencentcloud/services/css/data_source_tc_css_pad_templates.go index 17ee0867c8..f081152184 100644 --- a/tencentcloud/data_source_tc_css_pad_templates.go +++ b/tencentcloud/services/css/data_source_tc_css_pad_templates.go @@ -1,16 +1,19 @@ -package tencentcloud +package css import ( "context" "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCssPadTemplates() *schema.Resource { +func DataSourceTencentCloudCssPadTemplates() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCssPadTemplatesRead, Schema: map[string]*schema.Schema{ @@ -79,21 +82,21 @@ func dataSourceTencentCloudCssPadTemplates() *schema.Resource { } func dataSourceTencentCloudCssPadTemplatesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_css_pad_templates.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_css_pad_templates.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var templates []*css.PadTemplate - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCssPadTemplatesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } templates = result return nil @@ -154,7 +157,7 @@ func dataSourceTencentCloudCssPadTemplatesRead(d *schema.ResourceData, meta inte d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_css_pad_templates_test.go b/tencentcloud/services/css/data_source_tc_css_pad_templates_test.go similarity index 86% rename from tencentcloud/data_source_tc_css_pad_templates_test.go rename to tencentcloud/services/css/data_source_tc_css_pad_templates_test.go index 67814ceb79..96bd709215 100644 --- a/tencentcloud/data_source_tc_css_pad_templates_test.go +++ b/tencentcloud/services/css/data_source_tc_css_pad_templates_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCssPadTemplatesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssPadTemplatesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_css_pad_templates.pad_templates"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_css_pad_templates.pad_templates"), resource.TestCheckResourceAttrSet("data.tencentcloud_css_pad_templates.pad_templates", "templates.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_css_pad_templates.pad_templates", "templates.0.create_time"), resource.TestCheckResourceAttrSet("data.tencentcloud_css_pad_templates.pad_templates", "templates.0.description"), diff --git a/tencentcloud/data_source_tc_css_pull_stream_task_status.go b/tencentcloud/services/css/data_source_tc_css_pull_stream_task_status.go similarity index 84% rename from tencentcloud/data_source_tc_css_pull_stream_task_status.go rename to tencentcloud/services/css/data_source_tc_css_pull_stream_task_status.go index aa4b2f734e..12a810f4f7 100644 --- a/tencentcloud/data_source_tc_css_pull_stream_task_status.go +++ b/tencentcloud/services/css/data_source_tc_css_pull_stream_task_status.go @@ -1,15 +1,18 @@ -package tencentcloud +package css import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCssPullStreamTaskStatus() *schema.Resource { +func DataSourceTencentCloudCssPullStreamTaskStatus() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCssPullStreamTaskStatusRead, Schema: map[string]*schema.Schema{ @@ -74,12 +77,12 @@ func dataSourceTencentCloudCssPullStreamTaskStatus() *schema.Resource { } func dataSourceTencentCloudCssPullStreamTaskStatusRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_css_pull_stream_task_status.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_css_pull_stream_task_status.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var taskId string paramMap := make(map[string]interface{}) @@ -88,13 +91,13 @@ func dataSourceTencentCloudCssPullStreamTaskStatusRead(d *schema.ResourceData, m paramMap["TaskId"] = helper.String(v.(string)) } - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var taskStatusInfo *css.TaskStatusInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCssPullStreamTaskStatusByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } taskStatusInfo = result return nil @@ -139,7 +142,7 @@ func dataSourceTencentCloudCssPullStreamTaskStatusRead(d *schema.ResourceData, m d.SetId(helper.DataResourceIdsHash([]string{taskId})) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), taskStatusInfoMap); e != nil { + if e := tccommon.WriteToFile(output.(string), taskStatusInfoMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_css_pull_stream_task_status_test.go b/tencentcloud/services/css/data_source_tc_css_pull_stream_task_status_test.go similarity index 81% rename from tencentcloud/data_source_tc_css_pull_stream_task_status_test.go rename to tencentcloud/services/css/data_source_tc_css_pull_stream_task_status_test.go index 840044112e..e557bb331b 100644 --- a/tencentcloud/data_source_tc_css_pull_stream_task_status_test.go +++ b/tencentcloud/services/css/data_source_tc_css_pull_stream_task_status_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCssPullStreamTaskStatusDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssPullStreamTaskStatusDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_css_pull_stream_task_status.pull_stream_task_status"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_css_pull_stream_task_status.pull_stream_task_status"), resource.TestCheckResourceAttrSet("data.tencentcloud_css_pull_stream_task_status.pull_stream_task_status", "task_status_info.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_css_pull_stream_task_status.pull_stream_task_status", "task_status_info.0.file_duration"), resource.TestCheckResourceAttrSet("data.tencentcloud_css_pull_stream_task_status.pull_stream_task_status", "task_status_info.0.looped_times"), diff --git a/tencentcloud/data_source_tc_css_stream_monitor_list.go b/tencentcloud/services/css/data_source_tc_css_stream_monitor_list.go similarity index 95% rename from tencentcloud/data_source_tc_css_stream_monitor_list.go rename to tencentcloud/services/css/data_source_tc_css_stream_monitor_list.go index 6c63c24a71..679f67a397 100644 --- a/tencentcloud/data_source_tc_css_stream_monitor_list.go +++ b/tencentcloud/services/css/data_source_tc_css_stream_monitor_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package css import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCssStreamMonitorList() *schema.Resource { +func DataSourceTencentCloudCssStreamMonitorList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCssStreamMonitorListRead, Schema: map[string]*schema.Schema{ @@ -210,22 +213,22 @@ func dataSourceTencentCloudCssStreamMonitorList() *schema.Resource { } func dataSourceTencentCloudCssStreamMonitorListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_css_stream_monitor_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_css_stream_monitor_list.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var streamMonitorList []*css.LiveStreamMonitorInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCssStreamMonitorListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } streamMonitorList = result return nil @@ -385,7 +388,7 @@ func dataSourceTencentCloudCssStreamMonitorListRead(d *schema.ResourceData, meta d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_css_stream_monitor_list_test.go b/tencentcloud/services/css/data_source_tc_css_stream_monitor_list_test.go similarity index 88% rename from tencentcloud/data_source_tc_css_stream_monitor_list_test.go rename to tencentcloud/services/css/data_source_tc_css_stream_monitor_list_test.go index cbd594d44f..f7bbc07100 100644 --- a/tencentcloud/data_source_tc_css_stream_monitor_list_test.go +++ b/tencentcloud/services/css/data_source_tc_css_stream_monitor_list_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCssStreamMonitorListDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssStreamMonitorListDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_css_stream_monitor_list.stream_monitor_list"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_css_stream_monitor_list.stream_monitor_list"), resource.TestCheckResourceAttrSet("data.tencentcloud_css_stream_monitor_list.stream_monitor_list", "live_stream_monitors.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_css_stream_monitor_list.stream_monitor_list", "live_stream_monitors.0.ai_asr_input_index_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_css_stream_monitor_list.stream_monitor_list", "live_stream_monitors.0.input_list.#"), diff --git a/tencentcloud/data_source_tc_css_time_shift_record_detail.go b/tencentcloud/services/css/data_source_tc_css_time_shift_record_detail.go similarity index 86% rename from tencentcloud/data_source_tc_css_time_shift_record_detail.go rename to tencentcloud/services/css/data_source_tc_css_time_shift_record_detail.go index 371c6ef77b..768f8cf62b 100644 --- a/tencentcloud/data_source_tc_css_time_shift_record_detail.go +++ b/tencentcloud/services/css/data_source_tc_css_time_shift_record_detail.go @@ -1,15 +1,18 @@ -package tencentcloud +package css import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCssTimeShiftRecordDetail() *schema.Resource { +func DataSourceTencentCloudCssTimeShiftRecordDetail() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCssTimeShiftRecordDetailRead, Schema: map[string]*schema.Schema{ @@ -90,12 +93,12 @@ func dataSourceTencentCloudCssTimeShiftRecordDetail() *schema.Resource { } func dataSourceTencentCloudCssTimeShiftRecordDetailRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_css_time_shift_record_detail.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_css_time_shift_record_detail.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("domain"); ok { @@ -126,13 +129,13 @@ func dataSourceTencentCloudCssTimeShiftRecordDetailRead(d *schema.ResourceData, paramMap["TransCodeId"] = helper.IntUint64(v.(int)) } - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var recordList []*css.TimeShiftRecord - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCssTimeShiftRecordDetailByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } recordList = result return nil @@ -170,7 +173,7 @@ func dataSourceTencentCloudCssTimeShiftRecordDetailRead(d *schema.ResourceData, d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_css_time_shift_record_detail_test.go b/tencentcloud/services/css/data_source_tc_css_time_shift_record_detail_test.go similarity index 71% rename from tencentcloud/data_source_tc_css_time_shift_record_detail_test.go rename to tencentcloud/services/css/data_source_tc_css_time_shift_record_detail_test.go index 85b213f0ff..a6fc0052b7 100644 --- a/tencentcloud/data_source_tc_css_time_shift_record_detail_test.go +++ b/tencentcloud/services/css/data_source_tc_css_time_shift_record_detail_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,14 +12,14 @@ func TestAccTencentCloudCssTimeShiftRecordDetailDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssTimeShiftRecordDetailDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_css_time_shift_record_detail.time_shift_record_detail"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_css_time_shift_record_detail.time_shift_record_detail"), ), }, }, diff --git a/tencentcloud/data_source_tc_css_time_shift_stream_list.go b/tencentcloud/services/css/data_source_tc_css_time_shift_stream_list.go similarity index 89% rename from tencentcloud/data_source_tc_css_time_shift_stream_list.go rename to tencentcloud/services/css/data_source_tc_css_time_shift_stream_list.go index 72842f615a..2f463677da 100644 --- a/tencentcloud/data_source_tc_css_time_shift_stream_list.go +++ b/tencentcloud/services/css/data_source_tc_css_time_shift_stream_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package css import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCssTimeShiftStreamList() *schema.Resource { +func DataSourceTencentCloudCssTimeShiftStreamList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCssTimeShiftStreamListRead, Schema: map[string]*schema.Schema{ @@ -114,12 +117,12 @@ func dataSourceTencentCloudCssTimeShiftStreamList() *schema.Resource { } func dataSourceTencentCloudCssTimeShiftStreamListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_css_time_shift_stream_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_css_time_shift_stream_list.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOkExists("start_time"); ok { @@ -142,13 +145,13 @@ func dataSourceTencentCloudCssTimeShiftStreamListRead(d *schema.ResourceData, me paramMap["DomainGroup"] = helper.String(v.(string)) } - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var timeShiftStreamList []*css.TimeShiftStreamInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCssTimeShiftStreamListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } timeShiftStreamList = result return nil @@ -209,7 +212,7 @@ func dataSourceTencentCloudCssTimeShiftStreamListRead(d *schema.ResourceData, me d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_css_time_shift_stream_list_test.go b/tencentcloud/services/css/data_source_tc_css_time_shift_stream_list_test.go similarity index 69% rename from tencentcloud/data_source_tc_css_time_shift_stream_list_test.go rename to tencentcloud/services/css/data_source_tc_css_time_shift_stream_list_test.go index 3b8fe29605..6275760519 100644 --- a/tencentcloud/data_source_tc_css_time_shift_stream_list_test.go +++ b/tencentcloud/services/css/data_source_tc_css_time_shift_stream_list_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,14 +12,14 @@ func TestAccTencentCloudCssTimeShiftStreamListDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssTimeShiftStreamListDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_css_time_shift_stream_list.time_shift_stream_list"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_css_time_shift_stream_list.time_shift_stream_list"), ), }, }, diff --git a/tencentcloud/data_source_tc_css_watermarks.go b/tencentcloud/services/css/data_source_tc_css_watermarks.go similarity index 85% rename from tencentcloud/data_source_tc_css_watermarks.go rename to tencentcloud/services/css/data_source_tc_css_watermarks.go index 6454134b90..0519a85258 100644 --- a/tencentcloud/data_source_tc_css_watermarks.go +++ b/tencentcloud/services/css/data_source_tc_css_watermarks.go @@ -1,16 +1,19 @@ -package tencentcloud +package css import ( "context" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCssWatermarks() *schema.Resource { +func DataSourceTencentCloudCssWatermarks() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCssWatermarksRead, Schema: map[string]*schema.Schema{ @@ -79,21 +82,21 @@ func dataSourceTencentCloudCssWatermarks() *schema.Resource { } func dataSourceTencentCloudCssWatermarksRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_css_watermarks.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_css_watermarks.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var watermarks []*css.WatermarkInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCssWatermarksByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } watermarks = result return nil @@ -154,7 +157,7 @@ func dataSourceTencentCloudCssWatermarksRead(d *schema.ResourceData, meta interf d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_css_watermarks_test.go b/tencentcloud/services/css/data_source_tc_css_watermarks_test.go similarity index 86% rename from tencentcloud/data_source_tc_css_watermarks_test.go rename to tencentcloud/services/css/data_source_tc_css_watermarks_test.go index f4409a923b..fc736e6fca 100644 --- a/tencentcloud/data_source_tc_css_watermarks_test.go +++ b/tencentcloud/services/css/data_source_tc_css_watermarks_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCssWatermarksDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssWatermarksDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_css_watermarks.watermarks"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_css_watermarks.watermarks"), resource.TestCheckResourceAttrSet("data.tencentcloud_css_watermarks.watermarks", "watermark_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_css_watermarks.watermarks", "watermark_list.0.create_time"), resource.TestCheckResourceAttrSet("data.tencentcloud_css_watermarks.watermarks", "watermark_list.0.height"), diff --git a/tencentcloud/data_source_tc_css_xp2p_detail_info_list.go b/tencentcloud/services/css/data_source_tc_css_xp2p_detail_info_list.go similarity index 91% rename from tencentcloud/data_source_tc_css_xp2p_detail_info_list.go rename to tencentcloud/services/css/data_source_tc_css_xp2p_detail_info_list.go index 86c5c63528..464f1d5571 100644 --- a/tencentcloud/data_source_tc_css_xp2p_detail_info_list.go +++ b/tencentcloud/services/css/data_source_tc_css_xp2p_detail_info_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package css import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCssXp2pDetailInfoList() *schema.Resource { +func DataSourceTencentCloudCssXp2pDetailInfoList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCssXp2pDetailInfoListRead, Schema: map[string]*schema.Schema{ @@ -121,12 +124,12 @@ func dataSourceTencentCloudCssXp2pDetailInfoList() *schema.Resource { } func dataSourceTencentCloudCssXp2pDetailInfoListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_css_xp2p_detail_info_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_css_xp2p_detail_info_list.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("query_time"); ok { @@ -148,14 +151,14 @@ func dataSourceTencentCloudCssXp2pDetailInfoListRead(d *schema.ResourceData, met paramMap["Dimension"] = helper.InterfacesStringsPoint(dimensionSet) } - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var dataInfoList []*css.XP2PDetailInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCssXp2pDetailInfoListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } dataInfoList = result return nil @@ -225,7 +228,7 @@ func dataSourceTencentCloudCssXp2pDetailInfoListRead(d *schema.ResourceData, met d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_css_xp2p_detail_info_list_test.go b/tencentcloud/services/css/data_source_tc_css_xp2p_detail_info_list_test.go similarity index 66% rename from tencentcloud/data_source_tc_css_xp2p_detail_info_list_test.go rename to tencentcloud/services/css/data_source_tc_css_xp2p_detail_info_list_test.go index 948ab209a8..538c57986c 100644 --- a/tencentcloud/data_source_tc_css_xp2p_detail_info_list_test.go +++ b/tencentcloud/services/css/data_source_tc_css_xp2p_detail_info_list_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,14 +12,14 @@ func TestAccTencentCloudCssXp2pDetailInfoListDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssXp2pDetailInfoListDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_css_xp2p_detail_info_list.xp2p_detail_info_list"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_css_xp2p_detail_info_list.xp2p_detail_info_list"), ), }, }, diff --git a/tencentcloud/extension_css.go b/tencentcloud/services/css/extension_css.go similarity index 95% rename from tencentcloud/extension_css.go rename to tencentcloud/services/css/extension_css.go index 633d29d358..b80b620c3b 100644 --- a/tencentcloud/extension_css.go +++ b/tencentcloud/services/css/extension_css.go @@ -1,4 +1,4 @@ -package tencentcloud +package css const ( CSS_DOMAIN_TYPE_PUSH = 0 diff --git a/tencentcloud/resource_tc_css_authenticate_domain_owner_operation.go b/tencentcloud/services/css/resource_tc_css_authenticate_domain_owner_operation.go similarity index 75% rename from tencentcloud/resource_tc_css_authenticate_domain_owner_operation.go rename to tencentcloud/services/css/resource_tc_css_authenticate_domain_owner_operation.go index 544698becc..4c7a4c5290 100644 --- a/tencentcloud/resource_tc_css_authenticate_domain_owner_operation.go +++ b/tencentcloud/services/css/resource_tc_css_authenticate_domain_owner_operation.go @@ -1,16 +1,19 @@ -package tencentcloud +package css import ( "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssAuthenticateDomainOwnerOperation() *schema.Resource { +func ResourceTencentCloudCssAuthenticateDomainOwnerOperation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssAuthenticateDomainOwnerOperationCreate, Read: resourceTencentCloudCssAuthenticateDomainOwnerOperationRead, @@ -35,10 +38,10 @@ func resourceTencentCloudCssAuthenticateDomainOwnerOperation() *schema.Resource } func resourceTencentCloudCssAuthenticateDomainOwnerOperationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_css_authenticate_domain_owner_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_css_authenticate_domain_owner_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewAuthenticateDomainOwnerRequest() @@ -54,10 +57,10 @@ func resourceTencentCloudCssAuthenticateDomainOwnerOperationCreate(d *schema.Res request.VerifyType = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().AuthenticateDomainOwner(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().AuthenticateDomainOwner(request) if e != nil { - return retryError(e) + 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()) } @@ -83,15 +86,15 @@ func resourceTencentCloudCssAuthenticateDomainOwnerOperationCreate(d *schema.Res } func resourceTencentCloudCssAuthenticateDomainOwnerOperationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_authenticate_domain_owner_operation.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_authenticate_domain_owner_operation.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCssAuthenticateDomainOwnerOperationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_authenticate_domain_owner_operation.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_authenticate_domain_owner_operation.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_css_authenticate_domain_owner_operation_test.go b/tencentcloud/services/css/resource_tc_css_authenticate_domain_owner_operation_test.go similarity index 90% rename from tencentcloud/resource_tc_css_authenticate_domain_owner_operation_test.go rename to tencentcloud/services/css/resource_tc_css_authenticate_domain_owner_operation_test.go index 20aba9151a..1fbcfbced3 100644 --- a/tencentcloud/resource_tc_css_authenticate_domain_owner_operation_test.go +++ b/tencentcloud/services/css/resource_tc_css_authenticate_domain_owner_operation_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCssAuthenticateDomainOwnerOperationResource_basic(t *tes t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssAuthenticateDomainOwnerOperation_dnscheck, diff --git a/tencentcloud/resource_tc_css_backup_stream.go b/tencentcloud/services/css/resource_tc_css_backup_stream.go similarity index 74% rename from tencentcloud/resource_tc_css_backup_stream.go rename to tencentcloud/services/css/resource_tc_css_backup_stream.go index 998e98bcff..1acca6a1d5 100644 --- a/tencentcloud/resource_tc_css_backup_stream.go +++ b/tencentcloud/services/css/resource_tc_css_backup_stream.go @@ -1,4 +1,4 @@ -package tencentcloud +package css import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssBackupStream() *schema.Resource { +func ResourceTencentCloudCssBackupStream() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssBackupStreamCreate, Read: resourceTencentCloudCssBackupStreamRead, @@ -53,8 +56,8 @@ func resourceTencentCloudCssBackupStream() *schema.Resource { } func resourceTencentCloudCssBackupStreamCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_backup_stream.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_backup_stream.create")() + defer tccommon.InconsistentCheck(d, meta)() var pushDomainName string if v, ok := d.GetOk("push_domain_name"); ok { @@ -71,22 +74,22 @@ func resourceTencentCloudCssBackupStreamCreate(d *schema.ResourceData, meta inte streamName = v.(string) } - d.SetId(strings.Join([]string{pushDomainName, appName, streamName}, FILED_SP)) + d.SetId(strings.Join([]string{pushDomainName, appName, streamName}, tccommon.FILED_SP)) return resourceTencentCloudCssBackupStreamUpdate(d, meta) } func resourceTencentCloudCssBackupStreamRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_backup_stream.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_backup_stream.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -117,14 +120,14 @@ func resourceTencentCloudCssBackupStreamRead(d *schema.ResourceData, meta interf } func resourceTencentCloudCssBackupStreamUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_backup_stream.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_backup_stream.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := css.NewSwitchBackupStreamRequest() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -140,10 +143,10 @@ func resourceTencentCloudCssBackupStreamUpdate(d *schema.ResourceData, meta inte request.UpstreamSequence = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().SwitchBackupStream(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().SwitchBackupStream(request) if e != nil { - return retryError(e) + 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()) } @@ -158,8 +161,8 @@ func resourceTencentCloudCssBackupStreamUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudCssBackupStreamDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_backup_stream.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_backup_stream.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_css_backup_stream_test.go b/tencentcloud/services/css/resource_tc_css_backup_stream_test.go similarity index 88% rename from tencentcloud/resource_tc_css_backup_stream_test.go rename to tencentcloud/services/css/resource_tc_css_backup_stream_test.go index c303df428e..20d3a6c01f 100644 --- a/tencentcloud/resource_tc_css_backup_stream_test.go +++ b/tencentcloud/services/css/resource_tc_css_backup_stream_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixCssBackupStreamResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssBackupStream, diff --git a/tencentcloud/resource_tc_css_callback_rule_attachment.go b/tencentcloud/services/css/resource_tc_css_callback_rule_attachment.go similarity index 73% rename from tencentcloud/resource_tc_css_callback_rule_attachment.go rename to tencentcloud/services/css/resource_tc_css_callback_rule_attachment.go index a1206a4d01..076dbc78e2 100644 --- a/tencentcloud/resource_tc_css_callback_rule_attachment.go +++ b/tencentcloud/services/css/resource_tc_css_callback_rule_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package css import ( "context" @@ -7,13 +7,16 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssCallbackRuleAttachment() *schema.Resource { +func ResourceTencentCloudCssCallbackRuleAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssCallbackRuleAttachmentCreate, Read: resourceTencentCloudCssCallbackRuleAttachmentRead, @@ -47,10 +50,10 @@ func resourceTencentCloudCssCallbackRuleAttachment() *schema.Resource { } func resourceTencentCloudCssCallbackRuleAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_callback_rule_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_callback_rule_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewCreateLiveCallbackRuleRequest() @@ -71,10 +74,10 @@ func resourceTencentCloudCssCallbackRuleAttachmentCreate(d *schema.ResourceData, request.TemplateId = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().CreateLiveCallbackRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().CreateLiveCallbackRule(request) if e != nil { - return retryError(e) + 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()) } @@ -85,21 +88,21 @@ func resourceTencentCloudCssCallbackRuleAttachmentCreate(d *schema.ResourceData, return err } - d.SetId(strings.Join([]string{helper.IntToStr(templateId), domainName}, FILED_SP)) + d.SetId(strings.Join([]string{helper.IntToStr(templateId), domainName}, tccommon.FILED_SP)) return resourceTencentCloudCssCallbackRuleAttachmentRead(d, meta) } func resourceTencentCloudCssCallbackRuleAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_callback_rule_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_callback_rule_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -137,14 +140,14 @@ func resourceTencentCloudCssCallbackRuleAttachmentRead(d *schema.ResourceData, m } func resourceTencentCloudCssCallbackRuleAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_callback_rule_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_callback_rule_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_css_callback_rule_attachment_test.go b/tencentcloud/services/css/resource_tc_css_callback_rule_attachment_test.go similarity index 88% rename from tencentcloud/resource_tc_css_callback_rule_attachment_test.go rename to tencentcloud/services/css/resource_tc_css_callback_rule_attachment_test.go index ae5242c2da..45befa267f 100644 --- a/tencentcloud/resource_tc_css_callback_rule_attachment_test.go +++ b/tencentcloud/services/css/resource_tc_css_callback_rule_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCssCallbackRuleAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssCallbackRule, diff --git a/tencentcloud/resource_tc_css_callback_template.go b/tencentcloud/services/css/resource_tc_css_callback_template.go similarity index 82% rename from tencentcloud/resource_tc_css_callback_template.go rename to tencentcloud/services/css/resource_tc_css_callback_template.go index b7650b7d1f..1c2120f101 100644 --- a/tencentcloud/resource_tc_css_callback_template.go +++ b/tencentcloud/services/css/resource_tc_css_callback_template.go @@ -1,17 +1,20 @@ -package tencentcloud +package css import ( "context" "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssCallbackTemplate() *schema.Resource { +func ResourceTencentCloudCssCallbackTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssCallbackTemplateCreate, Read: resourceTencentCloudCssCallbackTemplateRead, @@ -79,10 +82,10 @@ func resourceTencentCloudCssCallbackTemplate() *schema.Resource { } func resourceTencentCloudCssCallbackTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_callback_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_callback_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewCreateLiveCallbackTemplateRequest() @@ -125,10 +128,10 @@ func resourceTencentCloudCssCallbackTemplateCreate(d *schema.ResourceData, meta request.PushExceptionNotifyUrl = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().CreateLiveCallbackTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().CreateLiveCallbackTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -147,14 +150,14 @@ func resourceTencentCloudCssCallbackTemplateCreate(d *schema.ResourceData, meta } func resourceTencentCloudCssCallbackTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_callback_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_callback_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() templateIdInt64, _ := strconv.ParseInt(templateId, 10, 64) @@ -210,10 +213,10 @@ func resourceTencentCloudCssCallbackTemplateRead(d *schema.ResourceData, meta in } func resourceTencentCloudCssCallbackTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_callback_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_callback_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := css.NewModifyLiveCallbackTemplateRequest() @@ -276,10 +279,10 @@ func resourceTencentCloudCssCallbackTemplateUpdate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().ModifyLiveCallbackTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().ModifyLiveCallbackTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -294,13 +297,13 @@ func resourceTencentCloudCssCallbackTemplateUpdate(d *schema.ResourceData, meta } func resourceTencentCloudCssCallbackTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_callback_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_callback_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() templateIdInt64, _ := strconv.ParseInt(templateId, 10, 64) diff --git a/tencentcloud/resource_tc_css_callback_template_test.go b/tencentcloud/services/css/resource_tc_css_callback_template_test.go similarity index 96% rename from tencentcloud/resource_tc_css_callback_template_test.go rename to tencentcloud/services/css/resource_tc_css_callback_template_test.go index e9fb4ac875..2065823aa2 100644 --- a/tencentcloud/resource_tc_css_callback_template_test.go +++ b/tencentcloud/services/css/resource_tc_css_callback_template_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCssCallbackTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssCallbackTemplate, diff --git a/tencentcloud/resource_tc_css_domain.go b/tencentcloud/services/css/resource_tc_css_domain.go similarity index 77% rename from tencentcloud/resource_tc_css_domain.go rename to tencentcloud/services/css/resource_tc_css_domain.go index b170b73de1..4bdcf0eec1 100644 --- a/tencentcloud/resource_tc_css_domain.go +++ b/tencentcloud/services/css/resource_tc_css_domain.go @@ -1,17 +1,20 @@ -package tencentcloud +package css import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssDomain() *schema.Resource { +func ResourceTencentCloudCssDomain() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssDomainCreate, Read: resourceTencentCloudCssDomainRead, @@ -69,12 +72,12 @@ func resourceTencentCloudCssDomain() *schema.Resource { } func resourceTencentCloudCssDomainCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_domain.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_domain.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) addRequest = css.NewAddLiveDomainRequest() authRequest = css.NewAuthenticateDomainOwnerRequest() domainName string @@ -108,17 +111,17 @@ func resourceTencentCloudCssDomainCreate(d *schema.ResourceData, meta interface{ authRequest.VerifyType = verfiryType } - authRet, authErr := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().AuthenticateDomainOwner(authRequest) + authRet, authErr := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().AuthenticateDomainOwner(authRequest) if authErr != nil { return fmt.Errorf("Verify domain ownership failed, please check your domain and retry the authentication process through `tencentcloud_css_authenticate_domain_owner_operation` resource. The error reasons from SDK:[%s]", authErr.Error()) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, addRequest.GetAction(), addRequest.ToJsonString(), authRet.ToJsonString()) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().AddLiveDomain(addRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().AddLiveDomain(addRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, addRequest.GetAction(), addRequest.ToJsonString(), result.ToJsonString()) } @@ -145,14 +148,14 @@ func resourceTencentCloudCssDomainCreate(d *schema.ResourceData, meta interface{ } func resourceTencentCloudCssDomainRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_domain.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_domain.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} domainName := d.Id() @@ -205,12 +208,12 @@ func resourceTencentCloudCssDomainRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudCssDomainUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_domain.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_domain.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) modifyRequest = css.NewModifyLivePlayDomainRequest() enable *bool name = helper.String(d.Id()) @@ -240,10 +243,10 @@ func resourceTencentCloudCssDomainUpdate(d *schema.ResourceData, meta interface{ modifyRequest.PlayType = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().ModifyLivePlayDomain(modifyRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().ModifyLivePlayDomain(modifyRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyRequest.GetAction(), modifyRequest.ToJsonString(), result.ToJsonString()) } @@ -272,7 +275,7 @@ func resourceTencentCloudCssDomainUpdate(d *schema.ResourceData, meta interface{ func domainSwitch(ctx context.Context, enable *bool, name *string, meta interface{}) error { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) enableRequest = css.NewEnableLiveDomainRequest() forbidRequest = css.NewForbidLiveDomainRequest() ) @@ -280,10 +283,10 @@ func domainSwitch(ctx context.Context, enable *bool, name *string, meta interfac if enable != nil { if *enable { enableRequest.DomainName = name - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().EnableLiveDomain(enableRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().EnableLiveDomain(enableRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, enableRequest.GetAction(), enableRequest.ToJsonString(), result.ToJsonString()) } @@ -295,10 +298,10 @@ func domainSwitch(ctx context.Context, enable *bool, name *string, meta interfac } } else { forbidRequest.DomainName = name - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().ForbidLiveDomain(forbidRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().ForbidLiveDomain(forbidRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, forbidRequest.GetAction(), forbidRequest.ToJsonString(), result.ToJsonString()) } @@ -314,13 +317,13 @@ func domainSwitch(ctx context.Context, enable *bool, name *string, meta interfac } func resourceTencentCloudCssDomainDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_domain.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_domain.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var domainType *uint64 diff --git a/tencentcloud/resource_tc_css_domain_referer.go b/tencentcloud/services/css/resource_tc_css_domain_referer.go similarity index 76% rename from tencentcloud/resource_tc_css_domain_referer.go rename to tencentcloud/services/css/resource_tc_css_domain_referer.go index d2eaa95cb6..81f7db29cf 100644 --- a/tencentcloud/resource_tc_css_domain_referer.go +++ b/tencentcloud/services/css/resource_tc_css_domain_referer.go @@ -1,16 +1,19 @@ -package tencentcloud +package css import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssDomainReferer() *schema.Resource { +func ResourceTencentCloudCssDomainReferer() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssDomainRefererCreate, Read: resourceTencentCloudCssDomainRefererRead, @@ -54,8 +57,8 @@ func resourceTencentCloudCssDomainReferer() *schema.Resource { } func resourceTencentCloudCssDomainRefererCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_domain_referer.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_domain_referer.create")() + defer tccommon.InconsistentCheck(d, meta)() var domainName string if v, ok := d.GetOk("domain_name"); ok { @@ -68,14 +71,14 @@ func resourceTencentCloudCssDomainRefererCreate(d *schema.ResourceData, meta int } func resourceTencentCloudCssDomainRefererRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_domain_referer.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_domain_referer.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} domainName := d.Id() @@ -114,10 +117,10 @@ func resourceTencentCloudCssDomainRefererRead(d *schema.ResourceData, meta inter } func resourceTencentCloudCssDomainRefererUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_domain_referer.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_domain_referer.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := css.NewModifyLiveDomainRefererRequest() @@ -141,10 +144,10 @@ func resourceTencentCloudCssDomainRefererUpdate(d *schema.ResourceData, meta int request.Rules = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().ModifyLiveDomainReferer(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().ModifyLiveDomainReferer(request) if e != nil { - return retryError(e) + 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()) } @@ -159,8 +162,8 @@ func resourceTencentCloudCssDomainRefererUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudCssDomainRefererDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_domain_referer.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_domain_referer.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_css_domain_referer_test.go b/tencentcloud/services/css/resource_tc_css_domain_referer_test.go similarity index 86% rename from tencentcloud/resource_tc_css_domain_referer_test.go rename to tencentcloud/services/css/resource_tc_css_domain_referer_test.go index f165f0fc20..628e5d991f 100644 --- a/tencentcloud/resource_tc_css_domain_referer_test.go +++ b/tencentcloud/services/css/resource_tc_css_domain_referer_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,16 +13,16 @@ func TestAccTencentCloudCssDomainRefererResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssDomainReferer, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_css_domain_referer.domain_referer", "id"), resource.TestCheckResourceAttr("tencentcloud_css_domain_referer.domain_referer", "allow_empty", "1"), - resource.TestCheckResourceAttr("tencentcloud_css_domain_referer.domain_referer", "domain_name", defaultCSSPlayDomainName), + resource.TestCheckResourceAttr("tencentcloud_css_domain_referer.domain_referer", "domain_name", tcacctest.DefaultCSSPlayDomainName), resource.TestCheckResourceAttr("tencentcloud_css_domain_referer.domain_referer", "enable", "1"), resource.TestCheckResourceAttr("tencentcloud_css_domain_referer.domain_referer", "rules", "example.com"), resource.TestCheckResourceAttr("tencentcloud_css_domain_referer.domain_referer", "type", "0"), @@ -36,7 +38,7 @@ func TestAccTencentCloudCssDomainRefererResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_css_domain_referer.domain_referer", "id"), resource.TestCheckResourceAttr("tencentcloud_css_domain_referer.domain_referer", "allow_empty", "1"), - resource.TestCheckResourceAttr("tencentcloud_css_domain_referer.domain_referer", "domain_name", defaultCSSPlayDomainName), + resource.TestCheckResourceAttr("tencentcloud_css_domain_referer.domain_referer", "domain_name", tcacctest.DefaultCSSPlayDomainName), resource.TestCheckResourceAttr("tencentcloud_css_domain_referer.domain_referer", "enable", "0"), resource.TestCheckResourceAttr("tencentcloud_css_domain_referer.domain_referer", "rules", "example.com"), resource.TestCheckResourceAttr("tencentcloud_css_domain_referer.domain_referer", "type", "0"), @@ -48,7 +50,7 @@ func TestAccTencentCloudCssDomainRefererResource_basic(t *testing.T) { const testAccCssDomainRefererVar = ` variable "domain_name" { - default = "` + defaultCSSPlayDomainName + `" + default = "` + tcacctest.DefaultCSSPlayDomainName + `" } ` diff --git a/tencentcloud/resource_tc_css_domain_test.go b/tencentcloud/services/css/resource_tc_css_domain_test.go similarity index 78% rename from tencentcloud/resource_tc_css_domain_test.go rename to tencentcloud/services/css/resource_tc_css_domain_test.go index faa55d9879..a25c655856 100644 --- a/tencentcloud/resource_tc_css_domain_test.go +++ b/tencentcloud/services/css/resource_tc_css_domain_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package css_test import ( "context" @@ -6,8 +6,13 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + svccss "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/css" ) func init() { @@ -19,10 +24,10 @@ func init() { // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_css_domain func testSweepCssDomainResource(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - cssService := CssService{client: cli.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + cssService := svccss.NewCssService(cli.(tccommon.ProviderMeta).GetAPIV3Conn()) instances, err := cssService.DescribeCssDomainsByFilter(ctx, nil) if err != nil { @@ -36,10 +41,10 @@ func testSweepCssDomainResource(r string) error { delDomain := v.Name if strings.HasPrefix(*delDomain, "test_css_") { - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { err := cssService.DeleteCssDomainById(ctx, delDomain, v.Type) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -54,9 +59,9 @@ func testSweepCssDomainResource(r string) error { func TestAccTencentCloudCssDomainResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCssDomainDestroy, Steps: []resource.TestStep{ { @@ -96,10 +101,10 @@ func TestAccTencentCloudCssDomainResource_basic(t *testing.T) { } func testAccCheckCssDomainDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cssService := CssService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + cssService := svccss.NewCssService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_css_domain" { continue @@ -113,7 +118,7 @@ func testAccCheckCssDomainDestroy(s *terraform.State) error { return err } - if ret != nil || *ret.Status == CSS_DOMAIN_STATUS_ACTIVATED { + if ret != nil || *ret.Status == svccss.CSS_DOMAIN_STATUS_ACTIVATED { return fmt.Errorf("css domain instance still exist, name: %v", rs.Primary.ID) } } @@ -122,8 +127,8 @@ func testAccCheckCssDomainDestroy(s *terraform.State) error { func testAccCheckCssDomainExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[re] if !ok { @@ -133,7 +138,7 @@ func testAccCheckCssDomainExists(re string) resource.TestCheckFunc { return fmt.Errorf("css domain name is not set") } - cssService := CssService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + cssService := svccss.NewCssService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) ret, err := cssService.DescribeCssDomainById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_css_enable_optimal_switching.go b/tencentcloud/services/css/resource_tc_css_enable_optimal_switching.go similarity index 72% rename from tencentcloud/resource_tc_css_enable_optimal_switching.go rename to tencentcloud/services/css/resource_tc_css_enable_optimal_switching.go index 970f93e868..61742663de 100644 --- a/tencentcloud/resource_tc_css_enable_optimal_switching.go +++ b/tencentcloud/services/css/resource_tc_css_enable_optimal_switching.go @@ -1,16 +1,19 @@ -package tencentcloud +package css import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssEnableOptimalSwitching() *schema.Resource { +func ResourceTencentCloudCssEnableOptimalSwitching() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssEnableOptimalSwitchingCreate, Read: resourceTencentCloudCssEnableOptimalSwitchingRead, @@ -44,8 +47,8 @@ func resourceTencentCloudCssEnableOptimalSwitching() *schema.Resource { } func resourceTencentCloudCssEnableOptimalSwitchingCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_enable_optimal_switching.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_enable_optimal_switching.create")() + defer tccommon.InconsistentCheck(d, meta)() var streamName string if v, ok := d.GetOk("stream_name"); ok { @@ -58,14 +61,14 @@ func resourceTencentCloudCssEnableOptimalSwitchingCreate(d *schema.ResourceData, } func resourceTencentCloudCssEnableOptimalSwitchingRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_enable_optimal_switching.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_enable_optimal_switching.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} streamName := d.Id() @@ -94,10 +97,10 @@ func resourceTencentCloudCssEnableOptimalSwitchingRead(d *schema.ResourceData, m } func resourceTencentCloudCssEnableOptimalSwitchingUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_enable_optimal_switching.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_enable_optimal_switching.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := css.NewEnableOptimalSwitchingRequest() @@ -113,10 +116,10 @@ func resourceTencentCloudCssEnableOptimalSwitchingUpdate(d *schema.ResourceData, request.HostGroupName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().EnableOptimalSwitching(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().EnableOptimalSwitching(request) if e != nil { - return retryError(e) + 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()) } @@ -131,8 +134,8 @@ func resourceTencentCloudCssEnableOptimalSwitchingUpdate(d *schema.ResourceData, } func resourceTencentCloudCssEnableOptimalSwitchingDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_enable_optimal_switching.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_enable_optimal_switching.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_css_enable_optimal_switching_test.go b/tencentcloud/services/css/resource_tc_css_enable_optimal_switching_test.go similarity index 86% rename from tencentcloud/resource_tc_css_enable_optimal_switching_test.go rename to tencentcloud/services/css/resource_tc_css_enable_optimal_switching_test.go index f391d194d1..93706f20f9 100644 --- a/tencentcloud/resource_tc_css_enable_optimal_switching_test.go +++ b/tencentcloud/services/css/resource_tc_css_enable_optimal_switching_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixCssEnableOptimalSwitchingResource_basic(t *testin t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssEnableOptimalSwitching, diff --git a/tencentcloud/resource_tc_css_live_transcode_rule_attachment.go b/tencentcloud/services/css/resource_tc_css_live_transcode_rule_attachment.go similarity index 77% rename from tencentcloud/resource_tc_css_live_transcode_rule_attachment.go rename to tencentcloud/services/css/resource_tc_css_live_transcode_rule_attachment.go index f4696da2d9..4e0024d64c 100644 --- a/tencentcloud/resource_tc_css_live_transcode_rule_attachment.go +++ b/tencentcloud/services/css/resource_tc_css_live_transcode_rule_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package css import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssLiveTranscodeRuleAttachment() *schema.Resource { +func ResourceTencentCloudCssLiveTranscodeRuleAttachment() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudCssLiveTranscodeRuleAttachmentRead, Create: resourceTencentCloudCssLiveTranscodeRuleAttachmentCreate, @@ -65,10 +68,10 @@ func resourceTencentCloudCssLiveTranscodeRuleAttachment() *schema.Resource { } func resourceTencentCloudCssLiveTranscodeRuleAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_live_transcode_rule_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_live_transcode_rule_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewCreateLiveTranscodeRuleRequest() @@ -98,10 +101,10 @@ func resourceTencentCloudCssLiveTranscodeRuleAttachmentCreate(d *schema.Resource request.TemplateId = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().CreateLiveTranscodeRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().CreateLiveTranscodeRule(request) if e != nil { - return retryError(e) + 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()) @@ -114,20 +117,20 @@ func resourceTencentCloudCssLiveTranscodeRuleAttachmentCreate(d *schema.Resource return err } - d.SetId(domainName + FILED_SP + appName + FILED_SP + streamName + FILED_SP + helper.Int64ToStr(templateId)) + d.SetId(domainName + tccommon.FILED_SP + appName + tccommon.FILED_SP + streamName + tccommon.FILED_SP + helper.Int64ToStr(templateId)) return resourceTencentCloudCssLiveTranscodeRuleAttachmentRead(d, meta) } func resourceTencentCloudCssLiveTranscodeRuleAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_live_transcode_rule_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_live_transcode_rule_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -182,15 +185,15 @@ func resourceTencentCloudCssLiveTranscodeRuleAttachmentRead(d *schema.ResourceDa } func resourceTencentCloudCssLiveTranscodeRuleAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_live_transcode_rule_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_live_transcode_rule_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_css_live_transcode_rule_attachment_test.go b/tencentcloud/services/css/resource_tc_css_live_transcode_rule_attachment_test.go similarity index 77% rename from tencentcloud/resource_tc_css_live_transcode_rule_attachment_test.go rename to tencentcloud/services/css/resource_tc_css_live_transcode_rule_attachment_test.go index b3b59edc50..5c4c9ca2dc 100644 --- a/tencentcloud/resource_tc_css_live_transcode_rule_attachment_test.go +++ b/tencentcloud/services/css/resource_tc_css_live_transcode_rule_attachment_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package css_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccss "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/css" + "context" "fmt" "strings" @@ -9,6 +13,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -21,10 +26,10 @@ func init() { // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_css_live_transcode_rule_attachment func testSweepCssLiveTranscodeRuleAttachment(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - cssService := CssService{client: cli.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + cssService := svccss.NewCssService(cli.(tccommon.ProviderMeta).GetAPIV3Conn()) temps, err := cssService.DescribeCssLiveTranscodeTemplates(ctx) if err != nil { @@ -38,11 +43,11 @@ func testSweepCssLiveTranscodeRuleAttachment(r string) error { delName := v.TemplateName delId := v.TemplateId - if strings.HasPrefix(*delName, defaultCSSPrefix) { - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + if strings.HasPrefix(*delName, tcacctest.DefaultCSSPrefix) { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { err := cssService.DeleteCssLiveTranscodeTemplateById(ctx, delId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -64,12 +69,12 @@ func TestAccTencentCloudCssLiveTranscodeRuleAttachmentResource_basic(t *testing. liveUrl := "rtmp://5000.liveplay.myqcloud.com/live/stream1" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCssLiveTranscodeRuleAttachmentDestroy, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccCssLiveTranscodeRuleAttachment, defaultCSSLiveType, liveUrl, defaultCSSDomainName, defaultCSSAppName, defaultCSSStreamName, startTime, endTime, defaultCSSOperator), + Config: fmt.Sprintf(testAccCssLiveTranscodeRuleAttachment, tcacctest.DefaultCSSLiveType, liveUrl, tcacctest.DefaultCSSDomainName, tcacctest.DefaultCSSAppName, tcacctest.DefaultCSSStreamName, startTime, endTime, tcacctest.DefaultCSSOperator), Check: resource.ComposeTestCheckFunc( testAccCheckCssLiveTranscodeRuleAttachmentExists("tencentcloud_css_live_transcode_rule_attachment.live_transcode_rule_attachment"), resource.TestCheckResourceAttrSet("tencentcloud_css_live_transcode_rule_attachment.live_transcode_rule_attachment", "id"), @@ -91,16 +96,16 @@ func TestAccTencentCloudCssLiveTranscodeRuleAttachmentResource_basic(t *testing. } func testAccCheckCssLiveTranscodeRuleAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cssService := CssService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + cssService := svccss.NewCssService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_css_live_transcode_rule_attachment" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) domainName := idSplit[0] templateId := idSplit[3] @@ -118,8 +123,8 @@ func testAccCheckCssLiveTranscodeRuleAttachmentDestroy(s *terraform.State) error func testAccCheckCssLiveTranscodeRuleAttachmentExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[re] if !ok { @@ -129,8 +134,8 @@ func testAccCheckCssLiveTranscodeRuleAttachmentExists(re string) resource.TestCh return fmt.Errorf("css live transcode template attachment id is not set") } - cssService := CssService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + cssService := svccss.NewCssService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) domainName := idSplit[0] templateId := idSplit[3] diff --git a/tencentcloud/resource_tc_css_live_transcode_template.go b/tencentcloud/services/css/resource_tc_css_live_transcode_template.go similarity index 88% rename from tencentcloud/resource_tc_css_live_transcode_template.go rename to tencentcloud/services/css/resource_tc_css_live_transcode_template.go index 01dbdc3868..1914621dff 100644 --- a/tencentcloud/resource_tc_css_live_transcode_template.go +++ b/tencentcloud/services/css/resource_tc_css_live_transcode_template.go @@ -1,17 +1,20 @@ -package tencentcloud +package css import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssLiveTranscodeTemplate() *schema.Resource { +func ResourceTencentCloudCssLiveTranscodeTemplate() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudCssLiveTranscodeTemplateRead, Create: resourceTencentCloudCssLiveTranscodeTemplateCreate, @@ -157,10 +160,10 @@ func resourceTencentCloudCssLiveTranscodeTemplate() *schema.Resource { } func resourceTencentCloudCssLiveTranscodeTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_live_transcode_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_live_transcode_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewCreateLiveTranscodeTemplateRequest() @@ -256,10 +259,10 @@ func resourceTencentCloudCssLiveTranscodeTemplateCreate(d *schema.ResourceData, request.DRMTracks = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().CreateLiveTranscodeTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().CreateLiveTranscodeTemplate(request) if e != nil { - return retryError(e) + 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()) @@ -280,13 +283,13 @@ func resourceTencentCloudCssLiveTranscodeTemplateCreate(d *schema.ResourceData, } func resourceTencentCloudCssLiveTranscodeTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_live_transcode_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_live_transcode_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() @@ -393,11 +396,11 @@ func resourceTencentCloudCssLiveTranscodeTemplateRead(d *schema.ResourceData, me } func resourceTencentCloudCssLiveTranscodeTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_live_transcode_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_live_transcode_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - // ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + // ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := css.NewModifyLiveTranscodeTemplateRequest() @@ -535,10 +538,10 @@ func resourceTencentCloudCssLiveTranscodeTemplateUpdate(d *schema.ResourceData, } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().ModifyLiveTranscodeTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().ModifyLiveTranscodeTemplate(request) if e != nil { - return retryError(e) + 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()) @@ -555,13 +558,13 @@ func resourceTencentCloudCssLiveTranscodeTemplateUpdate(d *schema.ResourceData, } func resourceTencentCloudCssLiveTranscodeTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_live_transcode_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_live_transcode_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() diff --git a/tencentcloud/resource_tc_css_live_transcode_template_test.go b/tencentcloud/services/css/resource_tc_css_live_transcode_template_test.go similarity index 87% rename from tencentcloud/resource_tc_css_live_transcode_template_test.go rename to tencentcloud/services/css/resource_tc_css_live_transcode_template_test.go index 79c83ac70f..a859685459 100644 --- a/tencentcloud/resource_tc_css_live_transcode_template_test.go +++ b/tencentcloud/services/css/resource_tc_css_live_transcode_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package css_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccss "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/css" + "context" "fmt" "strings" @@ -8,6 +12,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -20,10 +25,10 @@ func init() { // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_css_live_transcode_template func testSweepCSSLiveTranscodeTemplate(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - cssService := CssService{client: cli.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + cssService := svccss.NewCssService(cli.(tccommon.ProviderMeta).GetAPIV3Conn()) temps, err := cssService.DescribeCssLiveTranscodeTemplates(ctx) if err != nil { @@ -37,11 +42,11 @@ func testSweepCSSLiveTranscodeTemplate(r string) error { delName := v.TemplateName delId := v.TemplateId - if strings.HasPrefix(*delName, defaultCSSPrefix) { - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + if strings.HasPrefix(*delName, tcacctest.DefaultCSSPrefix) { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { err := cssService.DeleteCssLiveTranscodeTemplateById(ctx, delId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -57,8 +62,8 @@ func TestAccTencentCloudCssLiveTranscodeTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCssLiveTranscodeTemplateDestroy, Steps: []resource.TestStep{ { @@ -118,10 +123,10 @@ func TestAccTencentCloudCssLiveTranscodeTemplateResource_basic(t *testing.T) { } func testAccCheckCssLiveTranscodeTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cssService := CssService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + cssService := svccss.NewCssService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_css_live_transcode_template" { continue @@ -141,8 +146,8 @@ func testAccCheckCssLiveTranscodeTemplateDestroy(s *terraform.State) error { func testAccCheckCssLiveTranscodeTemplateExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[re] if !ok { @@ -152,7 +157,7 @@ func testAccCheckCssLiveTranscodeTemplateExists(re string) resource.TestCheckFun return fmt.Errorf("css live transcode template id is not set") } - cssService := CssService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + cssService := svccss.NewCssService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) watermark, err := cssService.DescribeCssLiveTranscodeTemplate(ctx, helper.StrToInt64Point(rs.Primary.ID)) if err != nil { return err diff --git a/tencentcloud/resource_tc_css_pad_rule_attachment.go b/tencentcloud/services/css/resource_tc_css_pad_rule_attachment.go similarity index 75% rename from tencentcloud/resource_tc_css_pad_rule_attachment.go rename to tencentcloud/services/css/resource_tc_css_pad_rule_attachment.go index e5a1443b59..df7401726c 100644 --- a/tencentcloud/resource_tc_css_pad_rule_attachment.go +++ b/tencentcloud/services/css/resource_tc_css_pad_rule_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package css import ( "context" @@ -7,13 +7,16 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssPadRuleAttachment() *schema.Resource { +func ResourceTencentCloudCssPadRuleAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssPadRuleAttachmentCreate, Read: resourceTencentCloudCssPadRuleAttachmentRead, @@ -54,10 +57,10 @@ func resourceTencentCloudCssPadRuleAttachment() *schema.Resource { } func resourceTencentCloudCssPadRuleAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_pad_rule_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_pad_rule_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewCreateLivePadRuleRequest() @@ -82,10 +85,10 @@ func resourceTencentCloudCssPadRuleAttachmentCreate(d *schema.ResourceData, meta request.StreamName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().CreateLivePadRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().CreateLivePadRule(request) if e != nil { - return retryError(e) + 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()) } @@ -96,22 +99,22 @@ func resourceTencentCloudCssPadRuleAttachmentCreate(d *schema.ResourceData, meta return err } - d.SetId(strings.Join([]string{helper.IntToStr(templateId), domainName}, FILED_SP)) + d.SetId(strings.Join([]string{helper.IntToStr(templateId), domainName}, tccommon.FILED_SP)) return resourceTencentCloudCssPadRuleAttachmentRead(d, meta) } func resourceTencentCloudCssPadRuleAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_pad_rule_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_pad_rule_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -153,14 +156,14 @@ func resourceTencentCloudCssPadRuleAttachmentRead(d *schema.ResourceData, meta i } func resourceTencentCloudCssPadRuleAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_pad_rule_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_pad_rule_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_css_pad_rule_attachment_test.go b/tencentcloud/services/css/resource_tc_css_pad_rule_attachment_test.go similarity index 89% rename from tencentcloud/resource_tc_css_pad_rule_attachment_test.go rename to tencentcloud/services/css/resource_tc_css_pad_rule_attachment_test.go index 5ac3d3e945..0764053720 100644 --- a/tencentcloud/resource_tc_css_pad_rule_attachment_test.go +++ b/tencentcloud/services/css/resource_tc_css_pad_rule_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCssPadRuleAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssPadRuleAttachment, diff --git a/tencentcloud/resource_tc_css_pad_template.go b/tencentcloud/services/css/resource_tc_css_pad_template.go similarity index 77% rename from tencentcloud/resource_tc_css_pad_template.go rename to tencentcloud/services/css/resource_tc_css_pad_template.go index 94fe093fe5..a15ef58db2 100644 --- a/tencentcloud/resource_tc_css_pad_template.go +++ b/tencentcloud/services/css/resource_tc_css_pad_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package css import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssPadTemplate() *schema.Resource { +func ResourceTencentCloudCssPadTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssPadTemplateCreate, Read: resourceTencentCloudCssPadTemplateRead, @@ -62,10 +65,10 @@ func resourceTencentCloudCssPadTemplate() *schema.Resource { } func resourceTencentCloudCssPadTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_pad_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_pad_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewCreateLivePadTemplateRequest() @@ -96,10 +99,10 @@ func resourceTencentCloudCssPadTemplateCreate(d *schema.ResourceData, meta inter request.Type = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().CreateLivePadTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().CreateLivePadTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -118,14 +121,14 @@ func resourceTencentCloudCssPadTemplateCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudCssPadTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_pad_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_pad_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() templateIdInt64, err := strconv.ParseInt(templateId, 10, 64) @@ -172,10 +175,10 @@ func resourceTencentCloudCssPadTemplateRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudCssPadTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_pad_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_pad_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := css.NewModifyLivePadTemplateRequest() @@ -209,10 +212,10 @@ func resourceTencentCloudCssPadTemplateUpdate(d *schema.ResourceData, meta inter request.Type = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().ModifyLivePadTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().ModifyLivePadTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -227,13 +230,13 @@ func resourceTencentCloudCssPadTemplateUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudCssPadTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_pad_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_pad_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() templateIdInt64, _ := strconv.ParseInt(templateId, 10, 64) diff --git a/tencentcloud/resource_tc_css_pad_template_test.go b/tencentcloud/services/css/resource_tc_css_pad_template_test.go similarity index 94% rename from tencentcloud/resource_tc_css_pad_template_test.go rename to tencentcloud/services/css/resource_tc_css_pad_template_test.go index e905005c92..72c1b8af3c 100644 --- a/tencentcloud/resource_tc_css_pad_template_test.go +++ b/tencentcloud/services/css/resource_tc_css_pad_template_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCssPadTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssPadTemplate, diff --git a/tencentcloud/resource_tc_css_play_auth_key_config.go b/tencentcloud/services/css/resource_tc_css_play_auth_key_config.go similarity index 77% rename from tencentcloud/resource_tc_css_play_auth_key_config.go rename to tencentcloud/services/css/resource_tc_css_play_auth_key_config.go index d8d6dd50c1..a1f3c7b0e1 100644 --- a/tencentcloud/resource_tc_css_play_auth_key_config.go +++ b/tencentcloud/services/css/resource_tc_css_play_auth_key_config.go @@ -1,16 +1,19 @@ -package tencentcloud +package css import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssPlayAuthKeyConfig() *schema.Resource { +func ResourceTencentCloudCssPlayAuthKeyConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssPlayAuthKeyConfigCreate, Read: resourceTencentCloudCssPlayAuthKeyConfigRead, @@ -54,8 +57,8 @@ func resourceTencentCloudCssPlayAuthKeyConfig() *schema.Resource { } func resourceTencentCloudCssPlayAuthKeyConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_play_auth_key_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_play_auth_key_config.create")() + defer tccommon.InconsistentCheck(d, meta)() var domainName string if v, ok := d.GetOk("domain_name"); ok { @@ -68,14 +71,14 @@ func resourceTencentCloudCssPlayAuthKeyConfigCreate(d *schema.ResourceData, meta } func resourceTencentCloudCssPlayAuthKeyConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_play_auth_key_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_play_auth_key_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} domainName := d.Id() @@ -114,10 +117,10 @@ func resourceTencentCloudCssPlayAuthKeyConfigRead(d *schema.ResourceData, meta i } func resourceTencentCloudCssPlayAuthKeyConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_play_auth_key_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_play_auth_key_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := css.NewModifyLivePlayAuthKeyRequest() @@ -145,10 +148,10 @@ func resourceTencentCloudCssPlayAuthKeyConfigUpdate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().ModifyLivePlayAuthKey(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().ModifyLivePlayAuthKey(request) if e != nil { - return retryError(e) + 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()) } @@ -163,8 +166,8 @@ func resourceTencentCloudCssPlayAuthKeyConfigUpdate(d *schema.ResourceData, meta } func resourceTencentCloudCssPlayAuthKeyConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_play_auth_key_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_play_auth_key_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() //donothing return nil } diff --git a/tencentcloud/resource_tc_css_play_auth_key_config_test.go b/tencentcloud/services/css/resource_tc_css_play_auth_key_config_test.go similarity index 81% rename from tencentcloud/resource_tc_css_play_auth_key_config_test.go rename to tencentcloud/services/css/resource_tc_css_play_auth_key_config_test.go index 2dfb5425bc..8f3a31fbab 100644 --- a/tencentcloud/resource_tc_css_play_auth_key_config_test.go +++ b/tencentcloud/services/css/resource_tc_css_play_auth_key_config_test.go @@ -1,9 +1,11 @@ -package tencentcloud +package css_test import ( "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,15 +13,15 @@ func TestAccTencentCloudCssPlayAuthKeyConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccCssPlayAuthKeyConfig, defaultCSSPlayDomainName), + Config: fmt.Sprintf(testAccCssPlayAuthKeyConfig, tcacctest.DefaultCSSPlayDomainName), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_css_play_auth_key_config.play_auth_key_config", "id"), - resource.TestCheckResourceAttr("tencentcloud_css_play_auth_key_config.play_auth_key_config", "domain_name", defaultCSSPlayDomainName), + resource.TestCheckResourceAttr("tencentcloud_css_play_auth_key_config.play_auth_key_config", "domain_name", tcacctest.DefaultCSSPlayDomainName), resource.TestCheckResourceAttr("tencentcloud_css_play_auth_key_config.play_auth_key_config", "enable", "0"), resource.TestCheckResourceAttr("tencentcloud_css_play_auth_key_config.play_auth_key_config", "auth_key", "test000key"), resource.TestCheckResourceAttr("tencentcloud_css_play_auth_key_config.play_auth_key_config", "auth_back_key", "test000backkey"), @@ -27,10 +29,10 @@ func TestAccTencentCloudCssPlayAuthKeyConfigResource_basic(t *testing.T) { ), }, { - Config: fmt.Sprintf(testAccCssPlayAuthKeyConfig_update, defaultCSSPlayDomainName), + Config: fmt.Sprintf(testAccCssPlayAuthKeyConfig_update, tcacctest.DefaultCSSPlayDomainName), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_css_play_auth_key_config.play_auth_key_config", "id"), - resource.TestCheckResourceAttr("tencentcloud_css_play_auth_key_config.play_auth_key_config", "domain_name", defaultCSSPlayDomainName), + resource.TestCheckResourceAttr("tencentcloud_css_play_auth_key_config.play_auth_key_config", "domain_name", tcacctest.DefaultCSSPlayDomainName), resource.TestCheckResourceAttr("tencentcloud_css_play_auth_key_config.play_auth_key_config", "enable", "1"), resource.TestCheckResourceAttr("tencentcloud_css_play_auth_key_config.play_auth_key_config", "auth_key", "test000key000updated"), resource.TestCheckResourceAttr("tencentcloud_css_play_auth_key_config.play_auth_key_config", "auth_back_key", "test000backkey000updated"), diff --git a/tencentcloud/resource_tc_css_play_domain_cert_attachment.go b/tencentcloud/services/css/resource_tc_css_play_domain_cert_attachment.go similarity index 80% rename from tencentcloud/resource_tc_css_play_domain_cert_attachment.go rename to tencentcloud/services/css/resource_tc_css_play_domain_cert_attachment.go index 16b5ad53a3..bc043d0e4e 100644 --- a/tencentcloud/resource_tc_css_play_domain_cert_attachment.go +++ b/tencentcloud/services/css/resource_tc_css_play_domain_cert_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package css import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssPlayDomainCertAttachment() *schema.Resource { +func ResourceTencentCloudCssPlayDomainCertAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssPlayDomainCertAttachmentCreate, Read: resourceTencentCloudCssPlayDomainCertAttachmentRead, @@ -78,10 +81,10 @@ func resourceTencentCloudCssPlayDomainCertAttachment() *schema.Resource { } func resourceTencentCloudCssPlayDomainCertAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_play_domain_cert_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_play_domain_cert_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewModifyLiveDomainCertBindingsRequest() @@ -107,10 +110,10 @@ func resourceTencentCloudCssPlayDomainCertAttachmentCreate(d *schema.ResourceDat request.DomainInfos = append(request.DomainInfos, &info) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().ModifyLiveDomainCertBindings(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().ModifyLiveDomainCertBindings(request) if e != nil { - return retryError(e) + 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()) } @@ -126,22 +129,22 @@ func resourceTencentCloudCssPlayDomainCertAttachmentCreate(d *schema.ResourceDat return fmt.Errorf("[CRITAL]%s create css playDomainCertAttachment failed, reason: response.Response.Errors[%+v]", logId, response.Response.Errors) } - d.SetId(strings.Join([]string{domainName, cloudCertId}, FILED_SP)) + d.SetId(strings.Join([]string{domainName, cloudCertId}, tccommon.FILED_SP)) return resourceTencentCloudCssPlayDomainCertAttachmentRead(d, meta) } func resourceTencentCloudCssPlayDomainCertAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_play_domain_cert_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_play_domain_cert_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -197,14 +200,14 @@ func resourceTencentCloudCssPlayDomainCertAttachmentRead(d *schema.ResourceData, } func resourceTencentCloudCssPlayDomainCertAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_play_domain_cert_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_play_domain_cert_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_css_play_domain_cert_attachment_test.go b/tencentcloud/services/css/resource_tc_css_play_domain_cert_attachment_test.go similarity index 72% rename from tencentcloud/resource_tc_css_play_domain_cert_attachment_test.go rename to tencentcloud/services/css/resource_tc_css_play_domain_cert_attachment_test.go index 8ca6ea4f0b..1e4f015d1d 100644 --- a/tencentcloud/resource_tc_css_play_domain_cert_attachment_test.go +++ b/tencentcloud/services/css/resource_tc_css_play_domain_cert_attachment_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package css_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccss "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/css" + "context" "fmt" "strings" @@ -14,21 +18,21 @@ func TestAccTencentCloudCssPlayDomainCertAttachmentResource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckCssPlayDomainCertAttachmentDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccCssPlayDomainCertAttachment, defaultCSSBindingCertName, defaultCSSPlayDomainName), + Config: fmt.Sprintf(testAccCssPlayDomainCertAttachment, tcacctest.DefaultCSSBindingCertName, tcacctest.DefaultCSSPlayDomainName), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_certificates.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_ssl_certificates.foo"), resource.TestCheckResourceAttr("data.tencentcloud_ssl_certificates.foo", "certificates.#", "1"), testAccCheckCssPlayDomainCertAttachmentExists("tencentcloud_css_play_domain_cert_attachment.play_domain_cert_attachment"), resource.TestCheckResourceAttrSet("tencentcloud_css_play_domain_cert_attachment.play_domain_cert_attachment", "id"), resource.TestCheckResourceAttrSet("tencentcloud_css_play_domain_cert_attachment.play_domain_cert_attachment", "cloud_cert_id"), resource.TestCheckResourceAttr("tencentcloud_css_play_domain_cert_attachment.play_domain_cert_attachment", "domain_info.#", "1"), - resource.TestCheckResourceAttr("tencentcloud_css_play_domain_cert_attachment.play_domain_cert_attachment", "domain_info.0.domain_name", defaultCSSPlayDomainName), + resource.TestCheckResourceAttr("tencentcloud_css_play_domain_cert_attachment.play_domain_cert_attachment", "domain_info.0.domain_name", tcacctest.DefaultCSSPlayDomainName), ), }, { @@ -41,16 +45,16 @@ func TestAccTencentCloudCssPlayDomainCertAttachmentResource_basic(t *testing.T) } func testAccCheckCssPlayDomainCertAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cssService := CssService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + cssService := svccss.NewCssService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_css_play_domain_cert_attachment" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -72,9 +76,9 @@ func testAccCheckCssPlayDomainCertAttachmentDestroy(s *terraform.State) error { func testAccCheckCssPlayDomainCertAttachmentExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cssService := CssService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cssService := svccss.NewCssService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[re] if !ok { @@ -84,7 +88,7 @@ func testAccCheckCssPlayDomainCertAttachmentExists(re string) resource.TestCheck return fmt.Errorf("css cert attachment instance id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } diff --git a/tencentcloud/resource_tc_css_pull_stream_task.go b/tencentcloud/services/css/resource_tc_css_pull_stream_task.go similarity index 91% rename from tencentcloud/resource_tc_css_pull_stream_task.go rename to tencentcloud/services/css/resource_tc_css_pull_stream_task.go index f1762b88f3..fb13d0bcf4 100644 --- a/tencentcloud/resource_tc_css_pull_stream_task.go +++ b/tencentcloud/services/css/resource_tc_css_pull_stream_task.go @@ -1,17 +1,20 @@ -package tencentcloud +package css import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssPullStreamTask() *schema.Resource { +func ResourceTencentCloudCssPullStreamTask() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudCssPullStreamTaskRead, Create: resourceTencentCloudCssPullStreamTaskCreate, @@ -231,10 +234,10 @@ func resourceTencentCloudCssPullStreamTask() *schema.Resource { } func resourceTencentCloudCssPullStreamTaskCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_pull_stream_task.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_pull_stream_task.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewCreateLivePullStreamTaskRequest() @@ -349,10 +352,10 @@ func resourceTencentCloudCssPullStreamTaskCreate(d *schema.ResourceData, meta in } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().CreateLivePullStreamTask(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().CreateLivePullStreamTask(request) if e != nil { - return retryError(e) + 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()) @@ -373,13 +376,13 @@ func resourceTencentCloudCssPullStreamTaskCreate(d *schema.ResourceData, meta in } func resourceTencentCloudCssPullStreamTaskRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_pull_stream_task.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_pull_stream_task.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} taskId := d.Id() @@ -531,11 +534,11 @@ func resourceTencentCloudCssPullStreamTaskRead(d *schema.ResourceData, meta inte } func resourceTencentCloudCssPullStreamTaskUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_pull_stream_task.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_pull_stream_task.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - // ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + // ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := css.NewModifyLivePullStreamTaskRequest() @@ -691,10 +694,10 @@ func resourceTencentCloudCssPullStreamTaskUpdate(d *schema.ResourceData, meta in } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().ModifyLivePullStreamTask(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().ModifyLivePullStreamTask(request) if e != nil { - return retryError(e) + 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()) @@ -711,14 +714,14 @@ func resourceTencentCloudCssPullStreamTaskUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudCssPullStreamTaskDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_pull_stream_task.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_pull_stream_task.delete")() + defer tccommon.InconsistentCheck(d, meta)() var operator *string - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} taskId := d.Id() if v, ok := d.GetOk("operator"); ok { diff --git a/tencentcloud/resource_tc_css_pull_stream_task_restart.go b/tencentcloud/services/css/resource_tc_css_pull_stream_task_restart.go similarity index 65% rename from tencentcloud/resource_tc_css_pull_stream_task_restart.go rename to tencentcloud/services/css/resource_tc_css_pull_stream_task_restart.go index a76884ddbe..6a2455b5ba 100644 --- a/tencentcloud/resource_tc_css_pull_stream_task_restart.go +++ b/tencentcloud/services/css/resource_tc_css_pull_stream_task_restart.go @@ -1,16 +1,19 @@ -package tencentcloud +package css import ( "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssPullStreamTaskRestart() *schema.Resource { +func ResourceTencentCloudCssPullStreamTaskRestart() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssPullStreamTaskRestartCreate, Read: resourceTencentCloudCssPullStreamTaskRestartRead, @@ -37,10 +40,10 @@ func resourceTencentCloudCssPullStreamTaskRestart() *schema.Resource { } func resourceTencentCloudCssPullStreamTaskRestartCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_pull_stream_task_restart.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_pull_stream_task_restart.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewRestartLivePullStreamTaskRequest() @@ -55,10 +58,10 @@ func resourceTencentCloudCssPullStreamTaskRestartCreate(d *schema.ResourceData, request.Operator = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().RestartLivePullStreamTask(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().RestartLivePullStreamTask(request) if e != nil { - return retryError(e) + 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()) } @@ -71,9 +74,9 @@ func resourceTencentCloudCssPullStreamTaskRestartCreate(d *schema.ResourceData, d.SetId(taskId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - conf := BuildStateChangeConf([]string{}, []string{"active"}, 6*readRetryTimeout, time.Second, service.CssRestartPushTaskStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"active"}, 6*tccommon.ReadRetryTimeout, time.Second, service.CssRestartPushTaskStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -83,15 +86,15 @@ func resourceTencentCloudCssPullStreamTaskRestartCreate(d *schema.ResourceData, } func resourceTencentCloudCssPullStreamTaskRestartRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_pull_stream_task_restart.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_pull_stream_task_restart.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCssPullStreamTaskRestartDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_pull_stream_task_restart.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_pull_stream_task_restart.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_css_pull_stream_task_restart_test.go b/tencentcloud/services/css/resource_tc_css_pull_stream_task_restart_test.go similarity index 71% rename from tencentcloud/resource_tc_css_pull_stream_task_restart_test.go rename to tencentcloud/services/css/resource_tc_css_pull_stream_task_restart_test.go index 61112be34a..25a031d8d8 100644 --- a/tencentcloud/resource_tc_css_pull_stream_task_restart_test.go +++ b/tencentcloud/services/css/resource_tc_css_pull_stream_task_restart_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package css_test import ( "fmt" "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -17,12 +19,12 @@ func TestAccTencentCloudNeedFixCssPullStreamTaskRestartResource_basic(t *testing liveUrl := "rtmp://5000.liveplay.myqcloud.com/live/stream1" resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccCssRestartPushTask, defaultCSSLiveType, liveUrl, defaultCSSDomainName, defaultCSSAppName, defaultCSSStreamName, startTime, endTime, defaultCSSOperator), + Config: fmt.Sprintf(testAccCssRestartPushTask, tcacctest.DefaultCSSLiveType, liveUrl, tcacctest.DefaultCSSDomainName, tcacctest.DefaultCSSAppName, tcacctest.DefaultCSSStreamName, startTime, endTime, tcacctest.DefaultCSSOperator), Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_css_pull_stream_task_restart.restart_push_task", "id"), ), diff --git a/tencentcloud/resource_tc_css_pull_stream_task_test.go b/tencentcloud/services/css/resource_tc_css_pull_stream_task_test.go similarity index 72% rename from tencentcloud/resource_tc_css_pull_stream_task_test.go rename to tencentcloud/services/css/resource_tc_css_pull_stream_task_test.go index 96db48e651..dfbf6daa79 100644 --- a/tencentcloud/resource_tc_css_pull_stream_task_test.go +++ b/tencentcloud/services/css/resource_tc_css_pull_stream_task_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package css_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccss "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/css" + "context" "fmt" "strings" @@ -9,6 +13,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -21,10 +26,10 @@ func init() { // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_css_pull_stream_task func testSweepCSSPullStreamTask(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - cssService := CssService{client: cli.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + cssService := svccss.NewCssService(cli.(tccommon.ProviderMeta).GetAPIV3Conn()) info, err := cssService.DescribeCssPullStreamTask(ctx, "") if err != nil { @@ -38,11 +43,11 @@ func testSweepCSSPullStreamTask(r string) error { delName := v.StreamName delId := v.TaskId - if strings.HasPrefix(*delName, defaultCSSPrefix) { - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - err := cssService.DeleteCssPullStreamTaskById(ctx, delId, helper.String(defaultCSSOperator)) + if strings.HasPrefix(*delName, tcacctest.DefaultCSSPrefix) { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + err := cssService.DeleteCssPullStreamTaskById(ctx, delId, helper.String(tcacctest.DefaultCSSOperator)) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -62,24 +67,24 @@ func TestAccTencentCloudCssPullStreamTaskResource_basic(t *testing.T) { startTimeNew := baseTime.Add(30 * time.Minute).Format(time.RFC3339) endTimeNew := baseTime.Add(2 * time.Hour).Format(time.RFC3339) liveUrl := "rtmp://5000.liveplay.myqcloud.com/live/stream1" - // vodUrl := "https://main.qcloudimg.com/video/TVP_HOME.mp4" + // vodUrl := "https://main.qcloudimg.com/video/tcacctest.TVP_HOME.mp4" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCssPullStreamTaskDestroy, Steps: []resource.TestStep{ { // PreventDiskCleanup: false, - Config: fmt.Sprintf(testAccCssPullStreamTask, defaultCSSLiveType, liveUrl, defaultCSSDomainName, defaultCSSAppName, defaultCSSStreamName, startTime, endTime, defaultCSSOperator), + Config: fmt.Sprintf(testAccCssPullStreamTask, tcacctest.DefaultCSSLiveType, liveUrl, tcacctest.DefaultCSSDomainName, tcacctest.DefaultCSSAppName, tcacctest.DefaultCSSStreamName, startTime, endTime, tcacctest.DefaultCSSOperator), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckCssPullStreamTaskExists("tencentcloud_css_pull_stream_task.pull_stream_task"), resource.TestCheckResourceAttrSet("tencentcloud_css_pull_stream_task.pull_stream_task", "id"), - resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "app_name", defaultCSSAppName), - resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "stream_name", defaultCSSStreamName), - resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "domain_name", defaultCSSDomainName), + resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "app_name", tcacctest.DefaultCSSAppName), + resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "stream_name", tcacctest.DefaultCSSStreamName), + resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "domain_name", tcacctest.DefaultCSSDomainName), resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "comment", "This is a e2e test case."), - resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "source_type", defaultCSSLiveType), + resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "source_type", tcacctest.DefaultCSSLiveType), resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "start_time", startTime), resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "end_time", endTime), resource.TestCheckResourceAttrSet("tencentcloud_css_pull_stream_task.pull_stream_task", "create_time"), @@ -91,15 +96,15 @@ func TestAccTencentCloudCssPullStreamTaskResource_basic(t *testing.T) { }, { // update - Config: fmt.Sprintf(testAccCssPullStreamTask_update, defaultCSSLiveType, liveUrl, defaultCSSDomainName, defaultCSSAppName, defaultCSSStreamName, startTimeNew, endTimeNew, defaultCSSOperator), + Config: fmt.Sprintf(testAccCssPullStreamTask_update, tcacctest.DefaultCSSLiveType, liveUrl, tcacctest.DefaultCSSDomainName, tcacctest.DefaultCSSAppName, tcacctest.DefaultCSSStreamName, startTimeNew, endTimeNew, tcacctest.DefaultCSSOperator), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckCssPullStreamTaskExists("tencentcloud_css_pull_stream_task.pull_stream_task"), resource.TestCheckResourceAttrSet("tencentcloud_css_pull_stream_task.pull_stream_task", "id"), - resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "app_name", defaultCSSAppName), - resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "stream_name", defaultCSSStreamName), - resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "domain_name", defaultCSSDomainName), + resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "app_name", tcacctest.DefaultCSSAppName), + resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "stream_name", tcacctest.DefaultCSSStreamName), + resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "domain_name", tcacctest.DefaultCSSDomainName), resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "comment", "This is a e2e test case_changed."), - resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "source_type", defaultCSSLiveType), + resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "source_type", tcacctest.DefaultCSSLiveType), resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "start_time", startTimeNew), resource.TestCheckResourceAttr("tencentcloud_css_pull_stream_task.pull_stream_task", "end_time", endTimeNew), resource.TestCheckResourceAttrSet("tencentcloud_css_pull_stream_task.pull_stream_task", "create_time"), @@ -120,10 +125,10 @@ func TestAccTencentCloudCssPullStreamTaskResource_basic(t *testing.T) { } func testAccCheckCssPullStreamTaskDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cssService := CssService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + cssService := svccss.NewCssService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_css_pull_stream_task" { continue @@ -143,8 +148,8 @@ func testAccCheckCssPullStreamTaskDestroy(s *terraform.State) error { func testAccCheckCssPullStreamTaskExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[re] if !ok { @@ -154,7 +159,7 @@ func testAccCheckCssPullStreamTaskExists(re string) resource.TestCheckFunc { return fmt.Errorf("css pull stream task id is not set") } - cssService := CssService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + cssService := svccss.NewCssService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) tasks, err := cssService.DescribeCssPullStreamTask(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_css_push_auth_key_config.go b/tencentcloud/services/css/resource_tc_css_push_auth_key_config.go similarity index 77% rename from tencentcloud/resource_tc_css_push_auth_key_config.go rename to tencentcloud/services/css/resource_tc_css_push_auth_key_config.go index 060c0b0629..b417abaa72 100644 --- a/tencentcloud/resource_tc_css_push_auth_key_config.go +++ b/tencentcloud/services/css/resource_tc_css_push_auth_key_config.go @@ -1,16 +1,19 @@ -package tencentcloud +package css import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssPushAuthKeyConfig() *schema.Resource { +func ResourceTencentCloudCssPushAuthKeyConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssPushAuthKeyConfigCreate, Read: resourceTencentCloudCssPushAuthKeyConfigRead, @@ -54,8 +57,8 @@ func resourceTencentCloudCssPushAuthKeyConfig() *schema.Resource { } func resourceTencentCloudCssPushAuthKeyConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_push_auth_key_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_push_auth_key_config.create")() + defer tccommon.InconsistentCheck(d, meta)() var domainName string if v, ok := d.GetOk("domain_name"); ok { @@ -68,14 +71,14 @@ func resourceTencentCloudCssPushAuthKeyConfigCreate(d *schema.ResourceData, meta } func resourceTencentCloudCssPushAuthKeyConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_push_auth_key_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_push_auth_key_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} domainName := d.Id() @@ -114,10 +117,10 @@ func resourceTencentCloudCssPushAuthKeyConfigRead(d *schema.ResourceData, meta i } func resourceTencentCloudCssPushAuthKeyConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_push_auth_key_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_push_auth_key_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := css.NewModifyLivePushAuthKeyRequest() @@ -145,10 +148,10 @@ func resourceTencentCloudCssPushAuthKeyConfigUpdate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().ModifyLivePushAuthKey(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().ModifyLivePushAuthKey(request) if e != nil { - return retryError(e) + 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()) } @@ -163,8 +166,8 @@ func resourceTencentCloudCssPushAuthKeyConfigUpdate(d *schema.ResourceData, meta } func resourceTencentCloudCssPushAuthKeyConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_push_auth_key_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_push_auth_key_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() //donothing return nil } diff --git a/tencentcloud/resource_tc_css_push_auth_key_config_test.go b/tencentcloud/services/css/resource_tc_css_push_auth_key_config_test.go similarity index 82% rename from tencentcloud/resource_tc_css_push_auth_key_config_test.go rename to tencentcloud/services/css/resource_tc_css_push_auth_key_config_test.go index 7ec87e84ed..11fdf40348 100644 --- a/tencentcloud/resource_tc_css_push_auth_key_config_test.go +++ b/tencentcloud/services/css/resource_tc_css_push_auth_key_config_test.go @@ -1,9 +1,11 @@ -package tencentcloud +package css_test import ( "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCssPushAuthKeyConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccCssPushAuthKeyConfig, defaultCSSPushDomainName), + Config: fmt.Sprintf(testAccCssPushAuthKeyConfig, tcacctest.DefaultCSSPushDomainName), Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_css_push_auth_key_config.push_auth_key_config", "id"), - resource.TestCheckResourceAttr("tencentcloud_css_push_auth_key_config.push_auth_key_config", "domain_name", defaultCSSPushDomainName), + resource.TestCheckResourceAttr("tencentcloud_css_push_auth_key_config.push_auth_key_config", "domain_name", tcacctest.DefaultCSSPushDomainName), resource.TestCheckResourceAttr("tencentcloud_css_push_auth_key_config.push_auth_key_config", "enable", "0"), resource.TestCheckResourceAttr("tencentcloud_css_push_auth_key_config.push_auth_key_config", "master_auth_key", "test000masterkey"), resource.TestCheckResourceAttr("tencentcloud_css_push_auth_key_config.push_auth_key_config", "backup_auth_key", "test000backkey"), @@ -26,9 +28,9 @@ func TestAccTencentCloudCssPushAuthKeyConfigResource_basic(t *testing.T) { ), }, { - Config: fmt.Sprintf(testAccCssPushAuthKeyConfig_update, defaultCSSPushDomainName), + Config: fmt.Sprintf(testAccCssPushAuthKeyConfig_update, tcacctest.DefaultCSSPushDomainName), Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_css_push_auth_key_config.push_auth_key_config", "id"), - resource.TestCheckResourceAttr("tencentcloud_css_push_auth_key_config.push_auth_key_config", "domain_name", defaultCSSPushDomainName), + resource.TestCheckResourceAttr("tencentcloud_css_push_auth_key_config.push_auth_key_config", "domain_name", tcacctest.DefaultCSSPushDomainName), resource.TestCheckResourceAttr("tencentcloud_css_push_auth_key_config.push_auth_key_config", "enable", "1"), resource.TestCheckResourceAttr("tencentcloud_css_push_auth_key_config.push_auth_key_config", "master_auth_key", "test000masterkey000updated"), resource.TestCheckResourceAttr("tencentcloud_css_push_auth_key_config.push_auth_key_config", "backup_auth_key", "test000backkey000updated"), diff --git a/tencentcloud/resource_tc_css_record_rule_attachment.go b/tencentcloud/services/css/resource_tc_css_record_rule_attachment.go similarity index 76% rename from tencentcloud/resource_tc_css_record_rule_attachment.go rename to tencentcloud/services/css/resource_tc_css_record_rule_attachment.go index ddeb0a7874..e40cbaf4f2 100644 --- a/tencentcloud/resource_tc_css_record_rule_attachment.go +++ b/tencentcloud/services/css/resource_tc_css_record_rule_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package css import ( "context" @@ -7,13 +7,16 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssRecordRuleAttachment() *schema.Resource { +func ResourceTencentCloudCssRecordRuleAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssRecordRuleAttachmentCreate, Read: resourceTencentCloudCssRecordRuleAttachmentRead, @@ -54,10 +57,10 @@ func resourceTencentCloudCssRecordRuleAttachment() *schema.Resource { } func resourceTencentCloudCssRecordRuleAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_record_rule_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_record_rule_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewCreateLiveRecordRuleRequest() @@ -82,10 +85,10 @@ func resourceTencentCloudCssRecordRuleAttachmentCreate(d *schema.ResourceData, m request.StreamName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().CreateLiveRecordRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().CreateLiveRecordRule(request) if e != nil { - return retryError(e) + 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()) } @@ -96,22 +99,22 @@ func resourceTencentCloudCssRecordRuleAttachmentCreate(d *schema.ResourceData, m return err } - d.SetId(strings.Join([]string{helper.IntToStr(templateId), domainName}, FILED_SP)) + d.SetId(strings.Join([]string{helper.IntToStr(templateId), domainName}, tccommon.FILED_SP)) return resourceTencentCloudCssRecordRuleAttachmentRead(d, meta) } func resourceTencentCloudCssRecordRuleAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_record_rule_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_record_rule_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -153,15 +156,15 @@ func resourceTencentCloudCssRecordRuleAttachmentRead(d *schema.ResourceData, met } func resourceTencentCloudCssRecordRuleAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_record_rule_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_record_rule_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_css_record_rule_attachment_test.go b/tencentcloud/services/css/resource_tc_css_record_rule_attachment_test.go similarity index 89% rename from tencentcloud/resource_tc_css_record_rule_attachment_test.go rename to tencentcloud/services/css/resource_tc_css_record_rule_attachment_test.go index 5a38adba73..501038e746 100644 --- a/tencentcloud/resource_tc_css_record_rule_attachment_test.go +++ b/tencentcloud/services/css/resource_tc_css_record_rule_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCssRecordRuleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssRecordRule, diff --git a/tencentcloud/resource_tc_css_record_template.go b/tencentcloud/services/css/resource_tc_css_record_template.go similarity index 93% rename from tencentcloud/resource_tc_css_record_template.go rename to tencentcloud/services/css/resource_tc_css_record_template.go index d00834f041..84698acc5e 100644 --- a/tencentcloud/resource_tc_css_record_template.go +++ b/tencentcloud/services/css/resource_tc_css_record_template.go @@ -1,89 +1,4 @@ -/* -Provides a resource to create a css record_template - -Example Usage - -```hcl -resource "tencentcloud_css_record_template" "record_template" { - template_name = "demo" - description = "this is demo" - flv_param { - record_interval = 30 - storage_time = 2 - enable = 0 - vod_sub_app_id = 123 - vod_file_name = "demo" - procedure = "" - storage_mode = "Normal" - class_id = 123 - - } - hls_param { - record_interval = 40 - storage_time = 2 - enable = 1 - vod_sub_app_id = 123 - vod_file_name = "test" - procedure = "" - storage_mode = "Cold" - class_id = 123 - - } - mp4_param { - record_interval = 45 - storage_time = 56 - enable = 0 - vod_sub_app_id = 234 - vod_file_name = "test" - procedure = "" - storage_mode = "Cold" - class_id = 123 - - } - aac_param { - record_interval = 5678 - storage_time = 1234 - enable = 1 - vod_sub_app_id = 123 - vod_file_name = "test" - procedure = "" - storage_mode = "Normal" - class_id = 123 - - } - is_delay_live = 1 - hls_special_param { - flow_continue_duration = 1200 - - } - mp3_param { - record_interval = 100 - storage_time = 100 - enable = 1 - vod_sub_app_id = 123 - vod_file_name = "test" - procedure = "" - storage_mode = "Normal" - class_id = 123 - - } - remove_watermark = true - flv_special_param { - upload_in_recording = true - - } -} -``` - -Import - -css record_template can be imported using the id, e.g. - -``` -terraform import tencentcloud_css_record_template.record_template templateId -``` -*/ -package tencentcloud +package css import ( "context" @@ -94,10 +9,12 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssRecordTemplate() *schema.Resource { +func ResourceTencentCloudCssRecordTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssRecordTemplateCreate, Read: resourceTencentCloudCssRecordTemplateRead, @@ -422,10 +339,10 @@ func resourceTencentCloudCssRecordTemplate() *schema.Resource { } func resourceTencentCloudCssRecordTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_record_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_record_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewCreateLiveRecordTemplateRequest() @@ -609,10 +526,10 @@ func resourceTencentCloudCssRecordTemplateCreate(d *schema.ResourceData, meta in request.FlvSpecialParam = &flvSpecialParam } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().CreateLiveRecordTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().CreateLiveRecordTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -631,14 +548,14 @@ func resourceTencentCloudCssRecordTemplateCreate(d *schema.ResourceData, meta in } func resourceTencentCloudCssRecordTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_record_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_record_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() templateIdInt64, err := strconv.ParseInt(templateId, 10, 64) @@ -887,10 +804,10 @@ func resourceTencentCloudCssRecordTemplateRead(d *schema.ResourceData, meta inte } func resourceTencentCloudCssRecordTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_record_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_record_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := css.NewModifyLiveRecordTemplateRequest() @@ -1092,10 +1009,10 @@ func resourceTencentCloudCssRecordTemplateUpdate(d *schema.ResourceData, meta in } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().ModifyLiveRecordTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().ModifyLiveRecordTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -1110,13 +1027,13 @@ func resourceTencentCloudCssRecordTemplateUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudCssRecordTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_record_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_record_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() templateIdInt64, _ := strconv.ParseInt(templateId, 10, 64) diff --git a/tencentcloud/services/css/resource_tc_css_record_template.md b/tencentcloud/services/css/resource_tc_css_record_template.md new file mode 100644 index 0000000000..bd967d40d9 --- /dev/null +++ b/tencentcloud/services/css/resource_tc_css_record_template.md @@ -0,0 +1,83 @@ +Provides a resource to create a css record_template + +Example Usage + +```hcl +resource "tencentcloud_css_record_template" "record_template" { + template_name = "demo" + description = "this is demo" + flv_param { + record_interval = 30 + storage_time = 2 + enable = 0 + vod_sub_app_id = 123 + vod_file_name = "demo" + procedure = "" + storage_mode = "Normal" + class_id = 123 + + } + hls_param { + record_interval = 40 + storage_time = 2 + enable = 1 + vod_sub_app_id = 123 + vod_file_name = "test" + procedure = "" + storage_mode = "Cold" + class_id = 123 + + } + mp4_param { + record_interval = 45 + storage_time = 56 + enable = 0 + vod_sub_app_id = 234 + vod_file_name = "test" + procedure = "" + storage_mode = "Cold" + class_id = 123 + + } + aac_param { + record_interval = 5678 + storage_time = 1234 + enable = 1 + vod_sub_app_id = 123 + vod_file_name = "test" + procedure = "" + storage_mode = "Normal" + class_id = 123 + + } + is_delay_live = 1 + hls_special_param { + flow_continue_duration = 1200 + + } + mp3_param { + record_interval = 100 + storage_time = 100 + enable = 1 + vod_sub_app_id = 123 + vod_file_name = "test" + procedure = "" + storage_mode = "Normal" + class_id = 123 + + } + remove_watermark = true + flv_special_param { + upload_in_recording = true + + } +} +``` + +Import + +css record_template can be imported using the id, e.g. + +``` +terraform import tencentcloud_css_record_template.record_template templateId +``` diff --git a/tencentcloud/resource_tc_css_record_template_test.go b/tencentcloud/services/css/resource_tc_css_record_template_test.go similarity index 91% rename from tencentcloud/resource_tc_css_record_template_test.go rename to tencentcloud/services/css/resource_tc_css_record_template_test.go index 1d6c57ab31..162131bfa5 100644 --- a/tencentcloud/resource_tc_css_record_template_test.go +++ b/tencentcloud/services/css/resource_tc_css_record_template_test.go @@ -1,18 +1,20 @@ -package tencentcloud +package css_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudCssRecordTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssRecordTemplate, diff --git a/tencentcloud/resource_tc_css_snapshot_rule_attachment.go b/tencentcloud/services/css/resource_tc_css_snapshot_rule_attachment.go similarity index 76% rename from tencentcloud/resource_tc_css_snapshot_rule_attachment.go rename to tencentcloud/services/css/resource_tc_css_snapshot_rule_attachment.go index 826b67fa0b..0f46b24873 100644 --- a/tencentcloud/resource_tc_css_snapshot_rule_attachment.go +++ b/tencentcloud/services/css/resource_tc_css_snapshot_rule_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package css import ( "context" @@ -7,13 +7,16 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssSnapshotRuleAttachment() *schema.Resource { +func ResourceTencentCloudCssSnapshotRuleAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssSnapshotRuleAttachmentCreate, Read: resourceTencentCloudCssSnapshotRuleAttachmentRead, @@ -54,10 +57,10 @@ func resourceTencentCloudCssSnapshotRuleAttachment() *schema.Resource { } func resourceTencentCloudCssSnapshotRuleAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_snapshot_rule_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_snapshot_rule_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewCreateLiveSnapshotRuleRequest() @@ -82,10 +85,10 @@ func resourceTencentCloudCssSnapshotRuleAttachmentCreate(d *schema.ResourceData, request.StreamName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().CreateLiveSnapshotRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().CreateLiveSnapshotRule(request) if e != nil { - return retryError(e) + 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()) } @@ -96,22 +99,22 @@ func resourceTencentCloudCssSnapshotRuleAttachmentCreate(d *schema.ResourceData, return err } - d.SetId(strings.Join([]string{helper.IntToStr(templateId), domainName}, FILED_SP)) + d.SetId(strings.Join([]string{helper.IntToStr(templateId), domainName}, tccommon.FILED_SP)) return resourceTencentCloudCssSnapshotRuleAttachmentRead(d, meta) } func resourceTencentCloudCssSnapshotRuleAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_snapshot_rule_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_snapshot_rule_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -153,14 +156,14 @@ func resourceTencentCloudCssSnapshotRuleAttachmentRead(d *schema.ResourceData, m } func resourceTencentCloudCssSnapshotRuleAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_snapshot_rule_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_snapshot_rule_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_css_snapshot_rule_attachment_test.go b/tencentcloud/services/css/resource_tc_css_snapshot_rule_attachment_test.go similarity index 89% rename from tencentcloud/resource_tc_css_snapshot_rule_attachment_test.go rename to tencentcloud/services/css/resource_tc_css_snapshot_rule_attachment_test.go index deded19d7e..c5bb2c0ced 100644 --- a/tencentcloud/resource_tc_css_snapshot_rule_attachment_test.go +++ b/tencentcloud/services/css/resource_tc_css_snapshot_rule_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCssSnapshotRuleAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssSnapshotRule, diff --git a/tencentcloud/resource_tc_css_snapshot_template.go b/tencentcloud/services/css/resource_tc_css_snapshot_template.go similarity index 83% rename from tencentcloud/resource_tc_css_snapshot_template.go rename to tencentcloud/services/css/resource_tc_css_snapshot_template.go index 8105b3f807..5846e62c68 100644 --- a/tencentcloud/resource_tc_css_snapshot_template.go +++ b/tencentcloud/services/css/resource_tc_css_snapshot_template.go @@ -1,17 +1,20 @@ -package tencentcloud +package css import ( "context" "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssSnapshotTemplate() *schema.Resource { +func ResourceTencentCloudCssSnapshotTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssSnapshotTemplateCreate, Read: resourceTencentCloudCssSnapshotTemplateRead, @@ -91,10 +94,10 @@ func resourceTencentCloudCssSnapshotTemplate() *schema.Resource { } func resourceTencentCloudCssSnapshotTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_snapshot_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_snapshot_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewCreateLiveSnapshotTemplateRequest() @@ -145,10 +148,10 @@ func resourceTencentCloudCssSnapshotTemplateCreate(d *schema.ResourceData, meta request.CosFileName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().CreateLiveSnapshotTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().CreateLiveSnapshotTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -167,14 +170,14 @@ func resourceTencentCloudCssSnapshotTemplateCreate(d *schema.ResourceData, meta } func resourceTencentCloudCssSnapshotTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_snapshot_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_snapshot_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() templateIdInt64, _ := strconv.ParseInt(templateId, 10, 64) @@ -238,10 +241,10 @@ func resourceTencentCloudCssSnapshotTemplateRead(d *schema.ResourceData, meta in } func resourceTencentCloudCssSnapshotTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_snapshot_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_snapshot_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := css.NewModifyLiveSnapshotTemplateRequest() @@ -294,10 +297,10 @@ func resourceTencentCloudCssSnapshotTemplateUpdate(d *schema.ResourceData, meta request.CosFileName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().ModifyLiveSnapshotTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().ModifyLiveSnapshotTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -312,13 +315,13 @@ func resourceTencentCloudCssSnapshotTemplateUpdate(d *schema.ResourceData, meta } func resourceTencentCloudCssSnapshotTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_snapshot_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_snapshot_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() templateIdInt64, _ := strconv.ParseInt(templateId, 10, 64) diff --git a/tencentcloud/resource_tc_css_snapshot_template_test.go b/tencentcloud/services/css/resource_tc_css_snapshot_template_test.go similarity index 96% rename from tencentcloud/resource_tc_css_snapshot_template_test.go rename to tencentcloud/services/css/resource_tc_css_snapshot_template_test.go index 5534236174..2e8f3421d3 100644 --- a/tencentcloud/resource_tc_css_snapshot_template_test.go +++ b/tencentcloud/services/css/resource_tc_css_snapshot_template_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCssSnapshotTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssSnapshotTemplate, diff --git a/tencentcloud/resource_tc_css_start_stream_monitor.go b/tencentcloud/services/css/resource_tc_css_start_stream_monitor.go similarity index 66% rename from tencentcloud/resource_tc_css_start_stream_monitor.go rename to tencentcloud/services/css/resource_tc_css_start_stream_monitor.go index e391a185ec..9c9eb057e6 100644 --- a/tencentcloud/resource_tc_css_start_stream_monitor.go +++ b/tencentcloud/services/css/resource_tc_css_start_stream_monitor.go @@ -1,17 +1,20 @@ -package tencentcloud +package css import ( "context" "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssStartStreamMonitor() *schema.Resource { +func ResourceTencentCloudCssStartStreamMonitor() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssStartStreamMonitorCreate, Read: resourceTencentCloudCssStartStreamMonitorRead, @@ -41,10 +44,10 @@ func resourceTencentCloudCssStartStreamMonitor() *schema.Resource { } func resourceTencentCloudCssStartStreamMonitorCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_start_stream_monitor.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_start_stream_monitor.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewStartLiveStreamMonitorRequest() @@ -63,10 +66,10 @@ func resourceTencentCloudCssStartStreamMonitorCreate(d *schema.ResourceData, met } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().StartLiveStreamMonitor(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().StartLiveStreamMonitor(request) if e != nil { - return retryError(e) + 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()) } @@ -79,9 +82,9 @@ func resourceTencentCloudCssStartStreamMonitorCreate(d *schema.ResourceData, met d.SetId(monitorId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - conf := BuildStateChangeConf([]string{}, []string{"1"}, 6*readRetryTimeout, time.Second, service.CssStartStreamMonitorStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"1"}, 6*tccommon.ReadRetryTimeout, time.Second, service.CssStartStreamMonitorStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -91,14 +94,14 @@ func resourceTencentCloudCssStartStreamMonitorCreate(d *schema.ResourceData, met } func resourceTencentCloudCssStartStreamMonitorRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_start_stream_monitor.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_start_stream_monitor.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} monitorId := d.Id() @@ -125,20 +128,20 @@ func resourceTencentCloudCssStartStreamMonitorRead(d *schema.ResourceData, meta } func resourceTencentCloudCssStartStreamMonitorDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_start_stream_monitor.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_start_stream_monitor.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} monitorId := d.Id() if err := service.DeleteCssStartStreamMonitorById(ctx, monitorId); err != nil { return err } - conf := BuildStateChangeConf([]string{}, []string{"0"}, 6*readRetryTimeout, time.Second, service.CssStartStreamMonitorStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"0"}, 6*tccommon.ReadRetryTimeout, time.Second, service.CssStartStreamMonitorStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e diff --git a/tencentcloud/resource_tc_css_start_stream_monitor_test.go b/tencentcloud/services/css/resource_tc_css_start_stream_monitor_test.go similarity index 83% rename from tencentcloud/resource_tc_css_start_stream_monitor_test.go rename to tencentcloud/services/css/resource_tc_css_start_stream_monitor_test.go index 9802fca78a..0370a85378 100644 --- a/tencentcloud/resource_tc_css_start_stream_monitor_test.go +++ b/tencentcloud/services/css/resource_tc_css_start_stream_monitor_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCssStartStreamMonitorResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssStartStreamMonitor, diff --git a/tencentcloud/resource_tc_css_stream_monitor.go b/tencentcloud/services/css/resource_tc_css_stream_monitor.go similarity index 91% rename from tencentcloud/resource_tc_css_stream_monitor.go rename to tencentcloud/services/css/resource_tc_css_stream_monitor.go index fc012e506d..1cc25bbc54 100644 --- a/tencentcloud/resource_tc_css_stream_monitor.go +++ b/tencentcloud/services/css/resource_tc_css_stream_monitor.go @@ -1,16 +1,19 @@ -package tencentcloud +package css import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssStreamMonitor() *schema.Resource { +func ResourceTencentCloudCssStreamMonitor() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssStreamMonitorCreate, Read: resourceTencentCloudCssStreamMonitorRead, @@ -176,10 +179,10 @@ func resourceTencentCloudCssStreamMonitor() *schema.Resource { } func resourceTencentCloudCssStreamMonitorCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_stream_monitor.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_stream_monitor.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewCreateLiveStreamMonitorRequest() @@ -284,10 +287,10 @@ func resourceTencentCloudCssStreamMonitorCreate(d *schema.ResourceData, meta int request.AiFormatDiagnose = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().CreateLiveStreamMonitor(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().CreateLiveStreamMonitor(request) if e != nil { - return retryError(e) + 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()) } @@ -306,14 +309,14 @@ func resourceTencentCloudCssStreamMonitorCreate(d *schema.ResourceData, meta int } func resourceTencentCloudCssStreamMonitorRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_stream_monitor.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_stream_monitor.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} monitorId := d.Id() @@ -440,10 +443,10 @@ func resourceTencentCloudCssStreamMonitorRead(d *schema.ResourceData, meta inter } func resourceTencentCloudCssStreamMonitorUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_stream_monitor.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_stream_monitor.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := css.NewModifyLiveStreamMonitorRequest() @@ -573,10 +576,10 @@ func resourceTencentCloudCssStreamMonitorUpdate(d *schema.ResourceData, meta int } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().ModifyLiveStreamMonitor(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().ModifyLiveStreamMonitor(request) if e != nil { - return retryError(e) + 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()) } @@ -591,13 +594,13 @@ func resourceTencentCloudCssStreamMonitorUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudCssStreamMonitorDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_stream_monitor.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_stream_monitor.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} monitorId := d.Id() if err := service.DeleteCssStreamMonitorById(ctx, monitorId); err != nil { diff --git a/tencentcloud/resource_tc_css_stream_monitor_test.go b/tencentcloud/services/css/resource_tc_css_stream_monitor_test.go similarity index 97% rename from tencentcloud/resource_tc_css_stream_monitor_test.go rename to tencentcloud/services/css/resource_tc_css_stream_monitor_test.go index 3018ff8c49..e4cc65ce6e 100644 --- a/tencentcloud/resource_tc_css_stream_monitor_test.go +++ b/tencentcloud/services/css/resource_tc_css_stream_monitor_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCssStreamMonitorResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssStreamMonitor, diff --git a/tencentcloud/resource_tc_css_timeshift_rule_attachment.go b/tencentcloud/services/css/resource_tc_css_timeshift_rule_attachment.go similarity index 76% rename from tencentcloud/resource_tc_css_timeshift_rule_attachment.go rename to tencentcloud/services/css/resource_tc_css_timeshift_rule_attachment.go index 9ab7ca5b0c..5e90005345 100644 --- a/tencentcloud/resource_tc_css_timeshift_rule_attachment.go +++ b/tencentcloud/services/css/resource_tc_css_timeshift_rule_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package css import ( "context" @@ -7,13 +7,16 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssTimeshiftRuleAttachment() *schema.Resource { +func ResourceTencentCloudCssTimeshiftRuleAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssTimeshiftRuleAttachmentCreate, Read: resourceTencentCloudCssTimeshiftRuleAttachmentRead, @@ -54,10 +57,10 @@ func resourceTencentCloudCssTimeshiftRuleAttachment() *schema.Resource { } func resourceTencentCloudCssTimeshiftRuleAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_timeshift_rule_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_timeshift_rule_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewCreateLiveTimeShiftRuleRequest() @@ -82,10 +85,10 @@ func resourceTencentCloudCssTimeshiftRuleAttachmentCreate(d *schema.ResourceData request.TemplateId = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().CreateLiveTimeShiftRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().CreateLiveTimeShiftRule(request) if e != nil { - return retryError(e) + 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()) } @@ -96,22 +99,22 @@ func resourceTencentCloudCssTimeshiftRuleAttachmentCreate(d *schema.ResourceData return err } - d.SetId(strings.Join([]string{helper.IntToStr(templateId), domainName}, FILED_SP)) + d.SetId(strings.Join([]string{helper.IntToStr(templateId), domainName}, tccommon.FILED_SP)) return resourceTencentCloudCssTimeshiftRuleAttachmentRead(d, meta) } func resourceTencentCloudCssTimeshiftRuleAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_timeshift_rule_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_timeshift_rule_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -153,14 +156,14 @@ func resourceTencentCloudCssTimeshiftRuleAttachmentRead(d *schema.ResourceData, } func resourceTencentCloudCssTimeshiftRuleAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_timeshift_rule_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_timeshift_rule_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_css_timeshift_rule_attachment_test.go b/tencentcloud/services/css/resource_tc_css_timeshift_rule_attachment_test.go similarity index 90% rename from tencentcloud/resource_tc_css_timeshift_rule_attachment_test.go rename to tencentcloud/services/css/resource_tc_css_timeshift_rule_attachment_test.go index 050ab566b8..6f2db89edc 100644 --- a/tencentcloud/resource_tc_css_timeshift_rule_attachment_test.go +++ b/tencentcloud/services/css/resource_tc_css_timeshift_rule_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCssTimeshiftRuleAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssTimeshiftRuleAttachment, diff --git a/tencentcloud/resource_tc_css_timeshift_template.go b/tencentcloud/services/css/resource_tc_css_timeshift_template.go similarity index 82% rename from tencentcloud/resource_tc_css_timeshift_template.go rename to tencentcloud/services/css/resource_tc_css_timeshift_template.go index 28026ebdd8..2ae5d0edfd 100644 --- a/tencentcloud/resource_tc_css_timeshift_template.go +++ b/tencentcloud/services/css/resource_tc_css_timeshift_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package css import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssTimeshiftTemplate() *schema.Resource { +func ResourceTencentCloudCssTimeshiftTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssTimeshiftTemplateCreate, Read: resourceTencentCloudCssTimeshiftTemplateRead, @@ -71,10 +74,10 @@ func resourceTencentCloudCssTimeshiftTemplate() *schema.Resource { } func resourceTencentCloudCssTimeshiftTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_timeshift_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_timeshift_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewCreateLiveTimeShiftTemplateRequest() @@ -113,10 +116,10 @@ func resourceTencentCloudCssTimeshiftTemplateCreate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().CreateLiveTimeShiftTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().CreateLiveTimeShiftTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -135,14 +138,14 @@ func resourceTencentCloudCssTimeshiftTemplateCreate(d *schema.ResourceData, meta } func resourceTencentCloudCssTimeshiftTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_timeshift_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_timeshift_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() templateIdInt64, err := strconv.ParseInt(templateId, 10, 64) @@ -193,10 +196,10 @@ func resourceTencentCloudCssTimeshiftTemplateRead(d *schema.ResourceData, meta i } func resourceTencentCloudCssTimeshiftTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_timeshift_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_timeshift_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := css.NewModifyLiveTimeShiftTemplateRequest() @@ -252,10 +255,10 @@ func resourceTencentCloudCssTimeshiftTemplateUpdate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().ModifyLiveTimeShiftTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().ModifyLiveTimeShiftTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -270,13 +273,13 @@ func resourceTencentCloudCssTimeshiftTemplateUpdate(d *schema.ResourceData, meta } func resourceTencentCloudCssTimeshiftTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_timeshift_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_timeshift_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId := d.Id() templateIdInt64, _ := strconv.ParseInt(templateId, 10, 64) diff --git a/tencentcloud/resource_tc_css_timeshift_template_test.go b/tencentcloud/services/css/resource_tc_css_timeshift_template_test.go similarity index 94% rename from tencentcloud/resource_tc_css_timeshift_template_test.go rename to tencentcloud/services/css/resource_tc_css_timeshift_template_test.go index 249cad70b2..27c3fc6e5e 100644 --- a/tencentcloud/resource_tc_css_timeshift_template_test.go +++ b/tencentcloud/services/css/resource_tc_css_timeshift_template_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package css_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCssTimeshiftTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCssTimeshiftTemplate, diff --git a/tencentcloud/resource_tc_css_watermark.go b/tencentcloud/services/css/resource_tc_css_watermark.go similarity index 76% rename from tencentcloud/resource_tc_css_watermark.go rename to tencentcloud/services/css/resource_tc_css_watermark.go index 3d51382a8a..b301288c28 100644 --- a/tencentcloud/resource_tc_css_watermark.go +++ b/tencentcloud/services/css/resource_tc_css_watermark.go @@ -1,17 +1,20 @@ -package tencentcloud +package css import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssWatermark() *schema.Resource { +func ResourceTencentCloudCssWatermark() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudCssWatermarkRead, Create: resourceTencentCloudCssWatermarkCreate, @@ -67,10 +70,10 @@ func resourceTencentCloudCssWatermark() *schema.Resource { } func resourceTencentCloudCssWatermarkCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_watermark.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_watermark.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewAddLiveWatermarkRequest() @@ -104,10 +107,10 @@ func resourceTencentCloudCssWatermarkCreate(d *schema.ResourceData, meta interfa request.Height = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().AddLiveWatermark(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().AddLiveWatermark(request) if e != nil { - return retryError(e) + 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()) @@ -128,13 +131,13 @@ func resourceTencentCloudCssWatermarkCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudCssWatermarkRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_watermark.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_watermark.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} watermarkId := d.Id() @@ -181,11 +184,11 @@ func resourceTencentCloudCssWatermarkRead(d *schema.ResourceData, meta interface } func resourceTencentCloudCssWatermarkUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_watermark.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_watermark.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - // ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + // ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := css.NewUpdateLiveWatermarkRequest() @@ -229,10 +232,10 @@ func resourceTencentCloudCssWatermarkUpdate(d *schema.ResourceData, meta interfa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().UpdateLiveWatermark(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().UpdateLiveWatermark(request) if e != nil { - return retryError(e) + 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()) @@ -249,13 +252,13 @@ func resourceTencentCloudCssWatermarkUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudCssWatermarkDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_watermark.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_watermark.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} watermarkId := d.Id() diff --git a/tencentcloud/resource_tc_css_watermark_rule_attachment.go b/tencentcloud/services/css/resource_tc_css_watermark_rule_attachment.go similarity index 75% rename from tencentcloud/resource_tc_css_watermark_rule_attachment.go rename to tencentcloud/services/css/resource_tc_css_watermark_rule_attachment.go index 9d2b148d5a..07160f1ccb 100644 --- a/tencentcloud/resource_tc_css_watermark_rule_attachment.go +++ b/tencentcloud/services/css/resource_tc_css_watermark_rule_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package css import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCssWatermarkRuleAttachment() *schema.Resource { +func ResourceTencentCloudCssWatermarkRuleAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCssWatermarkRuleAttachmentCreate, Read: resourceTencentCloudCssWatermarkRuleAttachmentRead, @@ -65,10 +68,10 @@ func resourceTencentCloudCssWatermarkRuleAttachment() *schema.Resource { } func resourceTencentCloudCssWatermarkRuleAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_watermark_rule_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_watermark_rule_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = css.NewCreateLiveWatermarkRuleRequest() @@ -97,10 +100,10 @@ func resourceTencentCloudCssWatermarkRuleAttachmentCreate(d *schema.ResourceData request.TemplateId = helper.IntInt64(templateId) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCssClient().CreateLiveWatermarkRule(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCssClient().CreateLiveWatermarkRule(request) if e != nil { - return retryError(e) + 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()) } @@ -111,22 +114,22 @@ func resourceTencentCloudCssWatermarkRuleAttachmentCreate(d *schema.ResourceData return err } - d.SetId(strings.Join([]string{domainName, appName, streamName, helper.IntToStr(templateId)}, FILED_SP)) + d.SetId(strings.Join([]string{domainName, appName, streamName, helper.IntToStr(templateId)}, tccommon.FILED_SP)) return resourceTencentCloudCssWatermarkRuleAttachmentRead(d, meta) } func resourceTencentCloudCssWatermarkRuleAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_watermark_rule_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_watermark_rule_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -174,14 +177,14 @@ func resourceTencentCloudCssWatermarkRuleAttachmentRead(d *schema.ResourceData, } func resourceTencentCloudCssWatermarkRuleAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_css_watermark_rule_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_css_watermark_rule_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CssService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CssService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_css_watermark_rule_attachment_test.go b/tencentcloud/services/css/resource_tc_css_watermark_rule_attachment_test.go similarity index 77% rename from tencentcloud/resource_tc_css_watermark_rule_attachment_test.go rename to tencentcloud/services/css/resource_tc_css_watermark_rule_attachment_test.go index d4240ea9cd..1632c39bba 100644 --- a/tencentcloud/resource_tc_css_watermark_rule_attachment_test.go +++ b/tencentcloud/services/css/resource_tc_css_watermark_rule_attachment_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package css_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccss "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/css" + "context" "fmt" "strings" @@ -19,13 +23,13 @@ func TestAccTencentCloudCssWatermarkRuleAttachmentResource_basic(t *testing.T) { liveUrl := "rtmp://5000.liveplay.myqcloud.com/live/stream1" resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckWatermarkRuleAttachmentDestroy, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccCssWatermarkRuleAttachment, defaultCSSLiveType, liveUrl, defaultCSSDomainName, defaultCSSAppName, startTime, endTime, defaultCSSOperator, defaultCSSPrefix), + Config: fmt.Sprintf(testAccCssWatermarkRuleAttachment, tcacctest.DefaultCSSLiveType, liveUrl, tcacctest.DefaultCSSDomainName, tcacctest.DefaultCSSAppName, startTime, endTime, tcacctest.DefaultCSSOperator, tcacctest.DefaultCSSPrefix), Check: resource.ComposeTestCheckFunc( testAccCheckCssWatermarkRuleAttachmentExists("tencentcloud_css_watermark_rule_attachment.watermark_rule_attachment"), resource.TestCheckResourceAttrSet("tencentcloud_css_watermark_rule_attachment.watermark_rule_attachment", "id"), @@ -47,16 +51,16 @@ func TestAccTencentCloudCssWatermarkRuleAttachmentResource_basic(t *testing.T) { } func testAccCheckWatermarkRuleAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cssService := CssService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + cssService := svccss.NewCssService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_css_watermark_rule_attachment" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) domainName := idSplit[0] appName := idSplit[1] streamName := idSplit[2] @@ -76,8 +80,8 @@ func testAccCheckWatermarkRuleAttachmentDestroy(s *terraform.State) error { func testAccCheckCssWatermarkRuleAttachmentExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[re] if !ok { @@ -87,8 +91,8 @@ func testAccCheckCssWatermarkRuleAttachmentExists(re string) resource.TestCheckF return fmt.Errorf("css watermark rule attachment id is not set") } - cssService := CssService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + cssService := svccss.NewCssService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) domainName := idSplit[0] appName := idSplit[1] streamName := idSplit[2] diff --git a/tencentcloud/resource_tc_css_watermark_test.go b/tencentcloud/services/css/resource_tc_css_watermark_test.go similarity index 75% rename from tencentcloud/resource_tc_css_watermark_test.go rename to tencentcloud/services/css/resource_tc_css_watermark_test.go index 9d6c60ce33..7e7f2d3c4d 100644 --- a/tencentcloud/resource_tc_css_watermark_test.go +++ b/tencentcloud/services/css/resource_tc_css_watermark_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package css_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccss "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/css" + "context" "fmt" "regexp" @@ -20,10 +24,10 @@ func init() { // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_css_watermark func testSweepCSSWatermarkTask(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - cssService := CssService{client: cli.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + cssService := svccss.NewCssService(cli.(tccommon.ProviderMeta).GetAPIV3Conn()) marks, err := cssService.DescribeCssWatermarks(ctx) if err != nil { @@ -37,11 +41,11 @@ func testSweepCSSWatermarkTask(r string) error { delName := v.WatermarkName delId := v.WatermarkId - if strings.HasPrefix(*delName, defaultCSSPrefix) { - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + if strings.HasPrefix(*delName, tcacctest.DefaultCSSPrefix) { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { err := cssService.DeleteCssWatermarkById(ctx, delId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -57,17 +61,17 @@ func TestAccTencentCloudCssWatermarkResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCssWatermarkDestroy, Steps: []resource.TestStep{ { - Config: fmt.Sprintf(testAccCssWatermark, defaultCSSPrefix), + Config: fmt.Sprintf(testAccCssWatermark, tcacctest.DefaultCSSPrefix), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckCssWatermarkExists("tencentcloud_css_watermark.watermark"), resource.TestCheckResourceAttrSet("tencentcloud_css_watermark.watermark", "id"), resource.TestMatchResourceAttr("tencentcloud_css_watermark.watermark", "picture_url", regexp.MustCompile("https://main.qcloudimg.com")), - resource.TestMatchResourceAttr("tencentcloud_css_watermark.watermark", "watermark_name", regexp.MustCompile(defaultCSSPrefix)), + resource.TestMatchResourceAttr("tencentcloud_css_watermark.watermark", "watermark_name", regexp.MustCompile(tcacctest.DefaultCSSPrefix)), resource.TestCheckResourceAttrSet("tencentcloud_css_watermark.watermark", "status"), resource.TestCheckResourceAttrSet("tencentcloud_css_watermark.watermark", "x_position"), resource.TestCheckResourceAttrSet("tencentcloud_css_watermark.watermark", "y_position"), @@ -76,7 +80,7 @@ func TestAccTencentCloudCssWatermarkResource_basic(t *testing.T) { ), }, { - Config: fmt.Sprintf(testAccCssWatermark_update, defaultCSSPrefix), + Config: fmt.Sprintf(testAccCssWatermark_update, tcacctest.DefaultCSSPrefix), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckCssWatermarkExists("tencentcloud_css_watermark.watermark"), resource.TestCheckResourceAttrSet("tencentcloud_css_watermark.watermark", "id"), @@ -99,10 +103,10 @@ func TestAccTencentCloudCssWatermarkResource_basic(t *testing.T) { } func testAccCheckCssWatermarkDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cssService := CssService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + cssService := svccss.NewCssService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_css_watermark" { continue @@ -122,8 +126,8 @@ func testAccCheckCssWatermarkDestroy(s *terraform.State) error { func testAccCheckCssWatermarkExists(re string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[re] if !ok { @@ -133,7 +137,7 @@ func testAccCheckCssWatermarkExists(re string) resource.TestCheckFunc { return fmt.Errorf("css watermark id is not set") } - cssService := CssService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + cssService := svccss.NewCssService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) watermark, err := cssService.DescribeCssWatermark(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/service_tencentcloud_css.go b/tencentcloud/services/css/service_tencentcloud_css.go similarity index 96% rename from tencentcloud/service_tencentcloud_css.go rename to tencentcloud/services/css/service_tencentcloud_css.go index a9b9ac80b7..781a4a26ba 100644 --- a/tencentcloud/service_tencentcloud_css.go +++ b/tencentcloud/services/css/service_tencentcloud_css.go @@ -1,24 +1,31 @@ -package tencentcloud +package css import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" css "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) +func NewCssService(client *connectivity.TencentCloudClient) CssService { + return CssService{client: client} +} + type CssService struct { client *connectivity.TencentCloudClient } func (me *CssService) DescribeCssWatermark(ctx context.Context, watermarkId string) (watermark *css.WatermarkInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeLiveWatermarkRequest() ) @@ -49,7 +56,7 @@ func (me *CssService) DescribeCssWatermark(ctx context.Context, watermarkId stri func (me *CssService) DescribeCssWatermarks(ctx context.Context) (marks []*css.WatermarkInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeLiveWatermarksRequest() ) @@ -77,7 +84,7 @@ func (me *CssService) DescribeCssWatermarks(ctx context.Context) (marks []*css.W } func (me *CssService) DeleteCssWatermarkById(ctx context.Context, watermarkId *int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLiveWatermarkRequest() @@ -104,7 +111,7 @@ func (me *CssService) DeleteCssWatermarkById(ctx context.Context, watermarkId *i func (me *CssService) DescribeCssPullStreamTask(ctx context.Context, taskId string) (tasks []*css.PullStreamTaskInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeLivePullStreamTasksRequest() ) @@ -136,7 +143,7 @@ func (me *CssService) DescribeCssPullStreamTask(ctx context.Context, taskId stri } func (me *CssService) DeleteCssPullStreamTaskById(ctx context.Context, taskId, operator *string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLivePullStreamTaskRequest() @@ -164,7 +171,7 @@ func (me *CssService) DeleteCssPullStreamTaskById(ctx context.Context, taskId, o func (me *CssService) DescribeCssLiveTranscodeTemplate(ctx context.Context, templateId *int64) (liveTranscodeTemplate *css.TemplateInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeLiveTranscodeTemplateRequest() ) @@ -194,7 +201,7 @@ func (me *CssService) DescribeCssLiveTranscodeTemplate(ctx context.Context, temp func (me *CssService) DescribeCssLiveTranscodeTemplates(ctx context.Context) (temps []*css.TemplateInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeLiveTranscodeTemplatesRequest() ) @@ -222,7 +229,7 @@ func (me *CssService) DescribeCssLiveTranscodeTemplates(ctx context.Context) (te } func (me *CssService) DeleteCssLiveTranscodeTemplateById(ctx context.Context, templateId *int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLiveTranscodeTemplateRequest() @@ -249,7 +256,7 @@ func (me *CssService) DeleteCssLiveTranscodeTemplateById(ctx context.Context, te func (me *CssService) DescribeCssLiveTranscodeRuleAttachment(ctx context.Context, domainName, templateId *string) (rules []*css.RuleInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeLiveTranscodeRulesRequest() ) @@ -285,7 +292,7 @@ func (me *CssService) DescribeCssLiveTranscodeRuleAttachment(ctx context.Context } func (me *CssService) DeleteCssLiveTranscodeRuleAttachmentById(ctx context.Context, domainName, appName, streamName, templateId *string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLiveTranscodeRuleRequest() @@ -314,7 +321,7 @@ func (me *CssService) DeleteCssLiveTranscodeRuleAttachmentById(ctx context.Conte } func (me *CssService) DescribeCssDomainById(ctx context.Context, name string) (domain *css.DomainInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLiveDomainRequest() request.DomainName = &name @@ -344,7 +351,7 @@ func (me *CssService) DescribeCssDomainById(ctx context.Context, name string) (d } func (me *CssService) DeleteCssDomainById(ctx context.Context, name *string, dtype *uint64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) if name == nil || dtype == nil { return fmt.Errorf("DeleteCssDomainById: the required parameters name and type are nil!") @@ -373,7 +380,7 @@ func (me *CssService) DeleteCssDomainById(ctx context.Context, name *string, dty func (me *CssService) DescribeCssDomainsByFilter(ctx context.Context, param map[string]interface{}) (domains []*css.DomainInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeLiveDomainsRequest() ) @@ -439,7 +446,7 @@ func (me *CssService) DescribeCssDomainsByFilter(ctx context.Context, param map[ } func (me *CssService) DescribeCssPlayDomainCertAttachmentById(ctx context.Context, domainName string, cloudCertId string) (playDomainCertAttachment *css.LiveDomainCertBindings, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLiveDomainCertBindingsRequest() request.DomainName = &domainName @@ -491,7 +498,7 @@ func (me *CssService) DescribeCssPlayDomainCertAttachmentById(ctx context.Contex } func (me *CssService) DeleteCssPlayDomainCertAttachmentById(ctx context.Context, domainName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewUnBindLiveDomainCertRequest() request.DomainName = &domainName @@ -515,7 +522,7 @@ func (me *CssService) DeleteCssPlayDomainCertAttachmentById(ctx context.Context, } func (me *CssService) DescribeCssPlayAuthKeyConfigById(ctx context.Context, domainName string) (playAuthKeyConfig *css.PlayAuthKeyInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLivePlayAuthKeyRequest() request.DomainName = &domainName @@ -544,7 +551,7 @@ func (me *CssService) DescribeCssPlayAuthKeyConfigById(ctx context.Context, doma } func (me *CssService) DescribeCssPushAuthKeyConfigById(ctx context.Context, domainName string) (pushAuthKeyConfig *css.PushAuthKeyInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLivePushAuthKeyRequest() request.DomainName = &domainName @@ -574,7 +581,7 @@ func (me *CssService) DescribeCssPushAuthKeyConfigById(ctx context.Context, doma func (me *CssService) DescribeCssWatermarkRuleAttachment(ctx context.Context, domainName, appName, streamName, watermarkId string) (watermarkRuleAttachment *css.RuleInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeLiveWatermarkRulesRequest() ) @@ -613,7 +620,7 @@ func (me *CssService) DescribeCssWatermarkRuleAttachment(ctx context.Context, do } func (me *CssService) DetachCssWatermarkRuleAttachment(ctx context.Context, domainName, appName, streamName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLiveWatermarkRuleRequest() @@ -642,7 +649,7 @@ func (me *CssService) DetachCssWatermarkRuleAttachment(ctx context.Context, doma func (me *CssService) DescribeCssBackupStreamByFilter(ctx context.Context, param map[string]interface{}) (backupStream []*css.BackupStreamGroupInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeBackupStreamListRequest() ) @@ -676,7 +683,7 @@ func (me *CssService) DescribeCssBackupStreamByFilter(ctx context.Context, param } func (me *CssService) DescribeCssBackupStreamById(ctx context.Context, pushDomainName string, appName string, streamName string) (backupStream *css.BackupStreamDetailData, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeBackupStreamListRequest() request.StreamName = &streamName @@ -710,7 +717,7 @@ func (me *CssService) DescribeCssBackupStreamById(ctx context.Context, pushDomai } func (me *CssService) DescribeCssBackupStreamByStreamName(ctx context.Context, streamName string) (backupStream *css.BackupStreamGroupInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeBackupStreamListRequest() request.StreamName = &streamName @@ -741,7 +748,7 @@ func (me *CssService) DescribeCssBackupStreamByStreamName(ctx context.Context, s func (me *CssService) DescribeCssWatermarksByFilter(ctx context.Context, param map[string]interface{}) (watermarks []*css.WatermarkInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeLiveWatermarksRequest() ) @@ -771,7 +778,7 @@ func (me *CssService) DescribeCssWatermarksByFilter(ctx context.Context, param m func (me *CssService) DescribeCssDeliverLogDownListByFilter(ctx context.Context, param map[string]interface{}) (deliverLogDownList []*css.PushLogInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeDeliverLogDownListRequest() ) @@ -800,7 +807,7 @@ func (me *CssService) DescribeCssDeliverLogDownListByFilter(ctx context.Context, func (me *CssService) DescribeCssStreamMonitorListByFilter(ctx context.Context, param map[string]interface{}) (streamMonitorList []*css.LiveStreamMonitorInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeLiveStreamMonitorListRequest() ) @@ -842,7 +849,7 @@ func (me *CssService) DescribeCssStreamMonitorListByFilter(ctx context.Context, func (me *CssService) DescribeCssXp2pDetailInfoListByFilter(ctx context.Context, param map[string]interface{}) (xp2pDetailInfoList []*css.XP2PDetailInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeLiveXP2PDetailInfoListRequest() ) @@ -887,7 +894,7 @@ func (me *CssService) DescribeCssXp2pDetailInfoListByFilter(ctx context.Context, func (me *CssService) DescribeCssMonitorReportByFilter(ctx context.Context, param map[string]interface{}) (monitorReport *css.DescribeMonitorReportResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeMonitorReportRequest() ) @@ -923,7 +930,7 @@ func (me *CssService) DescribeCssMonitorReportByFilter(ctx context.Context, para func (me *CssService) DescribeCssPadTemplatesByFilter(ctx context.Context, param map[string]interface{}) (padTemplates []*css.PadTemplate, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeLivePadTemplatesRequest() ) @@ -953,7 +960,7 @@ func (me *CssService) DescribeCssPadTemplatesByFilter(ctx context.Context, param func (me *CssService) DescribeCssPullStreamTaskStatusByFilter(ctx context.Context, param map[string]interface{}) (pullStreamTaskStatus *css.TaskStatusInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeLivePullStreamTaskStatusRequest() ) @@ -989,7 +996,7 @@ func (me *CssService) DescribeCssPullStreamTaskStatusByFilter(ctx context.Contex func (me *CssService) DescribeCssTimeShiftRecordDetailByFilter(ctx context.Context, param map[string]interface{}) (timeShiftRecordDetail []*css.TimeShiftRecord, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeTimeShiftRecordDetailRequest() ) @@ -1043,7 +1050,7 @@ func (me *CssService) DescribeCssTimeShiftRecordDetailByFilter(ctx context.Conte func (me *CssService) DescribeCssTimeShiftStreamListByFilter(ctx context.Context, param map[string]interface{}) (timeShiftStreamList []*css.TimeShiftStreamInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = css.NewDescribeTimeShiftStreamListRequest() ) @@ -1090,7 +1097,7 @@ func (me *CssService) DescribeCssTimeShiftStreamListByFilter(ctx context.Context } func (me *CssService) DescribeCssCallbackRuleById(ctx context.Context, templateId int64, domainName string) (callbackRule *css.CallBackRuleInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLiveCallbackRulesRequest() @@ -1124,7 +1131,7 @@ func (me *CssService) DescribeCssCallbackRuleById(ctx context.Context, templateI } func (me *CssService) DeleteCssCallbackRuleById(ctx context.Context, domainName string, appName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLiveCallbackRuleRequest() request.DomainName = &domainName @@ -1149,7 +1156,7 @@ func (me *CssService) DeleteCssCallbackRuleById(ctx context.Context, domainName } func (me *CssService) DescribeCssCallbackTemplateById(ctx context.Context, templateId int64) (callbackTemplate *css.CallBackTemplateInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLiveCallbackTemplateRequest() request.TemplateId = &templateId @@ -1179,7 +1186,7 @@ func (me *CssService) DescribeCssCallbackTemplateById(ctx context.Context, templ } func (me *CssService) DeleteCssCallbackTemplateById(ctx context.Context, templateId int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLiveCallbackTemplateRequest() request.TemplateId = &templateId @@ -1203,7 +1210,7 @@ func (me *CssService) DeleteCssCallbackTemplateById(ctx context.Context, templat } func (me *CssService) DescribeCssDomainCertById(ctx context.Context, domainName string) (domainCert *css.DomainCertInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLiveDomainCertRequest() request.DomainName = &domainName @@ -1233,7 +1240,7 @@ func (me *CssService) DescribeCssDomainCertById(ctx context.Context, domainName } func (me *CssService) DescribeCssDomainCertBindingsById(ctx context.Context, domainName string) (domainCertBindings *css.LiveDomainCertBindings, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLiveDomainCertBindingsRequest() request.DomainName = &domainName @@ -1263,7 +1270,7 @@ func (me *CssService) DescribeCssDomainCertBindingsById(ctx context.Context, dom } func (me *CssService) DescribeCssDomainRefererById(ctx context.Context, domainName string) (domainReferer *css.RefererAuthConfig, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLiveDomainRefererRequest() request.DomainName = &domainName @@ -1292,7 +1299,7 @@ func (me *CssService) DescribeCssDomainRefererById(ctx context.Context, domainNa } func (me *CssService) DescribeCssRecordRuleById(ctx context.Context, templateId int64, domainName string) (recordRule *css.RuleInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLiveRecordRulesRequest() @@ -1326,7 +1333,7 @@ func (me *CssService) DescribeCssRecordRuleById(ctx context.Context, templateId } func (me *CssService) DeleteCssRecordRuleById(ctx context.Context, domainName, appName, streamName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLiveRecordRuleRequest() request.DomainName = &domainName @@ -1352,7 +1359,7 @@ func (me *CssService) DeleteCssRecordRuleById(ctx context.Context, domainName, a } func (me *CssService) DescribeCssRecordTemplateById(ctx context.Context, templateId int64) (recordTemplate *css.RecordTemplateInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLiveRecordTemplateRequest() request.TemplateId = &templateId @@ -1382,7 +1389,7 @@ func (me *CssService) DescribeCssRecordTemplateById(ctx context.Context, templat } func (me *CssService) DeleteCssRecordTemplateById(ctx context.Context, templateId int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLiveRecordTemplateRequest() request.TemplateId = &templateId @@ -1406,7 +1413,7 @@ func (me *CssService) DeleteCssRecordTemplateById(ctx context.Context, templateI } func (me *CssService) DescribeCssSnapshotRuleById(ctx context.Context, templateId int64, domainName string) (snapshotRule *css.RuleInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLiveSnapshotRulesRequest() @@ -1440,7 +1447,7 @@ func (me *CssService) DescribeCssSnapshotRuleById(ctx context.Context, templateI } func (me *CssService) DeleteCssSnapshotRuleById(ctx context.Context, domainName, appName, streamName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLiveSnapshotRuleRequest() request.DomainName = &domainName @@ -1466,7 +1473,7 @@ func (me *CssService) DeleteCssSnapshotRuleById(ctx context.Context, domainName, } func (me *CssService) DescribeCssSnapshotTemplateById(ctx context.Context, templateId int64) (snapshotTemplate *css.SnapshotTemplateInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLiveSnapshotTemplateRequest() request.TemplateId = &templateId @@ -1496,7 +1503,7 @@ func (me *CssService) DescribeCssSnapshotTemplateById(ctx context.Context, templ } func (me *CssService) DeleteCssSnapshotTemplateById(ctx context.Context, templateId int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLiveSnapshotTemplateRequest() request.TemplateId = &templateId @@ -1520,7 +1527,7 @@ func (me *CssService) DeleteCssSnapshotTemplateById(ctx context.Context, templat } func (me *CssService) DescribeCssPadRuleAttachmentById(ctx context.Context, templateId int64, domainName string) (padRuleAttachment *css.RuleInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLivePadRulesRequest() @@ -1554,7 +1561,7 @@ func (me *CssService) DescribeCssPadRuleAttachmentById(ctx context.Context, temp } func (me *CssService) DeleteCssPadRuleAttachmentById(ctx context.Context, domainName, appName, streamName string, templateId int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLivePadRuleRequest() request.DomainName = &domainName @@ -1582,7 +1589,7 @@ func (me *CssService) DeleteCssPadRuleAttachmentById(ctx context.Context, domain } func (me *CssService) DescribeCssPadTemplateById(ctx context.Context, templateId int64) (padTemplate *css.PadTemplate, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLivePadTemplateRequest() templateIdUint := uint64(templateId) @@ -1612,7 +1619,7 @@ func (me *CssService) DescribeCssPadTemplateById(ctx context.Context, templateId } func (me *CssService) DeleteCssPadTemplateById(ctx context.Context, templateId int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLivePadTemplateRequest() request.TemplateId = &templateId @@ -1636,7 +1643,7 @@ func (me *CssService) DeleteCssPadTemplateById(ctx context.Context, templateId i } func (me *CssService) DescribeCssStreamMonitorById(ctx context.Context, monitorId string) (streamMonitor *css.LiveStreamMonitorInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLiveStreamMonitorRequest() request.MonitorId = &monitorId @@ -1666,7 +1673,7 @@ func (me *CssService) DescribeCssStreamMonitorById(ctx context.Context, monitorI } func (me *CssService) DeleteCssStreamMonitorById(ctx context.Context, monitorId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLiveStreamMonitorRequest() request.MonitorId = &monitorId @@ -1690,7 +1697,7 @@ func (me *CssService) DeleteCssStreamMonitorById(ctx context.Context, monitorId } func (me *CssService) DescribeCssTimeshiftRuleAttachmentById(ctx context.Context, templateId int64, domainName string) (timeshiftRuleAttachment *css.RuleInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLiveTimeShiftRulesRequest() @@ -1724,7 +1731,7 @@ func (me *CssService) DescribeCssTimeshiftRuleAttachmentById(ctx context.Context } func (me *CssService) DeleteCssTimeshiftRuleAttachmentById(ctx context.Context, domainName string, appName string, streamName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLiveTimeShiftRuleRequest() request.DomainName = &domainName @@ -1750,7 +1757,7 @@ func (me *CssService) DeleteCssTimeshiftRuleAttachmentById(ctx context.Context, } func (me *CssService) DescribeCssTimeshiftTemplateById(ctx context.Context, templateId int64) (timeshiftTemplate *css.TimeShiftTemplate, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDescribeLiveTimeShiftTemplatesRequest() @@ -1784,7 +1791,7 @@ func (me *CssService) DescribeCssTimeshiftTemplateById(ctx context.Context, temp } func (me *CssService) DeleteCssTimeshiftTemplateById(ctx context.Context, templateId int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewDeleteLiveTimeShiftTemplateRequest() request.TemplateId = &templateId @@ -1809,7 +1816,7 @@ func (me *CssService) DeleteCssTimeshiftTemplateById(ctx context.Context, templa func (me *CssService) CssRestartPushTaskStateRefreshFunc(taskId string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { - ctx := contextNil + ctx := tccommon.ContextNil paramMap := make(map[string]interface{}) paramMap["TaskId"] = helper.String(taskId) @@ -1825,7 +1832,7 @@ func (me *CssService) CssRestartPushTaskStateRefreshFunc(taskId string, failStat } func (me *CssService) DeleteCssStartStreamMonitorById(ctx context.Context, monitorId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := css.NewStopLiveStreamMonitorRequest() request.MonitorId = &monitorId @@ -1850,7 +1857,7 @@ func (me *CssService) DeleteCssStartStreamMonitorById(ctx context.Context, monit func (me *CssService) CssStartStreamMonitorStateRefreshFunc(monitorId string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { - ctx := contextNil + ctx := tccommon.ContextNil object, err := me.DescribeCssStreamMonitorById(ctx, monitorId) From e90d3765ff6fdf4351a0ea706a29da1c5bb1d03b Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 15:14:51 +0800 Subject: [PATCH 24/31] refactor: migrate package tencentcloud/services/cwp --- tencentcloud/provider.go | 7 +- .../data_source_tc_cwp_machines_simple.go | 23 +- ...data_source_tc_cwp_machines_simple_test.go | 10 +- tencentcloud/services/cwp/extension_cwp.go | 23 + tencentcloud/services/cwp/extension_tags.go | 3 + ...resource_tc_cwp_license_bind_attachment.go | 53 +-- ...rce_tc_cwp_license_bind_attachment_test.go | 8 +- .../cwp}/resource_tc_cwp_license_order.go | 83 ++-- .../resource_tc_cwp_license_order_test.go | 8 +- .../cwp}/service_tencentcloud_cwp.go | 15 +- .../services/cwp/service_tencentcloud_tag.go | 415 ++++++++++++++++++ 11 files changed, 554 insertions(+), 94 deletions(-) rename tencentcloud/{ => services/cwp}/data_source_tc_cwp_machines_simple.go (95%) rename tencentcloud/{ => services/cwp}/data_source_tc_cwp_machines_simple_test.go (76%) create mode 100644 tencentcloud/services/cwp/extension_cwp.go create mode 100644 tencentcloud/services/cwp/extension_tags.go rename tencentcloud/{ => services/cwp}/resource_tc_cwp_license_bind_attachment.go (79%) rename tencentcloud/{ => services/cwp}/resource_tc_cwp_license_bind_attachment_test.go (90%) rename tencentcloud/{ => services/cwp}/resource_tc_cwp_license_order.go (73%) rename tencentcloud/{ => services/cwp}/resource_tc_cwp_license_order_test.go (92%) rename tencentcloud/{ => services/cwp}/service_tencentcloud_cwp.go (95%) create mode 100644 tencentcloud/services/cwp/service_tencentcloud_tag.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index a2505a3180..a4989b95de 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cwp" "encoding/json" "fmt" "io/ioutil" @@ -872,7 +873,7 @@ func Provider() *schema.Provider { "tencentcloud_cfw_nat_fw_switches": cfw.DataSourceTencentCloudCfwNatFwSwitches(), "tencentcloud_cfw_vpc_fw_switches": cfw.DataSourceTencentCloudCfwVpcFwSwitches(), "tencentcloud_cfw_edge_fw_switches": cfw.DataSourceTencentCloudCfwEdgeFwSwitches(), - "tencentcloud_cwp_machines_simple": dataSourceTencentCloudCwpMachinesSimple(), + "tencentcloud_cwp_machines_simple": cwp.DataSourceTencentCloudCwpMachinesSimple(), "tencentcloud_ses_receivers": dataSourceTencentCloudSesReceivers(), "tencentcloud_ses_send_tasks": dataSourceTencentCloudSesSendTasks(), "tencentcloud_ses_email_identities": dataSourceTencentCloudSesEmailIdentities(), @@ -1856,8 +1857,8 @@ func Provider() *schema.Provider { "tencentcloud_ssl_deploy_certificate_record_retry_operation": resourceTencentCloudSslDeployCertificateRecordRetryOperation(), "tencentcloud_ssl_deploy_certificate_record_rollback_operation": resourceTencentCloudSslDeployCertificateRecordRollbackOperation(), "tencentcloud_ssl_download_certificate_operation": resourceTencentCloudSslDownloadCertificateOperation(), - "tencentcloud_cwp_license_order": resourceTencentCloudCwpLicenseOrder(), - "tencentcloud_cwp_license_bind_attachment": resourceTencentCloudCwpLicenseBindAttachment(), + "tencentcloud_cwp_license_order": cwp.ResourceTencentCloudCwpLicenseOrder(), + "tencentcloud_cwp_license_bind_attachment": cwp.ResourceTencentCloudCwpLicenseBindAttachment(), "tencentcloud_ssl_replace_certificate_operation": resourceTencentCloudSslReplaceCertificateOperation(), "tencentcloud_ssl_revoke_certificate_operation": resourceTencentCloudSslRevokeCertificateOperation(), "tencentcloud_ssl_update_certificate_instance_operation": resourceTencentCloudSslUpdateCertificateInstanceOperation(), diff --git a/tencentcloud/data_source_tc_cwp_machines_simple.go b/tencentcloud/services/cwp/data_source_tc_cwp_machines_simple.go similarity index 95% rename from tencentcloud/data_source_tc_cwp_machines_simple.go rename to tencentcloud/services/cwp/data_source_tc_cwp_machines_simple.go index ba119305fc..e7231cdbd9 100644 --- a/tencentcloud/data_source_tc_cwp_machines_simple.go +++ b/tencentcloud/services/cwp/data_source_tc_cwp_machines_simple.go @@ -1,15 +1,18 @@ -package tencentcloud +package cwp import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cwp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp/v20180228" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCwpMachinesSimple() *schema.Resource { +func DataSourceTencentCloudCwpMachinesSimple() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCwpMachinesSimpleRead, Schema: map[string]*schema.Schema{ @@ -254,13 +257,13 @@ func dataSourceTencentCloudCwpMachinesSimple() *schema.Resource { } func dataSourceTencentCloudCwpMachinesSimpleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cwp_machines_simple.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cwp_machines_simple.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CwpService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CwpService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} machines []*cwp.MachineSimple ) @@ -305,10 +308,10 @@ func dataSourceTencentCloudCwpMachinesSimpleRead(d *schema.ResourceData, meta in paramMap["ProjectIds"] = helper.InterfacesIntUInt64Point(projectIdsSet) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCwpMachinesSimpleByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } machines = result @@ -486,7 +489,7 @@ func dataSourceTencentCloudCwpMachinesSimpleRead(d *schema.ResourceData, meta in d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cwp_machines_simple_test.go b/tencentcloud/services/cwp/data_source_tc_cwp_machines_simple_test.go similarity index 76% rename from tencentcloud/data_source_tc_cwp_machines_simple_test.go rename to tencentcloud/services/cwp/data_source_tc_cwp_machines_simple_test.go index a908037762..e7ccfa536f 100644 --- a/tencentcloud/data_source_tc_cwp_machines_simple_test.go +++ b/tencentcloud/services/cwp/data_source_tc_cwp_machines_simple_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cwp_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudNeedFixCwpMachinesSimpleDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCwpMachinesSimpleDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cwp_machines_simple.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cwp_machines_simple.example"), resource.TestCheckResourceAttrSet("data.tencentcloud_cwp_machines_simple.example", "machine_type"), resource.TestCheckResourceAttrSet("data.tencentcloud_cwp_machines_simple.example", "machine_region"), ), diff --git a/tencentcloud/services/cwp/extension_cwp.go b/tencentcloud/services/cwp/extension_cwp.go new file mode 100644 index 0000000000..762a0ca31d --- /dev/null +++ b/tencentcloud/services/cwp/extension_cwp.go @@ -0,0 +1,23 @@ +package cwp + +const ( + LICENSE_TYPE_0 = 0 + LICENSE_TYPE_1 = 1 + LICENSE_TYPE_2 = 2 +) + +var LICENSE_TYPE = []int{ + LICENSE_TYPE_0, + LICENSE_TYPE_1, + LICENSE_TYPE_2, +} + +const ( + REGION_ID_1 = 1 + REGION_ID_9 = 9 +) + +var REGION_ID = []int{ + REGION_ID_1, + REGION_ID_9, +} diff --git a/tencentcloud/services/cwp/extension_tags.go b/tencentcloud/services/cwp/extension_tags.go new file mode 100644 index 0000000000..07c0ac2c5d --- /dev/null +++ b/tencentcloud/services/cwp/extension_tags.go @@ -0,0 +1,3 @@ +package cwp + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/resource_tc_cwp_license_bind_attachment.go b/tencentcloud/services/cwp/resource_tc_cwp_license_bind_attachment.go similarity index 79% rename from tencentcloud/resource_tc_cwp_license_bind_attachment.go rename to tencentcloud/services/cwp/resource_tc_cwp_license_bind_attachment.go index 35cb88e52c..06188cc01c 100644 --- a/tencentcloud/resource_tc_cwp_license_bind_attachment.go +++ b/tencentcloud/services/cwp/resource_tc_cwp_license_bind_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package cwp import ( "context" @@ -7,13 +7,16 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cwp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp/v20180228" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCwpLicenseBindAttachment() *schema.Resource { +func ResourceTencentCloudCwpLicenseBindAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCwpLicenseBindAttachmentCreate, Read: resourceTencentCloudCwpLicenseBindAttachmentRead, @@ -38,7 +41,7 @@ func resourceTencentCloudCwpLicenseBindAttachment() *schema.Resource { Required: true, ForceNew: true, Type: schema.TypeInt, - ValidateFunc: validateAllowedIntValue(LICENSE_TYPE), + ValidateFunc: tccommon.ValidateAllowedIntValue(LICENSE_TYPE), Description: "LicenseType, 0 CWP Pro - Pay as you go, 1 CWP Pro - Monthly subscription, 2 CWP Ultimate - Monthly subscription. Default is 0.", }, "quuid": { @@ -87,11 +90,11 @@ func resourceTencentCloudCwpLicenseBindAttachment() *schema.Resource { } func resourceTencentCloudCwpLicenseBindAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cwp_license_bind_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cwp_license_bind_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cwp.NewModifyLicenseBindsRequest() response = cwp.NewModifyLicenseBindsResponse() taskRequest = cwp.NewDescribeLicenseBindScheduleRequest() @@ -122,10 +125,10 @@ func resourceTencentCloudCwpLicenseBindAttachmentCreate(d *schema.ResourceData, request.QuuidList = append(request.QuuidList, &quuid) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCwpClient().ModifyLicenseBinds(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCwpClient().ModifyLicenseBinds(request) if e != nil { - return retryError(e) + 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()) } @@ -144,14 +147,14 @@ func resourceTencentCloudCwpLicenseBindAttachmentCreate(d *schema.ResourceData, return err } - d.SetId(strings.Join([]string{resourceId, licenseId, quuid, licenseType}, FILED_SP)) + d.SetId(strings.Join([]string{resourceId, licenseId, quuid, licenseType}, tccommon.FILED_SP)) // wait taskRequest.TaskId = response.Response.TaskId - err = resource.Retry(writeRetryTimeout*6, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCwpClient().DescribeLicenseBindSchedule(taskRequest) + err = resource.Retry(tccommon.WriteRetryTimeout*6, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCwpClient().DescribeLicenseBindSchedule(taskRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result == nil { @@ -175,16 +178,16 @@ func resourceTencentCloudCwpLicenseBindAttachmentCreate(d *schema.ResourceData, } func resourceTencentCloudCwpLicenseBindAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cwp_license_bind_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cwp_license_bind_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CwpService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CwpService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -244,16 +247,16 @@ func resourceTencentCloudCwpLicenseBindAttachmentRead(d *schema.ResourceData, me } func resourceTencentCloudCwpLicenseBindAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cwp_license_bind_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cwp_license_bind_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CwpService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CwpService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("id is broken,%s", idSplit) } diff --git a/tencentcloud/resource_tc_cwp_license_bind_attachment_test.go b/tencentcloud/services/cwp/resource_tc_cwp_license_bind_attachment_test.go similarity index 90% rename from tencentcloud/resource_tc_cwp_license_bind_attachment_test.go rename to tencentcloud/services/cwp/resource_tc_cwp_license_bind_attachment_test.go index 3b352823d3..dbd620c3a4 100644 --- a/tencentcloud/resource_tc_cwp_license_bind_attachment_test.go +++ b/tencentcloud/services/cwp/resource_tc_cwp_license_bind_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cwp_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCwpLicenseBindAttachmentResource_basic(t *testing t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCwpLicenseBindAttachment, diff --git a/tencentcloud/resource_tc_cwp_license_order.go b/tencentcloud/services/cwp/resource_tc_cwp_license_order.go similarity index 73% rename from tencentcloud/resource_tc_cwp_license_order.go rename to tencentcloud/services/cwp/resource_tc_cwp_license_order.go index f46e2b6823..d711c3f0f6 100644 --- a/tencentcloud/resource_tc_cwp_license_order.go +++ b/tencentcloud/services/cwp/resource_tc_cwp_license_order.go @@ -1,4 +1,4 @@ -package tencentcloud +package cwp import ( "context" @@ -7,13 +7,16 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cwp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp/v20180228" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCwpLicenseOrder() *schema.Resource { +func ResourceTencentCloudCwpLicenseOrder() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCwpLicenseOrderCreate, Read: resourceTencentCloudCwpLicenseOrderRead, @@ -33,7 +36,7 @@ func resourceTencentCloudCwpLicenseOrder() *schema.Resource { Optional: true, Type: schema.TypeInt, Default: LICENSE_TYPE_0, - ValidateFunc: validateAllowedIntValue(LICENSE_TYPE), + ValidateFunc: tccommon.ValidateAllowedIntValue(LICENSE_TYPE), Description: "LicenseType, 0 CWP Pro - Pay as you go, 1 CWP Pro - Monthly subscription, 2 CWP Ultimate - Monthly subscription. Default is 0.", }, "license_num": { @@ -46,7 +49,7 @@ func resourceTencentCloudCwpLicenseOrder() *schema.Resource { Optional: true, Type: schema.TypeInt, Default: REGION_ID_1, - ValidateFunc: validateAllowedIntValue(REGION_ID), + ValidateFunc: tccommon.ValidateAllowedIntValue(REGION_ID), Description: "Purchase order region, only 1 Guangzhou, 9 Singapore is supported here. Guangzhou is recommended. Singapore is whitelisted. Default is 1.", }, "project_id": { @@ -75,12 +78,12 @@ func resourceTencentCloudCwpLicenseOrder() *schema.Resource { } func resourceTencentCloudCwpLicenseOrderCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cwp_license_order.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cwp_license_order.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request = cwp.NewCreateLicenseOrderRequest() response = cwp.NewCreateLicenseOrderResponse() resourceId string @@ -106,10 +109,10 @@ func resourceTencentCloudCwpLicenseOrderCreate(d *schema.ResourceData, meta inte request.ProjectId = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCwpClient().CreateLicenseOrder(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCwpClient().CreateLicenseOrder(request) if e != nil { - return retryError(e) + 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()) } @@ -130,11 +133,11 @@ func resourceTencentCloudCwpLicenseOrderCreate(d *schema.ResourceData, meta inte resourceId = *response.Response.ResourceIds[0] regionId := strconv.Itoa(regionIdInt) - d.SetId(strings.Join([]string{resourceId, regionId}, FILED_SP)) + d.SetId(strings.Join([]string{resourceId, regionId}, tccommon.FILED_SP)) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - //region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + //region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::cwp::uin/:order/%s", resourceId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -148,10 +151,10 @@ func resourceTencentCloudCwpLicenseOrderCreate(d *schema.ResourceData, meta inte aliasRequest.ResourceId = &resourceId aliasRequest.InquireNum = licenseNum - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCwpClient().ModifyLicenseOrder(aliasRequest) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCwpClient().ModifyLicenseOrder(aliasRequest) if e != nil { - return retryError(e) + 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()) } @@ -169,16 +172,16 @@ func resourceTencentCloudCwpLicenseOrderCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudCwpLicenseOrderRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cwp_license_order.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cwp_license_order.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CwpService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CwpService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -223,7 +226,7 @@ func resourceTencentCloudCwpLicenseOrderRead(d *schema.ResourceData, meta interf _ = d.Set("project_id", licenseOrder.ProjectId) } - tagService := &TagService{client: meta.(*TencentCloudClient).apiV3Conn} + tagService := &TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} tags, err := tagService.DescribeResourceTags(ctx, "cwp", "order", "", resourceId) if err != nil { return err @@ -235,12 +238,12 @@ func resourceTencentCloudCwpLicenseOrderRead(d *schema.ResourceData, meta interf } func resourceTencentCloudCwpLicenseOrderUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cwp_license_order.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cwp_license_order.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request = cwp.NewModifyLicenseOrderRequest() ) @@ -252,7 +255,7 @@ func resourceTencentCloudCwpLicenseOrderUpdate(d *schema.ResourceData, meta inte } } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -272,10 +275,10 @@ func resourceTencentCloudCwpLicenseOrderUpdate(d *schema.ResourceData, meta inte request.ProjectId = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCwpClient().ModifyLicenseOrder(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCwpClient().ModifyLicenseOrder(request) if e != nil { - return retryError(e) + 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()) } @@ -289,10 +292,10 @@ func resourceTencentCloudCwpLicenseOrderUpdate(d *schema.ResourceData, meta inte } if d.HasChange("tags") { - tagService := &TagService{client: meta.(*TencentCloudClient).apiV3Conn} + tagService := &TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("cwp", "order", "", resourceId) + resourceName := tccommon.BuildTagResourceName("cwp", "order", "", resourceId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -302,17 +305,17 @@ func resourceTencentCloudCwpLicenseOrderUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudCwpLicenseOrderDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cwp_license_order.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cwp_license_order.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CwpService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CwpService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} licenseType *uint64 ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } diff --git a/tencentcloud/resource_tc_cwp_license_order_test.go b/tencentcloud/services/cwp/resource_tc_cwp_license_order_test.go similarity index 92% rename from tencentcloud/resource_tc_cwp_license_order_test.go rename to tencentcloud/services/cwp/resource_tc_cwp_license_order_test.go index 7a1ea2a8c6..e82dfdb26f 100644 --- a/tencentcloud/resource_tc_cwp_license_order_test.go +++ b/tencentcloud/services/cwp/resource_tc_cwp_license_order_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cwp_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCwpLicenseOrderResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCwpLicenseOrder, diff --git a/tencentcloud/service_tencentcloud_cwp.go b/tencentcloud/services/cwp/service_tencentcloud_cwp.go similarity index 95% rename from tencentcloud/service_tencentcloud_cwp.go rename to tencentcloud/services/cwp/service_tencentcloud_cwp.go index 6a6cbd98f0..ab8c1a7d16 100644 --- a/tencentcloud/service_tencentcloud_cwp.go +++ b/tencentcloud/services/cwp/service_tencentcloud_cwp.go @@ -1,12 +1,15 @@ -package tencentcloud +package cwp import ( "context" "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" cwp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp/v20180228" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) @@ -16,7 +19,7 @@ type CwpService struct { } func (me *CwpService) DescribeCwpLicenseOrderById(ctx context.Context, resourceId string) (licenseOrder *cwp.LicenseDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cwp.NewDescribeLicenseListRequest() request.Filters = []*cwp.Filters{ @@ -52,7 +55,7 @@ func (me *CwpService) DescribeCwpLicenseOrderById(ctx context.Context, resourceI } func (me *CwpService) DeleteCwpLicenseOrderById(ctx context.Context, resourceId string, licenseType *uint64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cwp.NewDestroyOrderRequest() request.ResourceId = &resourceId @@ -78,7 +81,7 @@ func (me *CwpService) DeleteCwpLicenseOrderById(ctx context.Context, resourceId } func (me *CwpService) DescribeCwpLicenseBindAttachmentById(ctx context.Context, resourceId, quuid string, licenseId, licenseType uint64) (licenseBindAttachment *cwp.LicenseBindDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cwp.NewDescribeLicenseBindListRequest() request.ResourceId = &resourceId @@ -116,7 +119,7 @@ func (me *CwpService) DescribeCwpLicenseBindAttachmentById(ctx context.Context, } func (me *CwpService) DeleteCwpLicenseBindAttachmentById(ctx context.Context, resourceId, quuid, licenseType string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) licenseTypeInt, _ := strconv.ParseUint(licenseType, 10, 64) @@ -146,7 +149,7 @@ func (me *CwpService) DeleteCwpLicenseBindAttachmentById(ctx context.Context, re func (me *CwpService) DescribeCwpMachinesSimpleByFilter(ctx context.Context, param map[string]interface{}) (machinesSimple []*cwp.MachineSimple, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cwp.NewDescribeMachinesSimpleRequest() ) diff --git a/tencentcloud/services/cwp/service_tencentcloud_tag.go b/tencentcloud/services/cwp/service_tencentcloud_tag.go new file mode 100644 index 0000000000..d440beee48 --- /dev/null +++ b/tencentcloud/services/cwp/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package cwp + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 6278d4b8321e12232e9571a167f068f0f990f9c2 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 15:42:47 +0800 Subject: [PATCH 25/31] refactor: migrate package tencentcloud/services/cvm --- tencentcloud/provider.go | 90 +- .../data_source_tc_cvm_chc_denied_actions.go | 23 +- ...a_source_tc_cvm_chc_denied_actions_test.go | 10 +- .../cvm}/data_source_tc_cvm_chc_hosts.go | 23 +- .../cvm}/data_source_tc_cvm_chc_hosts_test.go | 10 +- ...rce_tc_cvm_disaster_recover_group_quota.go | 19 +- ...c_cvm_disaster_recover_group_quota_test.go | 10 +- .../cvm}/data_source_tc_cvm_image_quota.go | 23 +- .../data_source_tc_cvm_image_quota_test.go | 10 +- ...ta_source_tc_cvm_image_share_permission.go | 23 +- ...urce_tc_cvm_image_share_permission_test.go | 10 +- .../data_source_tc_cvm_import_image_os.go | 19 +- ...data_source_tc_cvm_import_image_os_test.go | 10 +- .../data_source_tc_cvm_instance_vnc_url.go | 19 +- ...ata_source_tc_cvm_instance_vnc_url_test.go | 12 +- ...ta_source_tc_cvm_instances_modification.go | 19 +- ...urce_tc_cvm_instances_modification_test.go | 12 +- .../{ => services/cvm}/data_source_tc_eip.go | 18 +- .../cvm}/data_source_tc_eip_address_quota.go | 23 +- .../data_source_tc_eip_address_quota_test.go | 10 +- ...data_source_tc_eip_network_account_type.go | 22 +- ...source_tc_eip_network_account_type_test.go | 10 +- .../cvm}/data_source_tc_eip_test.go | 12 +- .../{ => services/cvm}/data_source_tc_eips.go | 21 +- .../cvm}/data_source_tc_eips_test.go | 12 +- .../cvm}/data_source_tc_image.go | 25 +- .../cvm}/data_source_tc_image_test.go | 16 +- .../cvm}/data_source_tc_images.go | 27 +- .../cvm}/data_source_tc_images_test.go | 18 +- .../cvm}/data_source_tc_instance_types.go | 21 +- .../data_source_tc_instance_types_test.go | 12 +- .../cvm}/data_source_tc_instances.go | 23 +- .../cvm}/data_source_tc_instances_set.go | 19 +- .../cvm}/data_source_tc_instances_test.go | 12 +- .../cvm}/data_source_tc_key_pairs.go | 21 +- .../cvm}/data_source_tc_key_pairs_test.go | 8 +- .../cvm}/data_source_tc_placement_groups.go | 21 +- .../data_source_tc_placement_groups_test.go | 8 +- ...ata_source_tc_reserved_instance_configs.go | 25 +- ...ource_tc_reserved_instance_configs_test.go | 8 +- .../cvm}/data_source_tc_reserved_instances.go | 21 +- .../data_source_tc_reserved_instances_test.go | 8 +- .../{ => services/cvm}/extension_cbs.go | 2 +- tencentcloud/services/cvm/extension_cvm.go | 118 + tencentcloud/services/cvm/extension_images.go | 6 + .../services/cvm/extension_security_group.go | 3 + tencentcloud/services/cvm/extension_tags.go | 3 + tencentcloud/services/cvm/extension_vpc.go | 327 + .../cvm}/resource_tc_cvm_chc_config.go | 103 +- .../cvm}/resource_tc_cvm_chc_config_test.go | 8 +- .../cvm}/resource_tc_cvm_export_images.go | 31 +- .../resource_tc_cvm_export_images_test.go | 8 +- .../cvm}/resource_tc_cvm_hpc_cluster.go | 51 +- .../cvm}/resource_tc_cvm_hpc_cluster_test.go | 10 +- .../resource_tc_cvm_image_share_permission.go | 57 +- ...urce_tc_cvm_image_share_permission_test.go | 8 +- .../cvm}/resource_tc_cvm_launch_template.go | 39 +- ..._tc_cvm_launch_template_default_version.go | 48 +- ...vm_launch_template_default_version_test.go | 8 +- .../resource_tc_cvm_launch_template_test.go | 8 +- ...resource_tc_cvm_launch_template_version.go | 45 +- ...rce_tc_cvm_launch_template_version_test.go | 8 +- .../cvm}/resource_tc_cvm_reboot_instance.go | 27 +- .../resource_tc_cvm_reboot_instance_test.go | 10 +- .../cvm}/resource_tc_cvm_renew_instance.go | 27 +- .../resource_tc_cvm_renew_instance_test.go | 8 +- ...source_tc_cvm_security_group_attachment.go | 46 +- ...e_tc_cvm_security_group_attachment_test.go | 8 +- .../cvm}/resource_tc_cvm_sync_image.go | 31 +- .../cvm}/resource_tc_cvm_sync_image_test.go | 27 +- .../{ => services/cvm}/resource_tc_eip.go | 81 +- .../cvm}/resource_tc_eip_address_transform.go | 31 +- .../resource_tc_eip_address_transform_test.go | 8 +- .../cvm}/resource_tc_eip_association.go | 77 +- .../cvm}/resource_tc_eip_association_test.go | 54 +- .../resource_tc_eip_normal_address_return.go | 28 +- ...ource_tc_eip_normal_address_return_test.go | 8 +- .../resource_tc_eip_public_address_adjust.go | 33 +- ...ource_tc_eip_public_address_adjust_test.go | 8 +- .../cvm}/resource_tc_eip_test.go | 87 +- .../{ => services/cvm}/resource_tc_image.go | 65 +- .../cvm}/resource_tc_image_test.go | 42 +- .../cvm}/resource_tc_instance.go | 193 +- .../cvm}/resource_tc_instance_set.go | 69 +- .../cvm}/resource_tc_instance_test.go | 330 +- .../cvm}/resource_tc_instance_testing_test.go | 34 +- .../cvm}/resource_tc_key_pair.go | 84 +- .../cvm}/resource_tc_key_pair_test.go | 56 +- .../cvm}/resource_tc_placement_group.go | 60 +- .../cvm}/resource_tc_placement_group_test.go | 34 +- .../cvm}/resource_tc_reserved_instance.go | 34 +- .../cvm}/service_tencentcloud_cbs.go | 87 +- .../services/cvm/service_tencentcloud_cvm.go | 1776 ++++ .../services/cvm/service_tencentcloud_tag.go | 415 + .../services/cvm/service_tencentcloud_vpc.go | 8075 +++++++++++++++++ 95 files changed, 12276 insertions(+), 1331 deletions(-) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_chc_denied_actions.go (81%) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_chc_denied_actions_test.go (60%) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_chc_hosts.go (96%) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_chc_hosts_test.go (62%) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_disaster_recover_group_quota.go (82%) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_disaster_recover_group_quota_test.go (59%) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_image_quota.go (64%) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_image_quota_test.go (57%) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_image_share_permission.go (78%) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_image_share_permission_test.go (55%) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_import_image_os.go (87%) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_import_image_os_test.go (58%) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_instance_vnc_url.go (74%) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_instance_vnc_url_test.go (51%) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_instances_modification.go (90%) rename tencentcloud/{ => services/cvm}/data_source_tc_cvm_instances_modification_test.go (62%) rename tencentcloud/{ => services/cvm}/data_source_tc_eip.go (86%) rename tencentcloud/{ => services/cvm}/data_source_tc_eip_address_quota.go (77%) rename tencentcloud/{ => services/cvm}/data_source_tc_eip_address_quota_test.go (58%) rename tencentcloud/{ => services/cvm}/data_source_tc_eip_network_account_type.go (62%) rename tencentcloud/{ => services/cvm}/data_source_tc_eip_network_account_type_test.go (58%) rename tencentcloud/{ => services/cvm}/data_source_tc_eip_test.go (79%) rename tencentcloud/{ => services/cvm}/data_source_tc_eips.go (87%) rename tencentcloud/{ => services/cvm}/data_source_tc_eips_test.go (79%) rename tencentcloud/{ => services/cvm}/data_source_tc_image.go (85%) rename tencentcloud/{ => services/cvm}/data_source_tc_image_test.go (80%) rename tencentcloud/{ => services/cvm}/data_source_tc_images.go (92%) rename tencentcloud/{ => services/cvm}/data_source_tc_images_test.go (77%) rename tencentcloud/{ => services/cvm}/data_source_tc_instance_types.go (90%) rename tencentcloud/{ => services/cvm}/data_source_tc_instance_types_test.go (87%) rename tencentcloud/{ => services/cvm}/data_source_tc_instances.go (94%) rename tencentcloud/{ => services/cvm}/data_source_tc_instances_set.go (95%) rename tencentcloud/{ => services/cvm}/data_source_tc_instances_test.go (80%) rename tencentcloud/{ => services/cvm}/data_source_tc_key_pairs.go (86%) rename tencentcloud/{ => services/cvm}/data_source_tc_key_pairs_test.go (90%) rename tencentcloud/{ => services/cvm}/data_source_tc_placement_groups.go (85%) rename tencentcloud/{ => services/cvm}/data_source_tc_placement_groups_test.go (86%) rename tencentcloud/{ => services/cvm}/data_source_tc_reserved_instance_configs.go (87%) rename tencentcloud/{ => services/cvm}/data_source_tc_reserved_instance_configs_test.go (72%) rename tencentcloud/{ => services/cvm}/data_source_tc_reserved_instances.go (86%) rename tencentcloud/{ => services/cvm}/data_source_tc_reserved_instances_test.go (71%) rename tencentcloud/{ => services/cvm}/extension_cbs.go (98%) create mode 100644 tencentcloud/services/cvm/extension_cvm.go create mode 100644 tencentcloud/services/cvm/extension_images.go create mode 100644 tencentcloud/services/cvm/extension_security_group.go create mode 100644 tencentcloud/services/cvm/extension_tags.go create mode 100644 tencentcloud/services/cvm/extension_vpc.go rename tencentcloud/{ => services/cvm}/resource_tc_cvm_chc_config.go (83%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_chc_config_test.go (91%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_export_images.go (76%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_export_images_test.go (72%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_hpc_cluster.go (70%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_hpc_cluster_test.go (79%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_image_share_permission.go (70%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_image_share_permission_test.go (77%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_launch_template.go (97%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_launch_template_default_version.go (63%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_launch_template_default_version_test.go (83%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_launch_template_test.go (82%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_launch_template_version.go (97%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_launch_template_version_test.go (85%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_reboot_instance.go (77%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_reboot_instance_test.go (70%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_renew_instance.go (83%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_renew_instance_test.go (73%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_security_group_attachment.go (69%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_security_group_attachment_test.go (82%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_sync_image.go (76%) rename tencentcloud/{ => services/cvm}/resource_tc_cvm_sync_image_test.go (61%) rename tencentcloud/{ => services/cvm}/resource_tc_eip.go (81%) rename tencentcloud/{ => services/cvm}/resource_tc_eip_address_transform.go (64%) rename tencentcloud/{ => services/cvm}/resource_tc_eip_address_transform_test.go (81%) rename tencentcloud/{ => services/cvm}/resource_tc_eip_association.go (71%) rename tencentcloud/{ => services/cvm}/resource_tc_eip_association_test.go (72%) rename tencentcloud/{ => services/cvm}/resource_tc_eip_normal_address_return.go (67%) rename tencentcloud/{ => services/cvm}/resource_tc_eip_normal_address_return_test.go (78%) rename tencentcloud/{ => services/cvm}/resource_tc_eip_public_address_adjust.go (65%) rename tencentcloud/{ => services/cvm}/resource_tc_eip_public_address_adjust_test.go (81%) rename tencentcloud/{ => services/cvm}/resource_tc_eip_test.go (76%) rename tencentcloud/{ => services/cvm}/resource_tc_image.go (80%) rename tencentcloud/{ => services/cvm}/resource_tc_image_test.go (77%) rename tencentcloud/{ => services/cvm}/resource_tc_instance.go (88%) rename tencentcloud/{ => services/cvm}/resource_tc_instance_set.go (92%) rename tencentcloud/{ => services/cvm}/resource_tc_instance_test.go (77%) rename tencentcloud/{ => services/cvm}/resource_tc_instance_testing_test.go (80%) rename tencentcloud/{ => services/cvm}/resource_tc_key_pair.go (71%) rename tencentcloud/{ => services/cvm}/resource_tc_key_pair_test.go (70%) rename tencentcloud/{ => services/cvm}/resource_tc_placement_group.go (63%) rename tencentcloud/{ => services/cvm}/resource_tc_placement_group_test.go (69%) rename tencentcloud/{ => services/cvm}/resource_tc_reserved_instance.go (76%) rename tencentcloud/{ => services/cvm}/service_tencentcloud_cbs.go (94%) create mode 100644 tencentcloud/services/cvm/service_tencentcloud_cvm.go create mode 100644 tencentcloud/services/cvm/service_tencentcloud_tag.go create mode 100644 tencentcloud/services/cvm/service_tencentcloud_vpc.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index a4989b95de..4d925dd4a8 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,7 +1,6 @@ package tencentcloud import ( - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cwp" "encoding/json" "fmt" "io/ioutil" @@ -11,6 +10,9 @@ import ( "strconv" "strings" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cwp" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/css" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cos" @@ -187,15 +189,15 @@ func Provider() *schema.Provider { "tencentcloud_availability_zones": common.DataSourceTencentCloudAvailabilityZones(), "tencentcloud_availability_zones_by_product": common.DataSourceTencentCloudAvailabilityZonesByProduct(), "tencentcloud_projects": dataSourceTencentCloudProjects(), - "tencentcloud_instances": dataSourceTencentCloudInstances(), - "tencentcloud_instances_set": dataSourceTencentCloudInstancesSet(), - "tencentcloud_reserved_instances": dataSourceTencentCloudReservedInstances(), - "tencentcloud_placement_groups": dataSourceTencentCloudPlacementGroups(), - "tencentcloud_key_pairs": dataSourceTencentCloudKeyPairs(), - "tencentcloud_image": dataSourceTencentCloudImage(), - "tencentcloud_images": dataSourceTencentCloudImages(), - "tencentcloud_instance_types": dataSourceInstanceTypes(), - "tencentcloud_reserved_instance_configs": dataSourceTencentCloudReservedInstanceConfigs(), + "tencentcloud_instances": cvm.DataSourceTencentCloudInstances(), + "tencentcloud_instances_set": cvm.DataSourceTencentCloudInstancesSet(), + "tencentcloud_reserved_instances": cvm.DataSourceTencentCloudReservedInstances(), + "tencentcloud_placement_groups": cvm.DataSourceTencentCloudPlacementGroups(), + "tencentcloud_key_pairs": cvm.DataSourceTencentCloudKeyPairs(), + "tencentcloud_image": cvm.DataSourceTencentCloudImage(), + "tencentcloud_images": cvm.DataSourceTencentCloudImages(), + "tencentcloud_instance_types": cvm.DataSourceTencentCloudInstanceTypes(), + "tencentcloud_reserved_instance_configs": cvm.DataSourceTencentCloudReservedInstanceConfigs(), "tencentcloud_vpc_instances": dataSourceTencentCloudVpcInstances(), "tencentcloud_vpc_subnets": dataSourceTencentCloudVpcSubnets(), "tencentcloud_vpc_route_tables": dataSourceTencentCloudVpcRouteTables(), @@ -226,10 +228,10 @@ func Provider() *schema.Provider { "tencentcloud_subnet": dataSourceTencentCloudSubnet(), "tencentcloud_route_table": dataSourceTencentCloudRouteTable(), "tencentcloud_domains": dataSourceTencentCloudDomains(), - "tencentcloud_eip": dataSourceTencentCloudEip(), - "tencentcloud_eips": dataSourceTencentCloudEips(), - "tencentcloud_eip_address_quota": dataSourceTencentCloudEipAddressQuota(), - "tencentcloud_eip_network_account_type": dataSourceTencentCloudEipNetworkAccountType(), + "tencentcloud_eip": cvm.DataSourceTencentCloudEip(), + "tencentcloud_eips": cvm.DataSourceTencentCloudEips(), + "tencentcloud_eip_address_quota": cvm.DataSourceTencentCloudEipAddressQuota(), + "tencentcloud_eip_network_account_type": cvm.DataSourceTencentCloudEipNetworkAccountType(), "tencentcloud_enis": dataSourceTencentCloudEnis(), "tencentcloud_nats": dataSourceTencentCloudNats(), "tencentcloud_dnats": dataSourceTencentCloudDnats(), @@ -747,7 +749,7 @@ func Provider() *schema.Provider { "tencentcloud_cynosdb_cluster_params": dataSourceTencentCloudCynosdbClusterParams(), "tencentcloud_cynosdb_param_templates": dataSourceTencentCloudCynosdbParamTemplates(), "tencentcloud_cynosdb_zone": dataSourceTencentCloudCynosdbZone(), - "tencentcloud_cvm_instances_modification": dataSourceTencentCloudCvmInstancesModification(), + "tencentcloud_cvm_instances_modification": cvm.DataSourceTencentCloudCvmInstancesModification(), "tencentcloud_cynosdb_audit_logs": dataSourceTencentCloudCynosdbAuditLogs(), "tencentcloud_cynosdb_backup_download_url": dataSourceTencentCloudCynosdbBackupDownloadUrl(), "tencentcloud_cynosdb_binlog_download_url": dataSourceTencentCloudCynosdbBinlogDownloadUrl(), @@ -779,17 +781,17 @@ func Provider() *schema.Provider { "tencentcloud_chdfs_file_systems": chdfs.DataSourceTencentCloudChdfsFileSystems(), "tencentcloud_tcm_mesh": dataSourceTencentCloudTcmMesh(), "tencentcloud_lighthouse_firewall_rules_template": dataSourceTencentCloudLighthouseFirewallRulesTemplate(), - "tencentcloud_cvm_instance_vnc_url": dataSourceTencentCloudCvmInstanceVncUrl(), - "tencentcloud_cvm_disaster_recover_group_quota": dataSourceTencentCloudCvmDisasterRecoverGroupQuota(), - "tencentcloud_cvm_chc_hosts": dataSourceTencentCloudCvmChcHosts(), - "tencentcloud_cvm_chc_denied_actions": dataSourceTencentCloudCvmChcDeniedActions(), - "tencentcloud_cvm_image_quota": dataSourceTencentCloudCvmImageQuota(), - "tencentcloud_cvm_import_image_os": dataSourceTencentCloudCvmImportImageOs(), + "tencentcloud_cvm_instance_vnc_url": cvm.DataSourceTencentCloudCvmInstanceVncUrl(), + "tencentcloud_cvm_disaster_recover_group_quota": cvm.DataSourceTencentCloudCvmDisasterRecoverGroupQuota(), + "tencentcloud_cvm_chc_hosts": cvm.DataSourceTencentCloudCvmChcHosts(), + "tencentcloud_cvm_chc_denied_actions": cvm.DataSourceTencentCloudCvmChcDeniedActions(), + "tencentcloud_cvm_image_quota": cvm.DataSourceTencentCloudCvmImageQuota(), + "tencentcloud_cvm_import_image_os": cvm.DataSourceTencentCloudCvmImportImageOs(), "tencentcloud_tsf_application": dataSourceTencentCloudTsfApplication(), "tencentcloud_tsf_application_config": dataSourceTencentCloudTsfApplicationConfig(), "tencentcloud_tsf_application_file_config": dataSourceTencentCloudTsfApplicationFileConfig(), "tencentcloud_tsf_application_public_config": dataSourceTencentCloudTsfApplicationPublicConfig(), - "tencentcloud_cvm_image_share_permission": dataSourceTencentCloudCvmImageSharePermission(), + "tencentcloud_cvm_image_share_permission": cvm.DataSourceTencentCloudCvmImageSharePermission(), "tencentcloud_tsf_cluster": dataSourceTencentCloudTsfCluster(), "tencentcloud_tsf_microservice": dataSourceTencentCloudTsfMicroservice(), "tencentcloud_tsf_unit_rules": dataSourceTencentCloudTsfUnitRules(), @@ -919,11 +921,11 @@ func Provider() *schema.Provider { "tencentcloud_project": resourceTencentCloudProject(), "tencentcloud_emr_cluster": resourceTencentCloudEmrCluster(), "tencentcloud_emr_user_manager": resourceTencentCloudEmrUserManager(), - "tencentcloud_instance": resourceTencentCloudInstance(), - "tencentcloud_instance_set": resourceTencentCloudInstanceSet(), - "tencentcloud_reserved_instance": resourceTencentCloudReservedInstance(), - "tencentcloud_key_pair": resourceTencentCloudKeyPair(), - "tencentcloud_placement_group": resourceTencentCloudPlacementGroup(), + "tencentcloud_instance": cvm.ResourceTencentCloudInstance(), + "tencentcloud_instance_set": cvm.ResourceTencentCloudInstanceSet(), + "tencentcloud_reserved_instance": cvm.ResourceTencentCloudReservedInstance(), + "tencentcloud_key_pair": cvm.ResourceTencentCloudKeyPair(), + "tencentcloud_placement_group": cvm.ResourceTencentCloudPlacementGroup(), "tencentcloud_cbs_snapshot": cbs.ResourceTencentCloudCbsSnapshot(), "tencentcloud_cbs_snapshot_policy": cbs.ResourceTencentCloudCbsSnapshotPolicy(), "tencentcloud_cbs_storage": cbs.ResourceTencentCloudCbsStorage(), @@ -974,11 +976,11 @@ func Provider() *schema.Provider { "tencentcloud_oceanus_folder": resourceTencentCloudOceanusFolder(), "tencentcloud_tag": resourceTencentCloudTag(), "tencentcloud_tag_attachment": resourceTencentCloudTagAttachment(), - "tencentcloud_eip": resourceTencentCloudEip(), - "tencentcloud_eip_association": resourceTencentCloudEipAssociation(), - "tencentcloud_eip_address_transform": resourceTencentCloudEipAddressTransform(), - "tencentcloud_eip_public_address_adjust": resourceTencentCloudEipPublicAddressAdjust(), - "tencentcloud_eip_normal_address_return": resourceTencentCloudEipNormalAddressReturn(), + "tencentcloud_eip": cvm.ResourceTencentCloudEip(), + "tencentcloud_eip_association": cvm.ResourceTencentCloudEipAssociation(), + "tencentcloud_eip_address_transform": cvm.ResourceTencentCloudEipAddressTransform(), + "tencentcloud_eip_public_address_adjust": cvm.ResourceTencentCloudEipPublicAddressAdjust(), + "tencentcloud_eip_normal_address_return": cvm.ResourceTencentCloudEipNormalAddressReturn(), "tencentcloud_eni": resourceTencentCloudEni(), "tencentcloud_eni_attachment": resourceTencentCloudEniAttachment(), "tencentcloud_eni_sg_attachment": resourceTencentCloudEniSgAttachment(), @@ -1326,7 +1328,7 @@ func Provider() *schema.Provider { "tencentcloud_ckafka_route": ckafka.ResourceTencentCloudCkafkaRoute(), "tencentcloud_audit": resourceTencentCloudAudit(), "tencentcloud_audit_track": resourceTencentCloudAuditTrack(), - "tencentcloud_image": resourceTencentCloudImage(), + "tencentcloud_image": cvm.ResourceTencentCloudImage(), "tencentcloud_cynosdb_proxy": resourceTencentCloudCynosdbProxy(), "tencentcloud_cynosdb_reload_proxy_node": resourceTencentCloudCynosdbReloadProxyNode(), "tencentcloud_cynosdb_cluster_resource_packages_attachment": resourceTencentCloudCynosdbClusterResourcePackagesAttachment(), @@ -1610,7 +1612,7 @@ func Provider() *schema.Provider { "tencentcloud_dts_migrate_job_resume_operation": resourceTencentCloudDtsMigrateJobResumeOperation(), "tencentcloud_dts_compare_task_stop_operation": resourceTencentCloudDtsCompareTaskStopOperation(), "tencentcloud_dts_compare_task": resourceTencentCloudDtsCompareTask(), - "tencentcloud_cvm_hpc_cluster": resourceTencentCloudCvmHpcCluster(), + "tencentcloud_cvm_hpc_cluster": cvm.ResourceTencentCloudCvmHpcCluster(), "tencentcloud_vpc_flow_log": resourceTencentCloudVpcFlowLog(), "tencentcloud_vpc_end_point_service": resourceTencentCloudVpcEndPointService(), "tencentcloud_vpc_end_point": resourceTencentCloudVpcEndPoint(), @@ -1653,7 +1655,7 @@ func Provider() *schema.Provider { "tencentcloud_antiddos_cc_precision_policy": resourceTencentCloudAntiddosCcPrecisionPolicy(), "tencentcloud_tsf_microservice": resourceTencentCloudTsfMicroservice(), "tencentcloud_tsf_application_config": resourceTencentCloudTsfApplicationConfig(), - "tencentcloud_cvm_launch_template": resourceTencentCloudCvmLaunchTemplate(), + "tencentcloud_cvm_launch_template": cvm.ResourceTencentCloudCvmLaunchTemplate(), "tencentcloud_tsf_cluster": resourceTencentCloudTsfCluster(), "tencentcloud_tsf_api_group": resourceTencentCloudTsfApiGroup(), "tencentcloud_tsf_namespace": resourceTencentCloudTsfNamespace(), @@ -1719,17 +1721,17 @@ func Provider() *schema.Provider { "tencentcloud_chdfs_mount_point_attachment": chdfs.ResourceTencentCloudChdfsMountPointAttachment(), "tencentcloud_mdl_stream_live_input": resourceTencentCloudMdlStreamLiveInput(), "tencentcloud_lighthouse_blueprint": resourceTencentCloudLighthouseBlueprint(), - "tencentcloud_cvm_launch_template_version": resourceTencentCloudCvmLaunchTemplateVersion(), + "tencentcloud_cvm_launch_template_version": cvm.ResourceTencentCloudCvmLaunchTemplateVersion(), "tencentcloud_apm_instance": apm.ResourceTencentCloudApmInstance(), - "tencentcloud_cvm_launch_template_default_version": resourceTencentCloudCvmLaunchTemplateDefaultVersion(), + "tencentcloud_cvm_launch_template_default_version": cvm.ResourceTencentCloudCvmLaunchTemplateDefaultVersion(), "tencentcloud_lighthouse_firewall_rule": resourceTencentCloudLighthouseFirewallRule(), - "tencentcloud_cvm_security_group_attachment": resourceTencentCloudCvmSecurityGroupAttachment(), - "tencentcloud_cvm_reboot_instance": resourceTencentCloudCvmRebootInstance(), - "tencentcloud_cvm_chc_config": resourceTencentCloudCvmChcConfig(), - "tencentcloud_cvm_sync_image": resourceTencentCloudCvmSyncImage(), - "tencentcloud_cvm_renew_instance": resourceTencentCloudCvmRenewInstance(), - "tencentcloud_cvm_export_images": resourceTencentCloudCvmExportImages(), - "tencentcloud_cvm_image_share_permission": resourceTencentCloudCvmImageSharePermission(), + "tencentcloud_cvm_security_group_attachment": cvm.ResourceTencentCloudCvmSecurityGroupAttachment(), + "tencentcloud_cvm_reboot_instance": cvm.ResourceTencentCloudCvmRebootInstance(), + "tencentcloud_cvm_chc_config": cvm.ResourceTencentCloudCvmChcConfig(), + "tencentcloud_cvm_sync_image": cvm.ResourceTencentCloudCvmSyncImage(), + "tencentcloud_cvm_renew_instance": cvm.ResourceTencentCloudCvmRenewInstance(), + "tencentcloud_cvm_export_images": cvm.ResourceTencentCloudCvmExportImages(), + "tencentcloud_cvm_image_share_permission": cvm.ResourceTencentCloudCvmImageSharePermission(), "tencentcloud_cvm_import_image": resourceTencentCloudCvmImportImage(), "tencentcloud_cvm_renew_host": resourceTencentCloudCvmRenewHost(), "tencentcloud_cvm_program_fpga_image": resourceTencentCloudCvmProgramFpgaImage(), diff --git a/tencentcloud/data_source_tc_cvm_chc_denied_actions.go b/tencentcloud/services/cvm/data_source_tc_cvm_chc_denied_actions.go similarity index 81% rename from tencentcloud/data_source_tc_cvm_chc_denied_actions.go rename to tencentcloud/services/cvm/data_source_tc_cvm_chc_denied_actions.go index 4353d04c76..a50dd1b8c1 100644 --- a/tencentcloud/data_source_tc_cvm_chc_denied_actions.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_chc_denied_actions.go @@ -1,15 +1,18 @@ -package tencentcloud +package cvm import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCvmChcDeniedActions() *schema.Resource { +func DataSourceTencentCloudCvmChcDeniedActions() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCvmChcDeniedActionsRead, Schema: map[string]*schema.Schema{ @@ -60,12 +63,12 @@ func dataSourceTencentCloudCvmChcDeniedActions() *schema.Resource { } func dataSourceTencentCloudCvmChcDeniedActionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cvm_chc_denied_actions.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cvm_chc_denied_actions.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("chc_ids"); ok { @@ -73,14 +76,14 @@ func dataSourceTencentCloudCvmChcDeniedActionsRead(d *schema.ResourceData, meta paramMap["chc_ids"] = helper.InterfacesStrings(chcIdsSet) } - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var chcHostDeniedActionSet []*cvm.ChcHostDeniedActions - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCvmChcDeniedActionsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } chcHostDeniedActionSet = result return nil @@ -118,7 +121,7 @@ func dataSourceTencentCloudCvmChcDeniedActionsRead(d *schema.ResourceData, meta d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cvm_chc_denied_actions_test.go b/tencentcloud/services/cvm/data_source_tc_cvm_chc_denied_actions_test.go similarity index 60% rename from tencentcloud/data_source_tc_cvm_chc_denied_actions_test.go rename to tencentcloud/services/cvm/data_source_tc_cvm_chc_denied_actions_test.go index 4843dec789..2c9721ed59 100644 --- a/tencentcloud/data_source_tc_cvm_chc_denied_actions_test.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_chc_denied_actions_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCvmChcDeniedActionsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmChcDeniedActionsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_chc_denied_actions.chc_denied_actions")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_chc_denied_actions.chc_denied_actions")), }, }, }) diff --git a/tencentcloud/data_source_tc_cvm_chc_hosts.go b/tencentcloud/services/cvm/data_source_tc_cvm_chc_hosts.go similarity index 96% rename from tencentcloud/data_source_tc_cvm_chc_hosts.go rename to tencentcloud/services/cvm/data_source_tc_cvm_chc_hosts.go index ee0fbd0228..bf38017e13 100644 --- a/tencentcloud/data_source_tc_cvm_chc_hosts.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_chc_hosts.go @@ -1,15 +1,18 @@ -package tencentcloud +package cvm import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCvmChcHosts() *schema.Resource { +func DataSourceTencentCloudCvmChcHosts() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCvmChcHostsRead, Schema: map[string]*schema.Schema{ @@ -280,12 +283,12 @@ func dataSourceTencentCloudCvmChcHosts() *schema.Resource { } func dataSourceTencentCloudCvmChcHostsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cvm_chc_hosts.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cvm_chc_hosts.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("chc_ids"); ok { @@ -313,14 +316,14 @@ func dataSourceTencentCloudCvmChcHostsRead(d *schema.ResourceData, meta interfac paramMap["filters"] = tmpSet } - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var chcHostSet []*cvm.ChcHost - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCvmChcHostsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } chcHostSet = result return nil @@ -496,7 +499,7 @@ func dataSourceTencentCloudCvmChcHostsRead(d *schema.ResourceData, meta interfac d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cvm_chc_hosts_test.go b/tencentcloud/services/cvm/data_source_tc_cvm_chc_hosts_test.go similarity index 62% rename from tencentcloud/data_source_tc_cvm_chc_hosts_test.go rename to tencentcloud/services/cvm/data_source_tc_cvm_chc_hosts_test.go index 02f592b364..a542022210 100644 --- a/tencentcloud/data_source_tc_cvm_chc_hosts_test.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_chc_hosts_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCvmChcHostsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmChcHostsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_chc_hosts.chc_hosts")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_chc_hosts.chc_hosts")), }, }, }) diff --git a/tencentcloud/data_source_tc_cvm_disaster_recover_group_quota.go b/tencentcloud/services/cvm/data_source_tc_cvm_disaster_recover_group_quota.go similarity index 82% rename from tencentcloud/data_source_tc_cvm_disaster_recover_group_quota.go rename to tencentcloud/services/cvm/data_source_tc_cvm_disaster_recover_group_quota.go index 5367720d57..2960dd400f 100644 --- a/tencentcloud/data_source_tc_cvm_disaster_recover_group_quota.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_disaster_recover_group_quota.go @@ -1,16 +1,19 @@ -package tencentcloud +package cvm import ( "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func dataSourceTencentCloudCvmDisasterRecoverGroupQuota() *schema.Resource { +func DataSourceTencentCloudCvmDisasterRecoverGroupQuota() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCvmDisasterRecoverGroupQuotaRead, Schema: map[string]*schema.Schema{ @@ -54,17 +57,17 @@ func dataSourceTencentCloudCvmDisasterRecoverGroupQuota() *schema.Resource { } func dataSourceTencentCloudCvmDisasterRecoverGroupQuotaRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cvm_disaster_recover_group_quota.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cvm_disaster_recover_group_quota.read")() + defer tccommon.InconsistentCheck(d, meta)() var response *cvm.DescribeDisasterRecoverGroupQuotaResponse request := cvm.NewDescribeDisasterRecoverGroupQuotaRequest() - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().DescribeDisasterRecoverGroupQuota(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().DescribeDisasterRecoverGroupQuota(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -85,7 +88,7 @@ func dataSourceTencentCloudCvmDisasterRecoverGroupQuotaRead(d *schema.ResourceDa d.SetId(helper.BuildToken()) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), map[string]interface{}{ + if e := tccommon.WriteToFile(output.(string), map[string]interface{}{ "group_quota": response.Response.GroupQuota, "current_num": response.Response.CurrentNum, "cvm_in_host_group_quota": response.Response.CvmInHostGroupQuota, diff --git a/tencentcloud/data_source_tc_cvm_disaster_recover_group_quota_test.go b/tencentcloud/services/cvm/data_source_tc_cvm_disaster_recover_group_quota_test.go similarity index 59% rename from tencentcloud/data_source_tc_cvm_disaster_recover_group_quota_test.go rename to tencentcloud/services/cvm/data_source_tc_cvm_disaster_recover_group_quota_test.go index 52b978b80a..1307611947 100644 --- a/tencentcloud/data_source_tc_cvm_disaster_recover_group_quota_test.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_disaster_recover_group_quota_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCvmDisasterRecoverGroupQuotaDataSource_basic(t *testing. t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmDisasterRecoverGroupQuotaDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_disaster_recover_group_quota.disaster_recover_group_quota")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_disaster_recover_group_quota.disaster_recover_group_quota")), }, }, }) diff --git a/tencentcloud/data_source_tc_cvm_image_quota.go b/tencentcloud/services/cvm/data_source_tc_cvm_image_quota.go similarity index 64% rename from tencentcloud/data_source_tc_cvm_image_quota.go rename to tencentcloud/services/cvm/data_source_tc_cvm_image_quota.go index 548992af85..b98fefd2e3 100644 --- a/tencentcloud/data_source_tc_cvm_image_quota.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_image_quota.go @@ -1,14 +1,17 @@ -package tencentcloud +package cvm import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCvmImageQuota() *schema.Resource { +func DataSourceTencentCloudCvmImageQuota() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCvmImageQuotaRead, Schema: map[string]*schema.Schema{ @@ -28,21 +31,21 @@ func dataSourceTencentCloudCvmImageQuota() *schema.Resource { } func dataSourceTencentCloudCvmImageQuotaRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cvm_image_quota.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cvm_image_quota.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var imageNumQuota int64 - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCvmImageQuotaByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } imageNumQuota = result return nil @@ -56,7 +59,7 @@ func dataSourceTencentCloudCvmImageQuotaRead(d *schema.ResourceData, meta interf d.SetId(helper.BuildToken()) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), map[string]interface{}{ + if e := tccommon.WriteToFile(output.(string), map[string]interface{}{ "image_num_quota": imageNumQuota, }); e != nil { return e diff --git a/tencentcloud/data_source_tc_cvm_image_quota_test.go b/tencentcloud/services/cvm/data_source_tc_cvm_image_quota_test.go similarity index 57% rename from tencentcloud/data_source_tc_cvm_image_quota_test.go rename to tencentcloud/services/cvm/data_source_tc_cvm_image_quota_test.go index 39699eac1c..7cf61dc549 100644 --- a/tencentcloud/data_source_tc_cvm_image_quota_test.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_image_quota_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCvmImageQuotaDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmImageQuotaDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_image_quota.image_quota")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_image_quota.image_quota")), }, }, }) diff --git a/tencentcloud/data_source_tc_cvm_image_share_permission.go b/tencentcloud/services/cvm/data_source_tc_cvm_image_share_permission.go similarity index 78% rename from tencentcloud/data_source_tc_cvm_image_share_permission.go rename to tencentcloud/services/cvm/data_source_tc_cvm_image_share_permission.go index 21e7b29dd0..25bd95d412 100644 --- a/tencentcloud/data_source_tc_cvm_image_share_permission.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_image_share_permission.go @@ -1,15 +1,18 @@ -package tencentcloud +package cvm import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCvmImageSharePermission() *schema.Resource { +func DataSourceTencentCloudCvmImageSharePermission() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCvmImageSharePermissionRead, Schema: map[string]*schema.Schema{ @@ -49,26 +52,26 @@ func dataSourceTencentCloudCvmImageSharePermission() *schema.Resource { } func dataSourceTencentCloudCvmImageSharePermissionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cvm_image_share_permission.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cvm_image_share_permission.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("image_id"); ok { paramMap["ImageId"] = helper.String(v.(string)) } - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var sharePermissionSet []*cvm.SharePermission - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCvmImageSharePermissionByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } sharePermissionSet = result return nil @@ -102,7 +105,7 @@ func dataSourceTencentCloudCvmImageSharePermissionRead(d *schema.ResourceData, m d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cvm_image_share_permission_test.go b/tencentcloud/services/cvm/data_source_tc_cvm_image_share_permission_test.go similarity index 55% rename from tencentcloud/data_source_tc_cvm_image_share_permission_test.go rename to tencentcloud/services/cvm/data_source_tc_cvm_image_share_permission_test.go index a186a5ff76..126d2ed51c 100644 --- a/tencentcloud/data_source_tc_cvm_image_share_permission_test.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_image_share_permission_test.go @@ -1,20 +1,22 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCvmImageSharePermissionDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmImageSharePermissionDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_image_share_permission.image_share_permission")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_image_share_permission.image_share_permission")), }, }, }) diff --git a/tencentcloud/data_source_tc_cvm_import_image_os.go b/tencentcloud/services/cvm/data_source_tc_cvm_import_image_os.go similarity index 87% rename from tencentcloud/data_source_tc_cvm_import_image_os.go rename to tencentcloud/services/cvm/data_source_tc_cvm_import_image_os.go index 90e27b8abc..f117587d89 100644 --- a/tencentcloud/data_source_tc_cvm_import_image_os.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_import_image_os.go @@ -1,15 +1,18 @@ -package tencentcloud +package cvm import ( "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCvmImportImageOs() *schema.Resource { +func DataSourceTencentCloudCvmImportImageOs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCvmImportImageOsRead, Schema: map[string]*schema.Schema{ @@ -80,17 +83,17 @@ func dataSourceTencentCloudCvmImportImageOs() *schema.Resource { } func dataSourceTencentCloudCvmImportImageOsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cvm_import_image_os.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cvm_import_image_os.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( request = cvm.NewDescribeImportImageOsRequest() response = cvm.NewDescribeImportImageOsResponse() ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - resule, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().DescribeImportImageOs(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + resule, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().DescribeImportImageOs(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } response = resule return nil @@ -154,7 +157,7 @@ func dataSourceTencentCloudCvmImportImageOsRead(d *schema.ResourceData, meta int d.SetId(helper.BuildToken()) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), result); e != nil { + if e := tccommon.WriteToFile(output.(string), result); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cvm_import_image_os_test.go b/tencentcloud/services/cvm/data_source_tc_cvm_import_image_os_test.go similarity index 58% rename from tencentcloud/data_source_tc_cvm_import_image_os_test.go rename to tencentcloud/services/cvm/data_source_tc_cvm_import_image_os_test.go index 57e4041f99..85a26ae266 100644 --- a/tencentcloud/data_source_tc_cvm_import_image_os_test.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_import_image_os_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCvmImportImageOsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmImportImageOsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_import_image_os.import_image_os")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_import_image_os.import_image_os")), }, }, }) diff --git a/tencentcloud/data_source_tc_cvm_instance_vnc_url.go b/tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url.go similarity index 74% rename from tencentcloud/data_source_tc_cvm_instance_vnc_url.go rename to tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url.go index 8cf1ca2d19..9e4954611c 100644 --- a/tencentcloud/data_source_tc_cvm_instance_vnc_url.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url.go @@ -1,15 +1,18 @@ -package tencentcloud +package cvm import ( "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCvmInstanceVncUrl() *schema.Resource { +func DataSourceTencentCloudCvmInstanceVncUrl() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCvmInstanceVncUrlRead, Schema: map[string]*schema.Schema{ @@ -35,18 +38,18 @@ func dataSourceTencentCloudCvmInstanceVncUrl() *schema.Resource { } func dataSourceTencentCloudCvmInstanceVncUrlRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cvm_instance_vnc_url.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cvm_instance_vnc_url.read")() + defer tccommon.InconsistentCheck(d, meta)() var response *cvm.DescribeInstanceVncUrlResponse request := cvm.NewDescribeInstanceVncUrlRequest() instanceId := d.Get("instance_id").(string) request.InstanceId = helper.String(instanceId) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().DescribeInstanceVncUrl(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().DescribeInstanceVncUrl(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -65,7 +68,7 @@ func dataSourceTencentCloudCvmInstanceVncUrlRead(d *schema.ResourceData, meta in output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), map[string]interface{}{ + if e := tccommon.WriteToFile(output.(string), map[string]interface{}{ "instance_vnc_url": *response.Response.InstanceVncUrl, }); e != nil { return e diff --git a/tencentcloud/data_source_tc_cvm_instance_vnc_url_test.go b/tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url_test.go similarity index 51% rename from tencentcloud/data_source_tc_cvm_instance_vnc_url_test.go rename to tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url_test.go index 0df87961d7..4edc19b686 100644 --- a/tencentcloud/data_source_tc_cvm_instance_vnc_url_test.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_instance_vnc_url_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,19 +12,19 @@ func TestAccTencentCloudCvmInstanceVncUrlDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmInstanceVncUrlDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_instance_vnc_url.instance_vnc_url")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_instance_vnc_url.instance_vnc_url")), }, }, }) } -const testAccCvmInstanceVncUrlDataSource = defaultCvmModificationVariable + ` +const testAccCvmInstanceVncUrlDataSource = tcacctest.DefaultCvmModificationVariable + ` data "tencentcloud_cvm_instance_vnc_url" "instance_vnc_url" { instance_id = var.cvm_id diff --git a/tencentcloud/data_source_tc_cvm_instances_modification.go b/tencentcloud/services/cvm/data_source_tc_cvm_instances_modification.go similarity index 90% rename from tencentcloud/data_source_tc_cvm_instances_modification.go rename to tencentcloud/services/cvm/data_source_tc_cvm_instances_modification.go index 6688323f4d..c8cff821c4 100644 --- a/tencentcloud/data_source_tc_cvm_instances_modification.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_instances_modification.go @@ -1,15 +1,18 @@ -package tencentcloud +package cvm import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCvmInstancesModification() *schema.Resource { +func DataSourceTencentCloudCvmInstancesModification() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCvmInstancesModificationRead, @@ -119,8 +122,8 @@ func dataSourceTencentCloudCvmInstancesModification() *schema.Resource { } func dataSourceTencentCloudCvmInstancesModificationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cvm_instances_modification.read")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("data_source.tencentcloud_cvm_instances_modification.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cvm.NewDescribeInstancesModificationRequest() @@ -146,10 +149,10 @@ func dataSourceTencentCloudCvmInstancesModificationRead(d *schema.ResourceData, instanceTypeConfigStatusList := make([]map[string]interface{}, 0) var innerErr error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { - response, innerErr = meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().DescribeInstancesModification(request) + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + response, innerErr = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().DescribeInstancesModification(request) if innerErr != nil { - return retryError(innerErr) + return tccommon.RetryError(innerErr) } return nil }) @@ -189,7 +192,7 @@ func dataSourceTencentCloudCvmInstancesModificationRead(d *schema.ResourceData, output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), instanceTypeConfigStatusList); err != nil { + if err := tccommon.WriteToFile(output.(string), instanceTypeConfigStatusList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_cvm_instances_modification_test.go b/tencentcloud/services/cvm/data_source_tc_cvm_instances_modification_test.go similarity index 62% rename from tencentcloud/data_source_tc_cvm_instances_modification_test.go rename to tencentcloud/services/cvm/data_source_tc_cvm_instances_modification_test.go index c34eba0220..820993fecf 100644 --- a/tencentcloud/data_source_tc_cvm_instances_modification_test.go +++ b/tencentcloud/services/cvm/data_source_tc_cvm_instances_modification_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,14 +12,14 @@ func TestAccTencentCloudCvmInstancesModificationDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmInstancesModificationDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_instances_modification.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_instances_modification.foo"), resource.TestCheckResourceAttrSet("data.tencentcloud_cvm_instances_modification.foo", "instance_type_config_status_list.#"), ), }, @@ -25,7 +27,7 @@ func TestAccTencentCloudCvmInstancesModificationDataSource_basic(t *testing.T) { }) } -const testAccCvmInstancesModificationDataSource = defaultCvmModificationVariable + ` +const testAccCvmInstancesModificationDataSource = tcacctest.DefaultCvmModificationVariable + ` data "tencentcloud_cvm_instances_modification" "foo" { instance_ids = [var.cvm_id] } diff --git a/tencentcloud/data_source_tc_eip.go b/tencentcloud/services/cvm/data_source_tc_eip.go similarity index 86% rename from tencentcloud/data_source_tc_eip.go rename to tencentcloud/services/cvm/data_source_tc_eip.go index a18834f8c2..0a4db5f524 100644 --- a/tencentcloud/data_source_tc_eip.go +++ b/tencentcloud/services/cvm/data_source_tc_eip.go @@ -1,9 +1,11 @@ -package tencentcloud +package cvm import ( "context" "errors" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" @@ -13,7 +15,7 @@ var ( errEIPNotFound = errors.New("eip not found") ) -func dataSourceTencentCloudEip() *schema.Resource { +func DataSourceTencentCloudEip() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This data source has been deprecated in Terraform TencentCloud provider version 1.20.0. Please use 'tencentcloud_eips' instead.", Read: dataSourceTencentCloudEipRead, @@ -69,13 +71,13 @@ func dataSourceTencentCloudEip() *schema.Resource { } func dataSourceTencentCloudEipRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_eip.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_eip.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) vpcService := VpcService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } filter := make(map[string][]string) @@ -93,10 +95,10 @@ func dataSourceTencentCloudEipRead(d *schema.ResourceData, meta interface{}) err var eips []*vpc.Address var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { eips, errRet = vpcService.DescribeEipByFilter(ctx, filter) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) diff --git a/tencentcloud/data_source_tc_eip_address_quota.go b/tencentcloud/services/cvm/data_source_tc_eip_address_quota.go similarity index 77% rename from tencentcloud/data_source_tc_eip_address_quota.go rename to tencentcloud/services/cvm/data_source_tc_eip_address_quota.go index d6bd3704b4..7501f09970 100644 --- a/tencentcloud/data_source_tc_eip_address_quota.go +++ b/tencentcloud/services/cvm/data_source_tc_eip_address_quota.go @@ -1,15 +1,18 @@ -package tencentcloud +package cvm import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudEipAddressQuota() *schema.Resource { +func DataSourceTencentCloudEipAddressQuota() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudEipAddressQuotaRead, Schema: map[string]*schema.Schema{ @@ -48,21 +51,21 @@ func dataSourceTencentCloudEipAddressQuota() *schema.Resource { } func dataSourceTencentCloudEipAddressQuotaRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_vpc_address_quota.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_vpc_address_quota.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var quotaSet []*vpc.Quota - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeEipAddressQuota(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } quotaSet = result return nil @@ -100,7 +103,7 @@ func dataSourceTencentCloudEipAddressQuotaRead(d *schema.ResourceData, meta inte d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_eip_address_quota_test.go b/tencentcloud/services/cvm/data_source_tc_eip_address_quota_test.go similarity index 58% rename from tencentcloud/data_source_tc_eip_address_quota_test.go rename to tencentcloud/services/cvm/data_source_tc_eip_address_quota_test.go index 71664a4d13..f8a6d50aad 100644 --- a/tencentcloud/data_source_tc_eip_address_quota_test.go +++ b/tencentcloud/services/cvm/data_source_tc_eip_address_quota_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudEipAddressQuotaDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccEipAddressQuotaDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_eip_address_quota.address_quota")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_eip_address_quota.address_quota")), }, }, }) diff --git a/tencentcloud/data_source_tc_eip_network_account_type.go b/tencentcloud/services/cvm/data_source_tc_eip_network_account_type.go similarity index 62% rename from tencentcloud/data_source_tc_eip_network_account_type.go rename to tencentcloud/services/cvm/data_source_tc_eip_network_account_type.go index f129d99068..f72d013fe8 100644 --- a/tencentcloud/data_source_tc_eip_network_account_type.go +++ b/tencentcloud/services/cvm/data_source_tc_eip_network_account_type.go @@ -1,13 +1,15 @@ -package tencentcloud +package cvm import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func dataSourceTencentCloudEipNetworkAccountType() *schema.Resource { +func DataSourceTencentCloudEipNetworkAccountType() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudEipNetworkAccountTypeRead, Schema: map[string]*schema.Schema{ @@ -27,20 +29,20 @@ func dataSourceTencentCloudEipNetworkAccountType() *schema.Resource { } func dataSourceTencentCloudEipNetworkAccountTypeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_eip_network_account_type.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_eip_network_account_type.read")() + defer tccommon.InconsistentCheck(d, meta)() var networkAccountType *string - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeEipNetworkAccountType(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } networkAccountType = result return nil @@ -56,7 +58,7 @@ func dataSourceTencentCloudEipNetworkAccountTypeRead(d *schema.ResourceData, met d.SetId(*networkAccountType) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), *networkAccountType); e != nil { + if e := tccommon.WriteToFile(output.(string), *networkAccountType); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_eip_network_account_type_test.go b/tencentcloud/services/cvm/data_source_tc_eip_network_account_type_test.go similarity index 58% rename from tencentcloud/data_source_tc_eip_network_account_type_test.go rename to tencentcloud/services/cvm/data_source_tc_eip_network_account_type_test.go index c023ef5d7e..a4f469f11a 100644 --- a/tencentcloud/data_source_tc_eip_network_account_type_test.go +++ b/tencentcloud/services/cvm/data_source_tc_eip_network_account_type_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudEipNetworkAccountTypeDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccEipNetworkAccountTypeDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_eip_network_account_type.network_account_type")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_eip_network_account_type.network_account_type")), }, }, }) diff --git a/tencentcloud/data_source_tc_eip_test.go b/tencentcloud/services/cvm/data_source_tc_eip_test.go similarity index 79% rename from tencentcloud/data_source_tc_eip_test.go rename to tencentcloud/services/cvm/data_source_tc_eip_test.go index df4468a057..d18776e109 100644 --- a/tencentcloud/data_source_tc_eip_test.go +++ b/tencentcloud/services/cvm/data_source_tc_eip_test.go @@ -1,22 +1,24 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudEipDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEipDestroy, Steps: []resource.TestStep{ { Config: testAccTencentCloudEipDataSourceConfig_basic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_eip.my_eip"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_eip.my_eip"), resource.TestCheckResourceAttrSet("data.tencentcloud_eip.my_eip", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_eip.my_eip", "public_ip"), ), @@ -24,7 +26,7 @@ func TestAccTencentCloudEipDataSource(t *testing.T) { { Config: testAccTencentCloudEipDataSourceConfig_filter, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_eip.my_eip"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_eip.my_eip"), resource.TestCheckResourceAttrSet("data.tencentcloud_eip.my_eip", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_eip.my_eip", "public_ip"), resource.TestCheckResourceAttr("data.tencentcloud_eip.my_eip", "status", "UNBIND"), diff --git a/tencentcloud/data_source_tc_eips.go b/tencentcloud/services/cvm/data_source_tc_eips.go similarity index 87% rename from tencentcloud/data_source_tc_eips.go rename to tencentcloud/services/cvm/data_source_tc_eips.go index cc0b8e7d9e..87c09391ab 100644 --- a/tencentcloud/data_source_tc_eips.go +++ b/tencentcloud/services/cvm/data_source_tc_eips.go @@ -1,16 +1,19 @@ -package tencentcloud +package cvm import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudEips() *schema.Resource { +func DataSourceTencentCloudEips() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudEipsRead, @@ -100,11 +103,11 @@ func dataSourceTencentCloudEips() *schema.Resource { } func dataSourceTencentCloudEipsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_eips.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_eips.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() vpcService := VpcService{client: client} tagService := TagService{client: client} region := client.Region @@ -124,10 +127,10 @@ func dataSourceTencentCloudEipsRead(d *schema.ResourceData, meta interface{}) er var eips []*vpc.Address var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { eips, errRet = vpcService.DescribeEipByFilter(ctx, filter) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -177,7 +180,7 @@ EIP_LOOP: output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), eipList); err != nil { + if err := tccommon.WriteToFile(output.(string), eipList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_eips_test.go b/tencentcloud/services/cvm/data_source_tc_eips_test.go similarity index 79% rename from tencentcloud/data_source_tc_eips_test.go rename to tencentcloud/services/cvm/data_source_tc_eips_test.go index 692405526d..da3a996b56 100644 --- a/tencentcloud/data_source_tc_eips_test.go +++ b/tencentcloud/services/cvm/data_source_tc_eips_test.go @@ -1,22 +1,24 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudEipsDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEipDestroy, Steps: []resource.TestStep{ { Config: testAccEipsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_eips.data_eips"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_eips.data_eips"), resource.TestCheckResourceAttr("data.tencentcloud_eips.data_eips", "eip_list.#", "1"), resource.TestCheckResourceAttrSet("data.tencentcloud_eips.data_eips", "eip_list.0.eip_id"), resource.TestCheckResourceAttr("data.tencentcloud_eips.data_eips", "eip_list.0.eip_name", "tf-test-eip"), @@ -25,7 +27,7 @@ func TestAccTencentCloudEipsDataSource(t *testing.T) { resource.TestCheckResourceAttrSet("data.tencentcloud_eips.data_eips", "eip_list.0.public_ip"), resource.TestCheckResourceAttrSet("data.tencentcloud_eips.data_eips", "eip_list.0.create_time"), - testAccCheckTencentCloudDataSourceID("data.tencentcloud_eips.tags"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_eips.tags"), resource.TestCheckResourceAttr("data.tencentcloud_eips.tags", "eip_list.0.tags.test", "test"), ), }, diff --git a/tencentcloud/data_source_tc_image.go b/tencentcloud/services/cvm/data_source_tc_image.go similarity index 85% rename from tencentcloud/data_source_tc_image.go rename to tencentcloud/services/cvm/data_source_tc_image.go index 42744ad2d4..807b6ca342 100644 --- a/tencentcloud/data_source_tc_image.go +++ b/tencentcloud/services/cvm/data_source_tc_image.go @@ -1,4 +1,4 @@ -package tencentcloud +package cvm import ( "context" @@ -7,13 +7,16 @@ import ( "regexp" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudImage() *schema.Resource { +func DataSourceTencentCloudImage() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudImageRead, @@ -41,13 +44,13 @@ func dataSourceTencentCloudImage() *schema.Resource { "image_name_regex": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateNameRegex, + ValidateFunc: tccommon.ValidateNameRegex, Description: "A regex string to apply to the image list returned by TencentCloud. **NOTE**: it is not wildcard, should look like `image_name_regex = \"^CentOS\\s+6\\.8\\s+64\\w*\"`.", }, "os_name": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, Description: "A string to apply with fuzzy match to the os_name attribute on the image list returned by TencentCloud. **NOTE**: when os_name is provided, highest priority is applied in this field instead of `image_name_regex`.", }, "result_output_file": { @@ -70,13 +73,13 @@ func dataSourceTencentCloudImage() *schema.Resource { } func dataSourceTencentCloudImageRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_image.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_image.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } filter := make(map[string][]string) @@ -94,10 +97,10 @@ func dataSourceTencentCloudImageRead(d *schema.ResourceData, meta interface{}) e var images []*cvm.Image var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { images, errRet = cvmService.DescribeImagesByFilter(ctx, filter, "") if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -161,7 +164,7 @@ func dataSourceTencentCloudImageRead(d *schema.ResourceData, meta interface{}) e output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err = writeToFile(output.(string), resultImageId); err != nil { + if err = tccommon.WriteToFile(output.(string), resultImageId); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_image_test.go b/tencentcloud/services/cvm/data_source_tc_image_test.go similarity index 80% rename from tencentcloud/data_source_tc_image_test.go rename to tencentcloud/services/cvm/data_source_tc_image_test.go index c3d0894203..d4f554013b 100644 --- a/tencentcloud/data_source_tc_image_test.go +++ b/tencentcloud/services/cvm/data_source_tc_image_test.go @@ -1,22 +1,24 @@ -package tencentcloud +package cvm_test import ( "regexp" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudDataSourceImageBase(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTencentCloudDataSourceImageBase, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_image.public_image"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_image.public_image"), resource.TestMatchResourceAttr("data.tencentcloud_image.public_image", "image_id", regexp.MustCompile("^img-")), resource.TestCheckResourceAttrSet("data.tencentcloud_image.public_image", "image_name"), ), @@ -24,7 +26,7 @@ func TestAccTencentCloudDataSourceImageBase(t *testing.T) { { Config: testAccTencentCloudDataSourceImageBaseWithFilter, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_image.public_image"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_image.public_image"), resource.TestMatchResourceAttr("data.tencentcloud_image.public_image", "image_id", regexp.MustCompile("^img-")), resource.TestCheckResourceAttrSet("data.tencentcloud_image.public_image", "image_name"), ), @@ -32,7 +34,7 @@ func TestAccTencentCloudDataSourceImageBase(t *testing.T) { { Config: testAccTencentCloudDataSourceImageBaseWithOsName, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_image.public_image"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_image.public_image"), resource.TestMatchResourceAttr("data.tencentcloud_image.public_image", "image_id", regexp.MustCompile("^img-")), resource.TestCheckResourceAttrSet("data.tencentcloud_image.public_image", "image_name"), ), @@ -40,7 +42,7 @@ func TestAccTencentCloudDataSourceImageBase(t *testing.T) { { Config: testAccTencentCloudDataSourceImageBaseWithImageNameRegex, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_image.public_image"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_image.public_image"), resource.TestMatchResourceAttr("data.tencentcloud_image.public_image", "image_id", regexp.MustCompile("^img-")), resource.TestCheckResourceAttrSet("data.tencentcloud_image.public_image", "image_name"), ), diff --git a/tencentcloud/data_source_tc_images.go b/tencentcloud/services/cvm/data_source_tc_images.go similarity index 92% rename from tencentcloud/data_source_tc_images.go rename to tencentcloud/services/cvm/data_source_tc_images.go index 6c0f9a39d4..b58923010a 100644 --- a/tencentcloud/data_source_tc_images.go +++ b/tencentcloud/services/cvm/data_source_tc_images.go @@ -1,4 +1,4 @@ -package tencentcloud +package cvm import ( "context" @@ -7,13 +7,16 @@ import ( "regexp" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudImages() *schema.Resource { +func DataSourceTencentCloudImages() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudImagesRead, @@ -33,14 +36,14 @@ func dataSourceTencentCloudImages() *schema.Resource { Type: schema.TypeString, Optional: true, ConflictsWith: []string{"os_name"}, - ValidateFunc: validateNameRegex, + ValidateFunc: tccommon.ValidateNameRegex, Description: "A regex string to apply to the image list returned by TencentCloud, conflict with 'os_name'. **NOTE**: it is not wildcard, should look like `image_name_regex = \"^CentOS\\s+6\\.8\\s+64\\w*\"`.", }, "os_name": { Type: schema.TypeString, Optional: true, ConflictsWith: []string{"image_name_regex"}, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, Description: "A string to apply with fuzzy match to the os_name attribute on the image list returned by TencentCloud, conflict with 'image_name_regex'.", }, "instance_type": { @@ -166,17 +169,17 @@ func dataSourceTencentCloudImages() *schema.Resource { } func dataSourceTencentCloudImagesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_images.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_images.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var ( @@ -228,11 +231,11 @@ func dataSourceTencentCloudImagesRead(d *schema.ResourceData, meta interface{}) } var images []*cvm.Image - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { var e error images, e = cvmService.DescribeImagesByFilter(ctx, filter, instanceType) if e != nil { - return retryError(e, InternalError) + return tccommon.RetryError(e, tccommon.InternalError) } return nil }) @@ -300,7 +303,7 @@ func dataSourceTencentCloudImagesRead(d *schema.ResourceData, meta interface{}) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), imageList); err != nil { + if err := tccommon.WriteToFile(output.(string), imageList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_images_test.go b/tencentcloud/services/cvm/data_source_tc_images_test.go similarity index 77% rename from tencentcloud/data_source_tc_images_test.go rename to tencentcloud/services/cvm/data_source_tc_images_test.go index 02bcee802c..c771d6cc8b 100644 --- a/tencentcloud/data_source_tc_images_test.go +++ b/tencentcloud/services/cvm/data_source_tc_images_test.go @@ -1,49 +1,51 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudDataSourceImagesBase(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTencentCloudDataSourceImagesBase, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_images.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_images.foo"), resource.TestCheckResourceAttrSet("data.tencentcloud_images.foo", "images.#"), ), }, { Config: testAccTencentCloudDataSourceImagesBaseWithFilter, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_images.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_images.foo"), resource.TestCheckResourceAttrSet("data.tencentcloud_images.foo", "images.#"), ), }, { Config: testAccTencentCloudDataSourceImagesBaseWithOsName, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_images.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_images.foo"), resource.TestCheckResourceAttrSet("data.tencentcloud_images.foo", "images.#"), ), }, { Config: testAccTencentCloudDataSourceImagesBaseWithImageNameRegex, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_images.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_images.foo"), resource.TestCheckResourceAttrSet("data.tencentcloud_images.foo", "images.#"), ), }, { Config: testAccTencentCloudDataSourceImagesBaseWithInstanceType, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_images.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_images.foo"), resource.TestCheckResourceAttrSet("data.tencentcloud_images.foo", "images.#"), ), }, diff --git a/tencentcloud/data_source_tc_instance_types.go b/tencentcloud/services/cvm/data_source_tc_instance_types.go similarity index 90% rename from tencentcloud/data_source_tc_instance_types.go rename to tencentcloud/services/cvm/data_source_tc_instance_types.go index a8082a4149..5b1fe66b7e 100644 --- a/tencentcloud/data_source_tc_instance_types.go +++ b/tencentcloud/services/cvm/data_source_tc_instance_types.go @@ -1,16 +1,19 @@ -package tencentcloud +package cvm import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceInstanceTypes() *schema.Resource { +func DataSourceTencentCloudInstanceTypes() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudInstanceTypesRead, @@ -125,11 +128,11 @@ func dataSourceInstanceTypes() *schema.Resource { } func dataSourceTencentCloudInstanceTypesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_instance_types.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_instance_types.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } isExcludeSoldOut := d.Get("exclude_sold_out").(bool) @@ -163,10 +166,10 @@ func dataSourceTencentCloudInstanceTypesRead(d *schema.ResourceData, meta interf if zone != "" { filterMap["zone"] = []string{zone} } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instanceSellTypes, errRet = cvmService.DescribeInstancesSellTypeByFilter(ctx, filterMap) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -213,7 +216,7 @@ func dataSourceTencentCloudInstanceTypesRead(d *schema.ResourceData, meta interf output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), typeList); err != nil { + if err := tccommon.WriteToFile(output.(string), typeList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_instance_types_test.go b/tencentcloud/services/cvm/data_source_tc_instance_types_test.go similarity index 87% rename from tencentcloud/data_source_tc_instance_types_test.go rename to tencentcloud/services/cvm/data_source_tc_instance_types_test.go index a550967866..fd58706427 100644 --- a/tencentcloud/data_source_tc_instance_types_test.go +++ b/tencentcloud/services/cvm/data_source_tc_instance_types_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudInstanceTypesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTencentCloudInstanceTypesDataSourceConfigBasic, @@ -27,8 +29,8 @@ func TestAccTencentCloudInstanceTypesDataSource_basic(t *testing.T) { func TestAccTencentCloudInstanceTypesDataSource_sell(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTencentCloudInstanceTypesDataSourceConfigSell, diff --git a/tencentcloud/data_source_tc_instances.go b/tencentcloud/services/cvm/data_source_tc_instances.go similarity index 94% rename from tencentcloud/data_source_tc_instances.go rename to tencentcloud/services/cvm/data_source_tc_instances.go index 83b7333e41..5b201f12a6 100644 --- a/tencentcloud/data_source_tc_instances.go +++ b/tencentcloud/services/cvm/data_source_tc_instances.go @@ -1,17 +1,20 @@ -package tencentcloud +package cvm import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudInstances() *schema.Resource { +func DataSourceTencentCloudInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudInstancesRead, @@ -24,7 +27,7 @@ func dataSourceTencentCloudInstances() *schema.Resource { "instance_name": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 30), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 30), Description: "Name of the instances to be queried.", }, "availability_zone": { @@ -243,11 +246,11 @@ func dataSourceTencentCloudInstances() *schema.Resource { } func dataSourceTencentCloudInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_instances.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_instances.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instanceSetIds []*string @@ -283,10 +286,10 @@ func dataSourceTencentCloudInstancesRead(d *schema.ResourceData, meta interface{ var instances []*cvm.Instance var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instances, errRet = cvmService.DescribeInstanceByFilter(ctx, instanceSetIds, filter) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -353,7 +356,7 @@ func dataSourceTencentCloudInstancesRead(d *schema.ResourceData, meta interface{ output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), instanceList); err != nil { + if err := tccommon.WriteToFile(output.(string), instanceList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_instances_set.go b/tencentcloud/services/cvm/data_source_tc_instances_set.go similarity index 95% rename from tencentcloud/data_source_tc_instances_set.go rename to tencentcloud/services/cvm/data_source_tc_instances_set.go index 4fb40a66be..4f964a74bf 100644 --- a/tencentcloud/data_source_tc_instances_set.go +++ b/tencentcloud/services/cvm/data_source_tc_instances_set.go @@ -1,16 +1,19 @@ -package tencentcloud +package cvm import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudInstancesSet() *schema.Resource { +func DataSourceTencentCloudInstancesSet() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudInstancesSetRead, @@ -23,7 +26,7 @@ func dataSourceTencentCloudInstancesSet() *schema.Resource { "instance_name": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringLengthInRange(1, 30), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 30), Description: "Name of the instances to be queried.", }, "availability_zone": { @@ -232,11 +235,11 @@ func dataSourceTencentCloudInstancesSet() *schema.Resource { } func dataSourceTencentCloudInstancesSetRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_instances_set.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_instances_set.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } filter := make(map[string]string) @@ -333,7 +336,7 @@ func dataSourceTencentCloudInstancesSetRead(d *schema.ResourceData, meta interfa output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), instanceList); err != nil { + if err := tccommon.WriteToFile(output.(string), instanceList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_instances_test.go b/tencentcloud/services/cvm/data_source_tc_instances_test.go similarity index 80% rename from tencentcloud/data_source_tc_instances_test.go rename to tencentcloud/services/cvm/data_source_tc_instances_test.go index 341ad48352..7318ad66f4 100644 --- a/tencentcloud/data_source_tc_instances_test.go +++ b/tencentcloud/services/cvm/data_source_tc_instances_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ func TestAccTencentCloudDataSourceInstancesBase(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { @@ -19,7 +21,7 @@ func TestAccTencentCloudDataSourceInstancesBase(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckTencentCloudInstanceExists("tencentcloud_instance.default"), resource.TestCheckResourceAttrSet("data.tencentcloud_instances.foo", "instance_list.0.instance_id"), - resource.TestCheckResourceAttr("data.tencentcloud_instances.foo", "instance_list.0.instance_name", defaultInsName), + resource.TestCheckResourceAttr("data.tencentcloud_instances.foo", "instance_list.0.instance_name", tcacctest.DefaultInsName), resource.TestCheckResourceAttrSet("data.tencentcloud_instances.foo", "instance_list.0.instance_type"), resource.TestCheckResourceAttrSet("data.tencentcloud_instances.foo", "instance_list.0.cpu"), resource.TestCheckResourceAttrSet("data.tencentcloud_instances.foo", "instance_list.0.memory"), @@ -32,7 +34,7 @@ func TestAccTencentCloudDataSourceInstancesBase(t *testing.T) { }) } -const testAccTencentCloudDataSourceInstancesBase = instanceCommonTestCase + ` +const testAccTencentCloudDataSourceInstancesBase = tcacctest.InstanceCommonTestCase + ` data "tencentcloud_instances" "foo" { instance_id = tencentcloud_instance.default.id instance_name = tencentcloud_instance.default.instance_name diff --git a/tencentcloud/data_source_tc_key_pairs.go b/tencentcloud/services/cvm/data_source_tc_key_pairs.go similarity index 86% rename from tencentcloud/data_source_tc_key_pairs.go rename to tencentcloud/services/cvm/data_source_tc_key_pairs.go index 74976cf19c..6dbbf49d5f 100644 --- a/tencentcloud/data_source_tc_key_pairs.go +++ b/tencentcloud/services/cvm/data_source_tc_key_pairs.go @@ -1,4 +1,4 @@ -package tencentcloud +package cvm import ( "context" @@ -7,13 +7,16 @@ import ( "regexp" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudKeyPairs() *schema.Resource { +func DataSourceTencentCloudKeyPairs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudKeyPairsRead, @@ -82,11 +85,11 @@ func dataSourceTencentCloudKeyPairs() *schema.Resource { } func dataSourceTencentCloudKeyPairsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_key_pairs.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_key_pairs.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } keyId := d.Get("key_id").(string) @@ -115,10 +118,10 @@ func dataSourceTencentCloudKeyPairsRead(d *schema.ResourceData, meta interface{} var keyPairs []*cvm.KeyPair var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { keyPairs, errRet = cvmService.DescribeKeyPairByFilter(ctx, keyId, name, projectId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -158,7 +161,7 @@ func dataSourceTencentCloudKeyPairsRead(d *schema.ResourceData, meta interface{} output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), keyPairList); err != nil { + if err := tccommon.WriteToFile(output.(string), keyPairList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_key_pairs_test.go b/tencentcloud/services/cvm/data_source_tc_key_pairs_test.go similarity index 90% rename from tencentcloud/data_source_tc_key_pairs_test.go rename to tencentcloud/services/cvm/data_source_tc_key_pairs_test.go index 4d07fc4435..fcf010c595 100644 --- a/tencentcloud/data_source_tc_key_pairs_test.go +++ b/tencentcloud/services/cvm/data_source_tc_key_pairs_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudKeyPairsDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckKeyPairDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_placement_groups.go b/tencentcloud/services/cvm/data_source_tc_placement_groups.go similarity index 85% rename from tencentcloud/data_source_tc_placement_groups.go rename to tencentcloud/services/cvm/data_source_tc_placement_groups.go index 946f20518e..4820d818d8 100644 --- a/tencentcloud/data_source_tc_placement_groups.go +++ b/tencentcloud/services/cvm/data_source_tc_placement_groups.go @@ -1,16 +1,19 @@ -package tencentcloud +package cvm import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudPlacementGroups() *schema.Resource { +func DataSourceTencentCloudPlacementGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudPlacementGroupsRead, @@ -81,11 +84,11 @@ func dataSourceTencentCloudPlacementGroups() *schema.Resource { } func dataSourceTencentCloudPlacementGroupsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_placement_groups.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_placement_groups.read")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var placementGroupId string @@ -99,10 +102,10 @@ func dataSourceTencentCloudPlacementGroupsRead(d *schema.ResourceData, meta inte var placementGroups []*cvm.DisasterRecoverGroup var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { placementGroups, errRet = cvmService.DescribePlacementGroupByFilter(ctx, placementGroupId, name) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -135,7 +138,7 @@ func dataSourceTencentCloudPlacementGroupsRead(d *schema.ResourceData, meta inte output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), placementGroupList); err != nil { + if err := tccommon.WriteToFile(output.(string), placementGroupList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_placement_groups_test.go b/tencentcloud/services/cvm/data_source_tc_placement_groups_test.go similarity index 86% rename from tencentcloud/data_source_tc_placement_groups_test.go rename to tencentcloud/services/cvm/data_source_tc_placement_groups_test.go index 863f010a5b..6345f42234 100644 --- a/tencentcloud/data_source_tc_placement_groups_test.go +++ b/tencentcloud/services/cvm/data_source_tc_placement_groups_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudPlacementGroupsDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckPlacementGroupDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_reserved_instance_configs.go b/tencentcloud/services/cvm/data_source_tc_reserved_instance_configs.go similarity index 87% rename from tencentcloud/data_source_tc_reserved_instance_configs.go rename to tencentcloud/services/cvm/data_source_tc_reserved_instance_configs.go index b6c1ef107a..9ab88dc31f 100644 --- a/tencentcloud/data_source_tc_reserved_instance_configs.go +++ b/tencentcloud/services/cvm/data_source_tc_reserved_instance_configs.go @@ -1,17 +1,20 @@ -package tencentcloud +package cvm import ( "context" "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudReservedInstanceConfigs() *schema.Resource { +func DataSourceTencentCloudReservedInstanceConfigs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudReservedInstanceConfigsRead, @@ -24,7 +27,7 @@ func dataSourceTencentCloudReservedInstanceConfigs() *schema.Resource { "duration": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue([]int{31536000, 94608000}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{31536000, 94608000}), Description: "Validity period of the reserved instance. Valid values are `31536000`(1 year) and `94608000`(3 years).", }, "instance_type": { @@ -108,13 +111,13 @@ func dataSourceTencentCloudReservedInstanceConfigs() *schema.Resource { } func dataSourceTencentCloudReservedInstanceConfigsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_reserved_instance_configs.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_reserved_instance_configs.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } filter := make(map[string]string) @@ -136,10 +139,10 @@ func dataSourceTencentCloudReservedInstanceConfigsRead(d *schema.ResourceData, m var configs []*cvm.ReservedInstancesOffering var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { configs, errRet = cvmService.DescribeReservedInstanceConfigs(ctx, filter) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -174,7 +177,7 @@ func dataSourceTencentCloudReservedInstanceConfigsRead(d *schema.ResourceData, m output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), configList); err != nil { + if err := tccommon.WriteToFile(output.(string), configList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_reserved_instance_configs_test.go b/tencentcloud/services/cvm/data_source_tc_reserved_instance_configs_test.go similarity index 72% rename from tencentcloud/data_source_tc_reserved_instance_configs_test.go rename to tencentcloud/services/cvm/data_source_tc_reserved_instance_configs_test.go index e4b35a6b1c..bf81ea1f0d 100644 --- a/tencentcloud/data_source_tc_reserved_instance_configs_test.go +++ b/tencentcloud/services/cvm/data_source_tc_reserved_instance_configs_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudReservedInstanceConfigsDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_INTERNATIONAL) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_INTERNATIONAL) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccReservedInstanceConfigsDataSource, diff --git a/tencentcloud/data_source_tc_reserved_instances.go b/tencentcloud/services/cvm/data_source_tc_reserved_instances.go similarity index 86% rename from tencentcloud/data_source_tc_reserved_instances.go rename to tencentcloud/services/cvm/data_source_tc_reserved_instances.go index 1c414f26ef..2bdbc5394c 100644 --- a/tencentcloud/data_source_tc_reserved_instances.go +++ b/tencentcloud/services/cvm/data_source_tc_reserved_instances.go @@ -1,16 +1,19 @@ -package tencentcloud +package cvm import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudReservedInstances() *schema.Resource { +func DataSourceTencentCloudReservedInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudReservedInstancesRead, @@ -86,11 +89,11 @@ func dataSourceTencentCloudReservedInstances() *schema.Resource { } func dataSourceTencentCloudReservedInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_reserved_instances.read") - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("data_source.tencentcloud_reserved_instances.read") + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } filter := make(map[string]string) @@ -106,10 +109,10 @@ func dataSourceTencentCloudReservedInstancesRead(d *schema.ResourceData, meta in var instances []*cvm.ReservedInstances var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instances, errRet = cvmService.DescribeReservedInstanceByFilter(ctx, filter) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -141,7 +144,7 @@ func dataSourceTencentCloudReservedInstancesRead(d *schema.ResourceData, meta in output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), instanceList); err != nil { + if err := tccommon.WriteToFile(output.(string), instanceList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_reserved_instances_test.go b/tencentcloud/services/cvm/data_source_tc_reserved_instances_test.go similarity index 71% rename from tencentcloud/data_source_tc_reserved_instances_test.go rename to tencentcloud/services/cvm/data_source_tc_reserved_instances_test.go index d3ca2fcd26..69c65a5660 100644 --- a/tencentcloud/data_source_tc_reserved_instances_test.go +++ b/tencentcloud/services/cvm/data_source_tc_reserved_instances_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudReservedInstancesDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_INTERNATIONAL) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_INTERNATIONAL) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccReservedInstancesDataSource, diff --git a/tencentcloud/extension_cbs.go b/tencentcloud/services/cvm/extension_cbs.go similarity index 98% rename from tencentcloud/extension_cbs.go rename to tencentcloud/services/cvm/extension_cbs.go index e4e95efdda..de84f7295c 100644 --- a/tencentcloud/extension_cbs.go +++ b/tencentcloud/services/cvm/extension_cbs.go @@ -1,4 +1,4 @@ -package tencentcloud +package cvm const ( CBS_STORAGE_TYPE_CLOUD_BASIC = "CLOUD_BASIC" diff --git a/tencentcloud/services/cvm/extension_cvm.go b/tencentcloud/services/cvm/extension_cvm.go new file mode 100644 index 0000000000..f1528a0cdd --- /dev/null +++ b/tencentcloud/services/cvm/extension_cvm.go @@ -0,0 +1,118 @@ +package cvm + +const ( + CVM_CHARGE_TYPE_PREPAID = "PREPAID" + CVM_CHARGE_TYPE_POSTPAID = "POSTPAID_BY_HOUR" + CVM_CHARGE_TYPE_SPOTPAID = "SPOTPAID" + CVM_CHARGE_TYPE_CDHPAID = "CDHPAID" + + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PREPAID = "BANDWIDTH_PREPAID" + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_POSTPAID = "BANDWIDTH_POSTPAID_BY_HOUR" + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PACKAGE = "BANDWIDTH_PACKAGE" + CVM_INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID = "TRAFFIC_POSTPAID_BY_HOUR" + + CVM_STATUS_RUNNING = "RUNNING" + CVM_STATUS_STOPPED = "STOPPED" + CVM_STATUS_SHUTDOWN = "SHUTDOWN" + CVM_STATUS_TERMINATING = "TERMINATING" + CVM_STATUS_LAUNCH_FAILED = "LAUNCH_FAILED" + + CVM_LATEST_OPERATION_STATE_OPERATING = "OPERATING" + CVM_LATEST_OPERATION_STATE_SUCCESS = "SUCCESS" + CVM_LATEST_OPERATION_STATE_FAILED = "FAILED" + + CVM_PREPAID_RENEW_FLAG_NOTIFY_NOTIFY_AND_AUTO_RENEW = "NOTIFY_AND_AUTO_RENEW" + CVM_PREPAID_RENEW_FLAG_NOTIFY_AND_MANUAL_RENEW = "NOTIFY_AND_MANUAL_RENEW" + CVM_PREPAID_RENEW_FLAG_DISABLE_NOTIFY_AND_MANUAL_RENEW = "DISABLE_NOTIFY_AND_MANUAL_RENEW" + + CVM_DISK_TYPE_LOCAL_BASIC = "LOCAL_BASIC" + CVM_DISK_TYPE_LOCAL_SSD = "LOCAL_SSD" + CVM_DISK_TYPE_CLOUD_BASIC = "CLOUD_BASIC" + CVM_DISK_TYPE_CLOUD_SSD = "CLOUD_SSD" + CVM_DISK_TYPE_CLOUD_PREMIUM = "CLOUD_PREMIUM" + CVM_DISK_TYPE_CLOUD_BSSD = "CLOUD_BSSD" + CVM_DISK_TYPE_CLOUD_HSSD = "CLOUD_HSSD" + CVM_DISK_TYPE_CLOUD_TSSD = "CLOUD_TSSD" + + CVM_PLACEMENT_GROUP_TYPE_HOST = "HOST" + CVM_PLACEMENT_GROUP_TYPE_SW = "SW" + CVM_PLACEMENT_GROUP_TYPE_RACK = "RACK" + + ZONE_STATE_AVAILABLE = "AVAILABLE" + ZONE_STATE_UNAVAILABLE = "UNAVAILABLE" + + CVM_NOT_FOUND_ERROR = "InvalidInstanceId.NotFound" + KEY_PAIR_NOT_SUPPORT_ERROR = "InvalidParameterValue.KeyPairNotSupported" + KYE_PAIR_INVALID_ERROR = "InvalidKeyPair" + + CVM_SPOT_INSTANCE_TYPE_ONE_TIME = "ONE-TIME" + + CVM_MARKET_TYPE_SPOT = "spot" + + CVM_IMAGE_LOGIN = "TRUE" + CVM_IMAGE_LOGIN_NOT = "FALSE" + + // @Deprecated use cvm.INVALIDPARAMETERVALUE_ZONENOTSUPPORTED + CVM_ZONE_NOT_SUPPORT_ERROR = "InvalidParameterValue.ZoneNotSupported" + // @Deprecated use cvm.RESOURCEINSUFFICIENT_CLOUDDISKSOLDOUT instead + CVM_CLOUD_DISK_SOLD_OUT_ERROR = "ResourceInsufficient.CloudDiskSoldOut" + + CVM_STOP_MODE_KEEP_CHARGING = "KEEP_CHARGING" + CVM_STOP_MODE_STOP_CHARGING = "STOP_CHARGING" + CVM_SELL_STATUS = "SELL" + CVM_SOLD_OUT_STATUS = "SOLD_OUT" + MIDLINE = "-" + UNDERLINE = "_" + IMAGE_SHARE_PERMISSION_SHARE = "SHARE" + IMAGE_SHARE_PERMISSION_CANCEL = "CANCEL" +) + +// Only client error can cvm retry, others will directly returns +var CVM_RETRYABLE_ERROR = []string{ + // client + //"ClientError.NetworkError", + "ClientError.HttpStatusCodeError", +} + +var CVM_CHARGE_TYPE = []string{ + CVM_CHARGE_TYPE_PREPAID, + CVM_CHARGE_TYPE_POSTPAID, + CVM_CHARGE_TYPE_SPOTPAID, + CVM_CHARGE_TYPE_CDHPAID, +} + +var CVM_INTERNET_CHARGE_TYPE = []string{ + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PREPAID, + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_POSTPAID, + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PACKAGE, + CVM_INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID, +} + +var CVM_PREPAID_PERIOD = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36} + +var CVM_PREPAID_RENEW_FLAG = []string{ + CVM_PREPAID_RENEW_FLAG_NOTIFY_NOTIFY_AND_AUTO_RENEW, + CVM_PREPAID_RENEW_FLAG_NOTIFY_AND_MANUAL_RENEW, + CVM_PREPAID_RENEW_FLAG_DISABLE_NOTIFY_AND_MANUAL_RENEW, +} + +var CVM_DISK_TYPE = []string{ + CVM_DISK_TYPE_LOCAL_BASIC, + CVM_DISK_TYPE_LOCAL_SSD, + CVM_DISK_TYPE_CLOUD_BASIC, + CVM_DISK_TYPE_CLOUD_SSD, + CVM_DISK_TYPE_CLOUD_PREMIUM, + CVM_DISK_TYPE_CLOUD_BSSD, + CVM_DISK_TYPE_CLOUD_HSSD, + CVM_DISK_TYPE_CLOUD_TSSD, +} + +var CVM_PLACEMENT_GROUP_TYPE = []string{ + CVM_PLACEMENT_GROUP_TYPE_HOST, + CVM_PLACEMENT_GROUP_TYPE_SW, + CVM_PLACEMENT_GROUP_TYPE_RACK, +} + +var CVM_SPOT_INSTANCE_TYPE = []string{ + CVM_SPOT_INSTANCE_TYPE_ONE_TIME, +} diff --git a/tencentcloud/services/cvm/extension_images.go b/tencentcloud/services/cvm/extension_images.go new file mode 100644 index 0000000000..81cd8215cd --- /dev/null +++ b/tencentcloud/services/cvm/extension_images.go @@ -0,0 +1,6 @@ +package cvm + +const ( + TRUE = "true" + FALSE = "false" +) diff --git a/tencentcloud/services/cvm/extension_security_group.go b/tencentcloud/services/cvm/extension_security_group.go new file mode 100644 index 0000000000..ce5ef31fda --- /dev/null +++ b/tencentcloud/services/cvm/extension_security_group.go @@ -0,0 +1,3 @@ +package cvm + +const DESCRIBE_SECURITY_GROUP_LIMIT = 50 diff --git a/tencentcloud/services/cvm/extension_tags.go b/tencentcloud/services/cvm/extension_tags.go new file mode 100644 index 0000000000..08aae59791 --- /dev/null +++ b/tencentcloud/services/cvm/extension_tags.go @@ -0,0 +1,3 @@ +package cvm + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/services/cvm/extension_vpc.go b/tencentcloud/services/cvm/extension_vpc.go new file mode 100644 index 0000000000..6f5646dc6b --- /dev/null +++ b/tencentcloud/services/cvm/extension_vpc.go @@ -0,0 +1,327 @@ +package cvm + +/* +all gate way types +https://cloud.tencent.com/document/api/215/15824#Route +*/ +const GATE_WAY_TYPE_CVM = "CVM" +const GATE_WAY_TYPE_VPN = "VPN" +const GATE_WAY_TYPE_DIRECTCONNECT = "DIRECTCONNECT" +const GATE_WAY_TYPE_PEERCONNECTION = "PEERCONNECTION" +const GATE_WAY_TYPE_SSLVPN = "SSLVPN" +const GATE_WAY_TYPE_HAVIP = "HAVIP" +const GATE_WAY_TYPE_NAT = "NAT" +const GATE_WAY_TYPE_NORMAL_CVM = "NORMAL_CVM" +const GATE_WAY_TYPE_EIP = "EIP" +const GATE_WAY_TYPE_CCN = "CCN" +const GATE_WAY_TYPE_LOCAL_GATEWAY = "LOCAL_GATEWAY" + +var ALL_GATE_WAY_TYPES = []string{ + GATE_WAY_TYPE_CVM, + GATE_WAY_TYPE_VPN, + GATE_WAY_TYPE_DIRECTCONNECT, + GATE_WAY_TYPE_PEERCONNECTION, + GATE_WAY_TYPE_SSLVPN, + GATE_WAY_TYPE_HAVIP, + GATE_WAY_TYPE_NAT, + GATE_WAY_TYPE_NORMAL_CVM, + GATE_WAY_TYPE_EIP, + GATE_WAY_TYPE_CCN, + GATE_WAY_TYPE_LOCAL_GATEWAY, +} + +const VPC_SERVICE_TYPE = "vpc" + +/* +EIP +*/ +const ( + EIP_STATUS_CREATING = "CREATING" + EIP_STATUS_BINDING = "BINDING" + EIP_STATUS_BIND = "BIND" + EIP_STATUS_UNBINDING = "UNBINDING" + EIP_STATUS_UNBIND = "UNBIND" + EIP_STATUS_OFFLINING = "OFFLINING" + EIP_STATUS_BIND_ENI = "BIND_ENI" + + EIP_TYPE_EIP = "EIP" + EIP_TYPE_ANYCAST = "AnycastEIP" + EIP_TYPE_HIGH_QUALITY = "HighQualityEIP" + EIP_TYPE_ANTI_DDOS = "AntiDDoSEIP" + + EIP_ANYCAST_ZONE_GLOBAL = "ANYCAST_ZONE_GLOBAL" + EIP_ANYCAST_ZONE_OVERSEAS = "ANYCAST_ZONE_OVERSEAS" + + EIP_INTERNET_PROVIDER_BGP = "BGP" + EIP_INTERNET_PROVIDER_CMCC = "CMCC" + EIP_INTERNET_PROVIDER_CTCC = "CTCC" + EIP_INTERNET_PROVIDER_CUCC = "CUCC" + + EIP_RESOURCE_TYPE = "eip" + + EIP_TASK_STATUS_SUCCESS = "SUCCESS" + EIP_TASK_STATUS_RUNNING = "RUNNING" + EIP_TASK_STATUS_FAILED = "FAILED" +) + +var EIP_INTERNET_PROVIDER = []string{ + EIP_INTERNET_PROVIDER_BGP, + EIP_INTERNET_PROVIDER_CMCC, + EIP_INTERNET_PROVIDER_CTCC, + EIP_INTERNET_PROVIDER_CUCC, +} + +var EIP_TYPE = []string{ + EIP_TYPE_EIP, + EIP_TYPE_ANYCAST, + EIP_TYPE_HIGH_QUALITY, + EIP_TYPE_ANTI_DDOS, +} + +var EIP_ANYCAST_ZONE = []string{ + EIP_ANYCAST_ZONE_GLOBAL, + EIP_ANYCAST_ZONE_OVERSEAS, +} + +var EIP_AVAILABLE_PERIOD = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36} + +// ENI +const ( + ENI_DESCRIBE_LIMIT = 100 +) + +const ( + ENI_STATE_PENDING = "PENDING" + ENI_STATE_AVAILABLE = "AVAILABLE" + ENI_STATE_ATTACHING = "ATTACHING" + ENI_STATE_DETACHING = "DETACHING" + ENI_STATE_DELETING = "DELETING" +) + +const ( + ENI_IP_PENDING = "PENDING" + ENI_IP_AVAILABLE = "AVAILABLE" + ENI_IP_ATTACHING = "ATTACHING" + ENI_IP_DETACHING = "DETACHING" + ENI_IP_DELETING = "DELETING" +) + +/* +NAT +*/ + +const ( + NAT_DESCRIBE_LIMIT = 100 + NAT_EIP_MAX_LIMIT = 10 +) + +const ( + NAT_FAILED_STATE = "FAILED" +) + +const ( + NAT_GATEWAY_TYPE_SUBNET = "SUBNET" + NAT_GATEWAY_TYPE_NETWORK_INTERFACE = "NETWORKINTERFACE" +) + +/* +VPN +*/ + +const ( + VPN_DESCRIBE_LIMIT = 100 +) + +const ( + VPN_TASK_STATUS_SUCCESS = "SUCCESS" + VPN_TASK_STATUS_RUNNING = "RUNNING" + VPN_TASK_STATUS_FAILED = "FAILED" +) + +const ( + VPN_STATE_PENDING = "PENDING" + VPN_STATE_DELETING = "DELETING" + VPN_STATE_AVAILABLE = "AVAILABLE" +) + +var VPN_STATE = []string{ + VPN_STATE_PENDING, + VPN_STATE_DELETING, + VPN_STATE_AVAILABLE, +} + +const ( + VPN_PERIOD_PREPAID_RENEW_FLAG_AUTO_NOTIFY = "NOTIFY_AND_AUTO_RENEW" + VPN_PERIOD_PREPAID_RENEW_FLAG_NOT = "NOTIFY_AND_MANUAL_RENEW" +) + +var VPN_PERIOD_PREPAID_RENEW_FLAG = []string{ + VPN_PERIOD_PREPAID_RENEW_FLAG_AUTO_NOTIFY, + VPN_PERIOD_PREPAID_RENEW_FLAG_NOT, +} + +const ( + VPN_CHARGE_TYPE_PREPAID = "PREPAID" + VPN_CHARGE_TYPE_POSTPAID_BY_HOUR = "POSTPAID_BY_HOUR" +) + +var VPN_CHARGE_TYPE = []string{ + VPN_CHARGE_TYPE_PREPAID, + VPN_CHARGE_TYPE_POSTPAID_BY_HOUR, +} + +const ( + VPN_PURCHASE_PLAN_PRE_POST = "PREPAID_TO_POSTPAID" +) + +var VPN_PURCHASE_PLAN = []string{ + VPN_PURCHASE_PLAN_PRE_POST, +} + +const ( + VPN_RESTRICT_STATE_NORMAL = "NORMAL" + VPN_RESTRICT_STATE_ISOLATE = "PRETECIVELY_ISOLATED" +) + +var VPN_RESTRICT_STATE = []string{ + VPN_RESTRICT_STATE_NORMAL, + VPN_RESTRICT_STATE_ISOLATE, +} + +const ( + VPN_IKE_PROPO_ENCRY_ALGORITHM_3DESCBC = "3DES-CBC" + VPN_IKE_PROPO_ENCRY_ALGORITHM_AESCBC128 = "AES-CBC-128" + VPN_IKE_PROPO_ENCRY_ALGORITHM_AESCBC192 = "AES-CBS-192`" + VPN_IKE_PROPO_ENCRY_ALGORITHM_AESCBC256 = "AES-CBC-256" + VPN_IKE_PROPO_ENCRY_ALGORITHM_DESCBC = "DES-CBC" +) + +var VPN_IKE_PROPO_ENCRY_ALGORITHM = []string{ + VPN_IKE_PROPO_ENCRY_ALGORITHM_3DESCBC, + VPN_IKE_PROPO_ENCRY_ALGORITHM_AESCBC128, + VPN_IKE_PROPO_ENCRY_ALGORITHM_AESCBC192, + VPN_IKE_PROPO_ENCRY_ALGORITHM_AESCBC256, + VPN_IKE_PROPO_ENCRY_ALGORITHM_DESCBC, +} + +const ( + VPN_IKE_PROPO_AUTHEN_ALGORITHM_SHA = "SHA" + VPN_IKE_PROPO_AUTHEN_ALGORITHM_MD5 = "MD5" + VPN_IKE_PROPO_AUTHEN_ALGORITHM_SHA256 = "SHA-256" +) + +var VPN_IKE_PROPO_AUTHEN_ALGORITHM = []string{ + VPN_IKE_PROPO_AUTHEN_ALGORITHM_SHA, + VPN_IKE_PROPO_AUTHEN_ALGORITHM_MD5, + VPN_IKE_PROPO_AUTHEN_ALGORITHM_SHA256, +} + +const ( + VPN_IPSEC_INTEGRITY_ALGORITHM_SHA1 = "SHA1" + VPN_IPSEC_INTEGRITY_ALGORITHM_MD5 = "MD5" + VPN_IPSEC_INTEGRITY_ALGORITHM_SHA256 = "SHA-256" +) + +var VPN_IPSEC_INTEGRITY_ALGORITHM = []string{ + VPN_IPSEC_INTEGRITY_ALGORITHM_SHA1, + VPN_IPSEC_INTEGRITY_ALGORITHM_MD5, + VPN_IPSEC_INTEGRITY_ALGORITHM_SHA256, +} + +const ( + VPN_IKE_EXCHANGE_MODE_AGGRESSIVE = "AGGRESSIVE" + VPN_IKE_EXCHANGE_MODE_MAIN = "MAIN" +) + +var VPN_IKE_EXCHANGE_MODE = []string{ + VPN_IKE_EXCHANGE_MODE_AGGRESSIVE, + VPN_IKE_EXCHANGE_MODE_MAIN, +} + +const ( + VPN_IKE_IDENTITY_ADDRESS = "ADDRESS" + VPN_IKE_IDENTITY_FQDN = "FQDN" +) + +var VPN_IKE_IDENTITY = []string{ + VPN_IKE_IDENTITY_ADDRESS, + VPN_IKE_IDENTITY_FQDN, +} + +const ( + VPN_IKE_DH_GROUP_NAME_GROUP1 = "GROUP1" + VPN_IKE_DH_GROUP_NAME_GROUP2 = "GROUP2" + VPN_IKE_DH_GROUP_NAME_GROUP5 = "GROUP5" + VPN_IKE_DH_GROUP_NAME_GROUP14 = "GROUP14" + VPN_IKE_DH_GROUP_NAME_GROUP24 = "GROUP24" +) + +var VPN_IKE_DH_GROUP_NAME = []string{ + VPN_IKE_DH_GROUP_NAME_GROUP1, + VPN_IKE_DH_GROUP_NAME_GROUP2, + VPN_IKE_DH_GROUP_NAME_GROUP5, + VPN_IKE_DH_GROUP_NAME_GROUP14, + VPN_IKE_DH_GROUP_NAME_GROUP24, +} + +const ( + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP1 = "DH-GROUP1" + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP2 = "DH-GROUP2" + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP5 = "DH-GROUP5" + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP14 = "DH-GROUP14" + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP24 = "DH-GROUP24" + VPN_IPSEC_PFS_DH_GROUP_NAME_NULL = "NULL" +) + +var VPN_IPSEC_PFS_DH_GROUP_NAME = []string{ + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP1, + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP2, + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP5, + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP14, + VPN_IPSEC_PFS_DH_GROUP_NAME_GROUP24, + VPN_IPSEC_PFS_DH_GROUP_NAME_NULL, +} + +const ( + VPN_IPSEC_ENCRY_ALGORITHM_3DESCBC = "3DES-CBC" + VPN_IPSEC_ENCRY_ALGORITHM_AESCBC128 = "AES-CBC-128" + VPN_IPSEC_ENCRY_ALGORITHM_AESCBC192 = "AES-CBS-192`" + VPN_IPSEC_ENCRY_ALGORITHM_AESCBC256 = "AES-CBC-256" + VPN_IPSEC_ENCRY_ALGORITHM_DESCBC = "DES-CBC" + VPN_IPSEC_ENCRY_ALGORITHM_NULL = "NULL" +) + +var VPN_IPSEC_ENCRY_ALGORITHM = []string{ + VPN_IPSEC_ENCRY_ALGORITHM_3DESCBC, + VPN_IPSEC_ENCRY_ALGORITHM_AESCBC128, + VPN_IPSEC_ENCRY_ALGORITHM_AESCBC192, + VPN_IPSEC_ENCRY_ALGORITHM_AESCBC256, + VPN_IPSEC_ENCRY_ALGORITHM_DESCBC, + VPN_IPSEC_ENCRY_ALGORITHM_NULL, +} + +/* +HAVIP +*/ + +const ( + HAVIP_DESCRIBE_LIMIT = 100 +) + +/* +COMMON +*/ +const ( + VPCNotFound = "ResourceNotFound" + VPCUnsupportedOperation = "UnsupportedOperation" +) + +const ( + DPD_ACTION_CLEAR = "clear" + DPD_ACTION_RESTART = "restart" +) + +var DPD_ACTIONS = []string{ + DPD_ACTION_CLEAR, + DPD_ACTION_RESTART, +} diff --git a/tencentcloud/resource_tc_cvm_chc_config.go b/tencentcloud/services/cvm/resource_tc_cvm_chc_config.go similarity index 83% rename from tencentcloud/resource_tc_cvm_chc_config.go rename to tencentcloud/services/cvm/resource_tc_cvm_chc_config.go index 08a225da1f..5ae69a2a4c 100644 --- a/tencentcloud/resource_tc_cvm_chc_config.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_chc_config.go @@ -1,17 +1,20 @@ -package tencentcloud +package cvm import ( "context" "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCvmChcConfig() *schema.Resource { +func ResourceTencentCloudCvmChcConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCvmChcConfigCreate, Update: resourceTencentCloudCvmChcConfigUpdate, @@ -182,10 +185,10 @@ func resourceTencentCloudCvmChcConfig() *schema.Resource { } func resourceTencentCloudCvmChcConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_chc_config.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_chc_config.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( assistChange bool @@ -195,7 +198,7 @@ func resourceTencentCloudCvmChcConfigCreate(d *schema.ResourceData, meta interfa assistRequest = cvm.NewConfigureChcAssistVpcRequest() deployRequest = cvm.NewConfigureChcDeployVpcRequest() ) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if v, ok := d.GetOk("chc_id"); ok { chcId = v.(string) } @@ -204,10 +207,10 @@ func resourceTencentCloudCvmChcConfigCreate(d *schema.ResourceData, meta interfa attributeRequest := cvm.NewModifyChcAttributeRequest() attributeRequest.InstanceName = helper.String(v.(string)) attributeRequest.ChcIds = []*string{&chcId} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ModifyChcAttribute(attributeRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ModifyChcAttribute(attributeRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, attributeRequest.GetAction(), attributeRequest.ToJsonString(), result.ToJsonString()) } @@ -223,10 +226,10 @@ func resourceTencentCloudCvmChcConfigCreate(d *schema.ResourceData, meta interfa attributeRequest := cvm.NewModifyChcAttributeRequest() attributeRequest.DeviceType = helper.String(v.(string)) attributeRequest.ChcIds = []*string{&chcId} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ModifyChcAttribute(attributeRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ModifyChcAttribute(attributeRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, attributeRequest.GetAction(), attributeRequest.ToJsonString(), result.ToJsonString()) } @@ -244,10 +247,10 @@ func resourceTencentCloudCvmChcConfigCreate(d *schema.ResourceData, meta interfa attributeRequest.BmcUser = helper.String(bmcUser.(string)) attributeRequest.Password = helper.String(password.(string)) attributeRequest.ChcIds = []*string{&chcId} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ModifyChcAttribute(attributeRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ModifyChcAttribute(attributeRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, attributeRequest.GetAction(), attributeRequest.ToJsonString(), result.ToJsonString()) } @@ -295,10 +298,10 @@ func resourceTencentCloudCvmChcConfigCreate(d *schema.ResourceData, meta interfa if assistChange { assistRequest.ChcIds = []*string{&chcId} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ConfigureChcAssistVpc(assistRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ConfigureChcAssistVpc(assistRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, assistRequest.GetAction(), assistRequest.ToJsonString(), result.ToJsonString()) } @@ -308,7 +311,7 @@ func resourceTencentCloudCvmChcConfigCreate(d *schema.ResourceData, meta interfa log.Printf("[CRITAL]%s create cvm chcAssistVpc failed, reason:%+v", logId, err) return err } - conf := BuildStateChangeConf([]string{}, []string{"READY"}, 20*readRetryTimeout, time.Second, service.CvmChcInstanceStateRefreshFunc(chcId, []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"READY"}, 20*tccommon.ReadRetryTimeout, time.Second, service.CvmChcInstanceStateRefreshFunc(chcId, []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -352,10 +355,10 @@ func resourceTencentCloudCvmChcConfigCreate(d *schema.ResourceData, meta interfa if deployChange { deployRequest.ChcIds = []*string{&chcId} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ConfigureChcDeployVpc(deployRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ConfigureChcDeployVpc(deployRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, deployRequest.GetAction(), deployRequest.ToJsonString(), result.ToJsonString()) } @@ -366,7 +369,7 @@ func resourceTencentCloudCvmChcConfigCreate(d *schema.ResourceData, meta interfa return err } - conf := BuildStateChangeConf([]string{}, []string{vpcId}, 10*readRetryTimeout, time.Second, service.CvmChcInstanceDeployVpcStateRefreshFunc(chcId, []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{vpcId}, 10*tccommon.ReadRetryTimeout, time.Second, service.CvmChcInstanceDeployVpcStateRefreshFunc(chcId, []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -379,10 +382,10 @@ func resourceTencentCloudCvmChcConfigCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudCvmChcConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_chc_config.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_chc_config.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) chcId := d.Id() @@ -392,10 +395,10 @@ func resourceTencentCloudCvmChcConfigUpdate(d *schema.ResourceData, meta interfa if v, ok := d.GetOk("instance_name"); ok { attributeRequest.InstanceName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ModifyChcAttribute(attributeRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ModifyChcAttribute(attributeRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, attributeRequest.GetAction(), attributeRequest.ToJsonString(), result.ToJsonString()) } @@ -412,10 +415,10 @@ func resourceTencentCloudCvmChcConfigUpdate(d *schema.ResourceData, meta interfa if v, ok := d.GetOk("device_type"); ok { attributeRequest.DeviceType = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ModifyChcAttribute(attributeRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ModifyChcAttribute(attributeRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, attributeRequest.GetAction(), attributeRequest.ToJsonString(), result.ToJsonString()) } @@ -436,10 +439,10 @@ func resourceTencentCloudCvmChcConfigUpdate(d *schema.ResourceData, meta interfa if v, ok := d.GetOk("password"); ok { attributeRequest.Password = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ModifyChcAttribute(attributeRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ModifyChcAttribute(attributeRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, attributeRequest.GetAction(), attributeRequest.ToJsonString(), result.ToJsonString()) } @@ -454,13 +457,13 @@ func resourceTencentCloudCvmChcConfigUpdate(d *schema.ResourceData, meta interfa return resourceTencentCloudCvmChcConfigRead(d, meta) } func resourceTencentCloudCvmChcConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_chc_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_chc_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} chcId := d.Id() params := map[string]interface{}{ @@ -563,21 +566,21 @@ func resourceTencentCloudCvmChcConfigRead(d *schema.ResourceData, meta interface } func resourceTencentCloudCvmChcConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_chc_config.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_chc_config.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} chcId := d.Id() request := cvm.NewRemoveChcDeployVpcRequest() request.ChcIds = []*string{&chcId} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().RemoveChcDeployVpc(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().RemoveChcDeployVpc(request) if e != nil { - return retryError(e) + 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()) } @@ -588,7 +591,7 @@ func resourceTencentCloudCvmChcConfigDelete(d *schema.ResourceData, meta interfa return err } - conf := BuildStateChangeConf([]string{}, []string{""}, 5*readRetryTimeout, time.Second, service.CvmChcInstanceDeployVpcStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{""}, 5*tccommon.ReadRetryTimeout, time.Second, service.CvmChcInstanceDeployVpcStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -609,7 +612,7 @@ func resourceTencentCloudCvmChcConfigDelete(d *schema.ResourceData, meta interfa return err } - conf = BuildStateChangeConf([]string{}, []string{"INIT"}, 10*readRetryTimeout, time.Second, service.CvmChcInstanceStateRefreshFunc(d.Id(), []string{})) + conf = tccommon.BuildStateChangeConf([]string{}, []string{"INIT"}, 10*tccommon.ReadRetryTimeout, time.Second, service.CvmChcInstanceStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e diff --git a/tencentcloud/resource_tc_cvm_chc_config_test.go b/tencentcloud/services/cvm/resource_tc_cvm_chc_config_test.go similarity index 91% rename from tencentcloud/resource_tc_cvm_chc_config_test.go rename to tencentcloud/services/cvm/resource_tc_cvm_chc_config_test.go index de3df9e272..7a66ae1999 100644 --- a/tencentcloud/resource_tc_cvm_chc_config_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_chc_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCvmChcConfigResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmChcConfig, diff --git a/tencentcloud/resource_tc_cvm_export_images.go b/tencentcloud/services/cvm/resource_tc_cvm_export_images.go similarity index 76% rename from tencentcloud/resource_tc_cvm_export_images.go rename to tencentcloud/services/cvm/resource_tc_cvm_export_images.go index e5de53edee..bf77f54f5b 100644 --- a/tencentcloud/resource_tc_cvm_export_images.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_export_images.go @@ -1,16 +1,19 @@ -package tencentcloud +package cvm import ( "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCvmExportImages() *schema.Resource { +func ResourceTencentCloudCvmExportImages() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCvmExportImagesCreate, Read: resourceTencentCloudCvmExportImagesRead, @@ -69,10 +72,10 @@ func resourceTencentCloudCvmExportImages() *schema.Resource { } func resourceTencentCloudCvmExportImagesCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_export_images.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_export_images.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cvm.NewExportImagesRequest() @@ -103,10 +106,10 @@ func resourceTencentCloudCvmExportImagesCreate(d *schema.ResourceData, meta inte request.RoleName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ExportImages(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ExportImages(request) if e != nil { - return retryError(e) + 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()) } @@ -119,9 +122,9 @@ func resourceTencentCloudCvmExportImagesCreate(d *schema.ResourceData, meta inte d.SetId(imageId) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - conf := BuildStateChangeConf([]string{}, []string{"NORMAL"}, 20*readRetryTimeout, time.Second, service.CvmSyncImagesStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"NORMAL"}, 20*tccommon.ReadRetryTimeout, time.Second, service.CvmSyncImagesStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -131,15 +134,15 @@ func resourceTencentCloudCvmExportImagesCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudCvmExportImagesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_export_images.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_export_images.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCvmExportImagesDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_export_images.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_export_images.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cvm_export_images_test.go b/tencentcloud/services/cvm/resource_tc_cvm_export_images_test.go similarity index 72% rename from tencentcloud/resource_tc_cvm_export_images_test.go rename to tencentcloud/services/cvm/resource_tc_cvm_export_images_test.go index 0f754c6e4c..5dac4a992a 100644 --- a/tencentcloud/resource_tc_cvm_export_images_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_export_images_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCvmExportImagesResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmExportImages, diff --git a/tencentcloud/resource_tc_cvm_hpc_cluster.go b/tencentcloud/services/cvm/resource_tc_cvm_hpc_cluster.go similarity index 70% rename from tencentcloud/resource_tc_cvm_hpc_cluster.go rename to tencentcloud/services/cvm/resource_tc_cvm_hpc_cluster.go index 1f57f4f523..70f450f5a7 100644 --- a/tencentcloud/resource_tc_cvm_hpc_cluster.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_hpc_cluster.go @@ -1,17 +1,20 @@ -package tencentcloud +package cvm import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCvmHpcCluster() *schema.Resource { +func ResourceTencentCloudCvmHpcCluster() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCvmHpcClusterCreate, Read: resourceTencentCloudCvmHpcClusterRead, @@ -43,10 +46,10 @@ func resourceTencentCloudCvmHpcCluster() *schema.Resource { } func resourceTencentCloudCvmHpcClusterCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_hpc_cluster.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_hpc_cluster.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cvm.NewCreateHpcClusterRequest() @@ -65,10 +68,10 @@ func resourceTencentCloudCvmHpcClusterCreate(d *schema.ResourceData, meta interf request.Remark = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().CreateHpcCluster(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().CreateHpcCluster(request) if e != nil { - return retryError(e) + 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()) } @@ -91,14 +94,14 @@ func resourceTencentCloudCvmHpcClusterCreate(d *schema.ResourceData, meta interf } func resourceTencentCloudCvmHpcClusterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_hpc_cluster.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_hpc_cluster.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} hpcClusterId := d.Id() @@ -128,10 +131,10 @@ func resourceTencentCloudCvmHpcClusterRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudCvmHpcClusterUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_hpc_cluster.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_hpc_cluster.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cvm.NewModifyHpcClusterAttributeRequest() @@ -151,10 +154,10 @@ func resourceTencentCloudCvmHpcClusterUpdate(d *schema.ResourceData, meta interf } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ModifyHpcClusterAttribute(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ModifyHpcClusterAttribute(request) if e != nil { - return retryError(e) + 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()) } @@ -169,13 +172,13 @@ func resourceTencentCloudCvmHpcClusterUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudCvmHpcClusterDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_hpc_cluster.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_hpc_cluster.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} hpcClusterId := d.Id() if err := service.DeleteCvmHpcClusterById(ctx, hpcClusterId); err != nil { diff --git a/tencentcloud/resource_tc_cvm_hpc_cluster_test.go b/tencentcloud/services/cvm/resource_tc_cvm_hpc_cluster_test.go similarity index 79% rename from tencentcloud/resource_tc_cvm_hpc_cluster_test.go rename to tencentcloud/services/cvm/resource_tc_cvm_hpc_cluster_test.go index e62ab92e34..743db73a69 100644 --- a/tencentcloud/resource_tc_cvm_hpc_cluster_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_hpc_cluster_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCvmHpcClusterResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmHpcCluster, - PreConfig: func() { testAccStepSetRegion(t, "ap-beijing") }, + PreConfig: func() { tcacctest.AccStepSetRegion(t, "ap-beijing") }, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_cvm_hpc_cluster.hpc_cluster", "id"), resource.TestCheckResourceAttrSet("tencentcloud_cvm_hpc_cluster.hpc_cluster", "name"), diff --git a/tencentcloud/resource_tc_cvm_image_share_permission.go b/tencentcloud/services/cvm/resource_tc_cvm_image_share_permission.go similarity index 70% rename from tencentcloud/resource_tc_cvm_image_share_permission.go rename to tencentcloud/services/cvm/resource_tc_cvm_image_share_permission.go index c4df187162..e50943bb2e 100644 --- a/tencentcloud/resource_tc_cvm_image_share_permission.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_image_share_permission.go @@ -1,16 +1,19 @@ -package tencentcloud +package cvm import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCvmImageSharePermission() *schema.Resource { +func ResourceTencentCloudCvmImageSharePermission() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCvmImageSharePermissionCreate, Update: resourceTencentCloudCvmImageSharePermissionUpdate, @@ -40,10 +43,10 @@ func resourceTencentCloudCvmImageSharePermission() *schema.Resource { } func resourceTencentCloudCvmImageSharePermissionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_image_share_permission.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_image_share_permission.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cvm.NewModifyImageSharePermissionRequest() @@ -64,10 +67,10 @@ func resourceTencentCloudCvmImageSharePermissionCreate(d *schema.ResourceData, m request.Permission = helper.String(IMAGE_SHARE_PERMISSION_SHARE) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ModifyImageSharePermission(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ModifyImageSharePermission(request) if e != nil { - return retryError(e) + 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()) } @@ -84,12 +87,12 @@ func resourceTencentCloudCvmImageSharePermissionCreate(d *schema.ResourceData, m } func resourceTencentCloudCvmImageSharePermissionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_image_share_permission.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_image_share_permission.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if d.HasChange("account_ids") { old, new := d.GetChange("account_ids") @@ -115,18 +118,18 @@ func resourceTencentCloudCvmImageSharePermissionUpdate(d *schema.ResourceData, m } func resourceTencentCloudCvmImageSharePermissionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_image_share_permission.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_image_share_permission.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var sharePermissionSet []*cvm.SharePermission - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCvmImageSharePermissionByFilter(ctx, map[string]interface{}{"ImageId": helper.String(d.Id())}) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } sharePermissionSet = result return nil @@ -146,17 +149,17 @@ func resourceTencentCloudCvmImageSharePermissionRead(d *schema.ResourceData, met } func resourceTencentCloudCvmImageSharePermissionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_image_share_permission.delete")() - defer inconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_cvm_image_share_permission.delete")() + defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var sharePermissionSet []*cvm.SharePermission - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCvmImageSharePermissionByFilter(ctx, map[string]interface{}{"ImageId": helper.String(d.Id())}) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } sharePermissionSet = result return nil diff --git a/tencentcloud/resource_tc_cvm_image_share_permission_test.go b/tencentcloud/services/cvm/resource_tc_cvm_image_share_permission_test.go similarity index 77% rename from tencentcloud/resource_tc_cvm_image_share_permission_test.go rename to tencentcloud/services/cvm/resource_tc_cvm_image_share_permission_test.go index 3288beeabb..e2818cf7e7 100644 --- a/tencentcloud/resource_tc_cvm_image_share_permission_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_image_share_permission_test.go @@ -1,16 +1,18 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCvmModifyImageSharePermissionResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmModifyImageSharePermission, diff --git a/tencentcloud/resource_tc_cvm_launch_template.go b/tencentcloud/services/cvm/resource_tc_cvm_launch_template.go similarity index 97% rename from tencentcloud/resource_tc_cvm_launch_template.go rename to tencentcloud/services/cvm/resource_tc_cvm_launch_template.go index 6ba456b26b..2341836046 100644 --- a/tencentcloud/resource_tc_cvm_launch_template.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_launch_template.go @@ -1,16 +1,19 @@ -package tencentcloud +package cvm import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCvmLaunchTemplate() *schema.Resource { +func ResourceTencentCloudCvmLaunchTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCvmLaunchTemplateCreate, Read: resourceTencentCloudCvmLaunchTemplateRead, @@ -605,10 +608,10 @@ func resourceTencentCloudCvmLaunchTemplate() *schema.Resource { } func resourceTencentCloudCvmLaunchTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_launch_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_launch_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cvm.NewCreateLaunchTemplateRequest() @@ -943,10 +946,10 @@ func resourceTencentCloudCvmLaunchTemplateCreate(d *schema.ResourceData, meta in request.DisableApiTermination = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().CreateLaunchTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().CreateLaunchTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -965,14 +968,14 @@ func resourceTencentCloudCvmLaunchTemplateCreate(d *schema.ResourceData, meta in } func resourceTencentCloudCvmLaunchTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_launch_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_launch_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} launchTemplateId := d.Id() @@ -1379,13 +1382,13 @@ func resourceTencentCloudCvmLaunchTemplateRead(d *schema.ResourceData, meta inte } func resourceTencentCloudCvmLaunchTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_launch_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_launch_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} launchTemplateId := d.Id() if err := service.DeleteCvmLaunchTemplateById(ctx, launchTemplateId); err != nil { diff --git a/tencentcloud/resource_tc_cvm_launch_template_default_version.go b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version.go similarity index 63% rename from tencentcloud/resource_tc_cvm_launch_template_default_version.go rename to tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version.go index 0d8cd34d4e..a63ecaa7be 100644 --- a/tencentcloud/resource_tc_cvm_launch_template_default_version.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version.go @@ -1,14 +1,16 @@ -package tencentcloud +package cvm import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudCvmLaunchTemplateDefaultVersion() *schema.Resource { +func ResourceTencentCloudCvmLaunchTemplateDefaultVersion() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCvmLaunchTemplateDefaultVersionCreate, Read: resourceTencentCloudCvmLaunchTemplateDefaultVersionRead, @@ -35,18 +37,18 @@ func resourceTencentCloudCvmLaunchTemplateDefaultVersion() *schema.Resource { } func resourceTencentCloudCvmLaunchTemplateDefaultVersionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_launch_template_default_version.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_launch_template_default_version.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} launchTemplateId := d.Get("launch_template_id").(string) defaultVersion := d.Get("default_version").(int) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := service.ModifyLaunchTemplateDefaultVersion(ctx, launchTemplateId, defaultVersion) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -60,13 +62,13 @@ func resourceTencentCloudCvmLaunchTemplateDefaultVersionCreate(d *schema.Resourc } func resourceTencentCloudCvmLaunchTemplateDefaultVersionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_launch_template_default_version.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_launch_template_default_version.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} launchTemplateId := d.Id() launchTemplateVersions, err := service.DescribeLaunchTemplateVersions(ctx, launchTemplateId) @@ -92,18 +94,18 @@ func resourceTencentCloudCvmLaunchTemplateDefaultVersionRead(d *schema.ResourceD } func resourceTencentCloudCvmLaunchTemplateDefaultVersionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_launch_template_default_version.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_launch_template_default_version.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} if d.HasChange("default_version") { - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := service.ModifyLaunchTemplateDefaultVersion(ctx, d.Id(), d.Get("default_version").(int)) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -116,8 +118,8 @@ func resourceTencentCloudCvmLaunchTemplateDefaultVersionUpdate(d *schema.Resourc } func resourceTencentCloudCvmLaunchTemplateDefaultVersionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_launch_template_default_version.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_launch_template_default_version.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cvm_launch_template_default_version_test.go b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version_test.go similarity index 83% rename from tencentcloud/resource_tc_cvm_launch_template_default_version_test.go rename to tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version_test.go index ad8e0f938a..7223f7a3d5 100644 --- a/tencentcloud/resource_tc_cvm_launch_template_default_version_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_default_version_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCvmLaunchTemplateDefaultVersionResource_basic(t *testing t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmLaunchTemplateDefaultVersion, diff --git a/tencentcloud/resource_tc_cvm_launch_template_test.go b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_test.go similarity index 82% rename from tencentcloud/resource_tc_cvm_launch_template_test.go rename to tencentcloud/services/cvm/resource_tc_cvm_launch_template_test.go index 7f44f1c97b..5884c60a28 100644 --- a/tencentcloud/resource_tc_cvm_launch_template_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCvmLaunchTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmLaunchTemplate, diff --git a/tencentcloud/resource_tc_cvm_launch_template_version.go b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_version.go similarity index 97% rename from tencentcloud/resource_tc_cvm_launch_template_version.go rename to tencentcloud/services/cvm/resource_tc_cvm_launch_template_version.go index 56d848c3be..9406748c71 100644 --- a/tencentcloud/resource_tc_cvm_launch_template_version.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_version.go @@ -1,4 +1,4 @@ -package tencentcloud +package cvm import ( "context" @@ -7,13 +7,16 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { +func ResourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCvmLaunchTemplateVersionCreate, Read: resourceTencentCloudCvmLaunchTemplateVersionRead, @@ -717,10 +720,10 @@ func resourceTencentCloudCvmLaunchTemplateVersion() *schema.Resource { } func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_launch_template_version.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_launch_template_version.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cvm.NewCreateLaunchTemplateVersionRequest() @@ -1057,10 +1060,10 @@ func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, request.DisableApiTermination = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().CreateLaunchTemplateVersion(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().CreateLaunchTemplateVersion(request) if e != nil { - return retryError(e) + 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()) } @@ -1074,22 +1077,22 @@ func resourceTencentCloudCvmLaunchTemplateVersionCreate(d *schema.ResourceData, launchTemplateVersionNumber := *response.Response.LaunchTemplateVersionNumber launchTemplateVersionNumberString := strconv.FormatInt(launchTemplateVersionNumber, 10) - d.SetId(launchTemplateId + FILED_SP + launchTemplateVersionNumberString) + d.SetId(launchTemplateId + tccommon.FILED_SP + launchTemplateVersionNumberString) return resourceTencentCloudCvmLaunchTemplateVersionRead(d, meta) } func resourceTencentCloudCvmLaunchTemplateVersionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_launch_template_version.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_launch_template_version.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -1490,15 +1493,15 @@ func resourceTencentCloudCvmLaunchTemplateVersionRead(d *schema.ResourceData, me } func resourceTencentCloudCvmLaunchTemplateVersionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_launch_template_version.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_launch_template_version.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_cvm_launch_template_version_test.go b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_version_test.go similarity index 85% rename from tencentcloud/resource_tc_cvm_launch_template_version_test.go rename to tencentcloud/services/cvm/resource_tc_cvm_launch_template_version_test.go index 39d60c6e28..d8eef76859 100644 --- a/tencentcloud/resource_tc_cvm_launch_template_version_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_launch_template_version_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCvmLaunchTemplateVersionResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmLaunchTemplateVersion, diff --git a/tencentcloud/resource_tc_cvm_reboot_instance.go b/tencentcloud/services/cvm/resource_tc_cvm_reboot_instance.go similarity index 77% rename from tencentcloud/resource_tc_cvm_reboot_instance.go rename to tencentcloud/services/cvm/resource_tc_cvm_reboot_instance.go index 6c247be120..ff6da860f8 100644 --- a/tencentcloud/resource_tc_cvm_reboot_instance.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_reboot_instance.go @@ -1,15 +1,18 @@ -package tencentcloud +package cvm import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCvmRebootInstance() *schema.Resource { +func ResourceTencentCloudCvmRebootInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCvmRebootInstanceCreate, Read: resourceTencentCloudCvmRebootInstanceRead, @@ -44,10 +47,10 @@ func resourceTencentCloudCvmRebootInstance() *schema.Resource { } func resourceTencentCloudCvmRebootInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_reboot_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_reboot_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cvm.NewRebootInstancesRequest() instanceId := d.Get("instance_id").(string) @@ -63,10 +66,10 @@ func resourceTencentCloudCvmRebootInstanceCreate(d *schema.ResourceData, meta in request.StopType = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().RebootInstances(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().RebootInstances(request) if e != nil { - return retryError(e) + 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()) } @@ -83,15 +86,15 @@ func resourceTencentCloudCvmRebootInstanceCreate(d *schema.ResourceData, meta in } func resourceTencentCloudCvmRebootInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_reboot_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_reboot_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCvmRebootInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_reboot_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_reboot_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cvm_reboot_instance_test.go b/tencentcloud/services/cvm/resource_tc_cvm_reboot_instance_test.go similarity index 70% rename from tencentcloud/resource_tc_cvm_reboot_instance_test.go rename to tencentcloud/services/cvm/resource_tc_cvm_reboot_instance_test.go index f6c0ee39b1..baa300b025 100644 --- a/tencentcloud/resource_tc_cvm_reboot_instance_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_reboot_instance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCvmRebootInstanceResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmRebootInstance, @@ -22,7 +24,7 @@ func TestAccTencentCloudCvmRebootInstanceResource_basic(t *testing.T) { }) } -const testAccCvmRebootInstance = defaultRebootCvmVariable + ` +const testAccCvmRebootInstance = tcacctest.DefaultRebootCvmVariable + ` resource "tencentcloud_cvm_reboot_instance" "reboot_instance" { instance_id = var.cvm_id diff --git a/tencentcloud/resource_tc_cvm_renew_instance.go b/tencentcloud/services/cvm/resource_tc_cvm_renew_instance.go similarity index 83% rename from tencentcloud/resource_tc_cvm_renew_instance.go rename to tencentcloud/services/cvm/resource_tc_cvm_renew_instance.go index 31fab38698..37758c7f76 100644 --- a/tencentcloud/resource_tc_cvm_renew_instance.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_renew_instance.go @@ -1,15 +1,18 @@ -package tencentcloud +package cvm import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCvmRenewInstance() *schema.Resource { +func ResourceTencentCloudCvmRenewInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCvmRenewInstanceCreate, Read: resourceTencentCloudCvmRenewInstanceRead, @@ -63,10 +66,10 @@ func resourceTencentCloudCvmRenewInstance() *schema.Resource { } func resourceTencentCloudCvmRenewInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_renew_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_renew_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cvm.NewRenewInstancesRequest() instanceId := d.Get("instance_id").(string) @@ -87,10 +90,10 @@ func resourceTencentCloudCvmRenewInstanceCreate(d *schema.ResourceData, meta int request.RenewPortableDataDisk = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().RenewInstances(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().RenewInstances(request) if e != nil { - return retryError(e) + 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()) } @@ -107,15 +110,15 @@ func resourceTencentCloudCvmRenewInstanceCreate(d *schema.ResourceData, meta int } func resourceTencentCloudCvmRenewInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_renew_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_renew_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCvmRenewInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_renew_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_renew_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cvm_renew_instance_test.go b/tencentcloud/services/cvm/resource_tc_cvm_renew_instance_test.go similarity index 73% rename from tencentcloud/resource_tc_cvm_renew_instance_test.go rename to tencentcloud/services/cvm/resource_tc_cvm_renew_instance_test.go index 036c7641ab..47abe75784 100644 --- a/tencentcloud/resource_tc_cvm_renew_instance_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_renew_instance_test.go @@ -1,15 +1,17 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudCvmRenewInstanceResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmRenewInstance, diff --git a/tencentcloud/resource_tc_cvm_security_group_attachment.go b/tencentcloud/services/cvm/resource_tc_cvm_security_group_attachment.go similarity index 69% rename from tencentcloud/resource_tc_cvm_security_group_attachment.go rename to tencentcloud/services/cvm/resource_tc_cvm_security_group_attachment.go index a98941dedc..03029e0940 100644 --- a/tencentcloud/resource_tc_cvm_security_group_attachment.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_security_group_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package cvm import ( "context" @@ -6,12 +6,14 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" ) -func resourceTencentCloudCvmSecurityGroupAttachment() *schema.Resource { +func ResourceTencentCloudCvmSecurityGroupAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCvmSecurityGroupAttachmentCreate, Read: resourceTencentCloudCvmSecurityGroupAttachmentRead, @@ -38,10 +40,10 @@ func resourceTencentCloudCvmSecurityGroupAttachment() *schema.Resource { } func resourceTencentCloudCvmSecurityGroupAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_security_group_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_security_group_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cvm.NewAssociateSecurityGroupsRequest() securityGroupId := d.Get("security_group_id").(string) @@ -51,10 +53,10 @@ func resourceTencentCloudCvmSecurityGroupAttachmentCreate(d *schema.ResourceData request.SecurityGroupIds = []*string{&securityGroupId} request.InstanceIds = []*string{&instanceId} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().AssociateSecurityGroups(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().AssociateSecurityGroups(request) if e != nil { - return retryError(e) + 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()) } @@ -64,22 +66,22 @@ func resourceTencentCloudCvmSecurityGroupAttachmentCreate(d *schema.ResourceData log.Printf("[CRITAL]%s create cvm securityGroupAttachment failed, reason:%+v", logId, err) return err } - d.SetId(instanceId + FILED_SP + securityGroupId) + d.SetId(instanceId + tccommon.FILED_SP + securityGroupId) return resourceTencentCloudCvmSecurityGroupAttachmentRead(d, meta) } func resourceTencentCloudCvmSecurityGroupAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_security_group_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_security_group_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -109,12 +111,12 @@ func resourceTencentCloudCvmSecurityGroupAttachmentRead(d *schema.ResourceData, } func resourceTencentCloudCvmSecurityGroupAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_security_group_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_security_group_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -124,10 +126,10 @@ func resourceTencentCloudCvmSecurityGroupAttachmentDelete(d *schema.ResourceData request := cvm.NewDisassociateSecurityGroupsRequest() request.SecurityGroupIds = []*string{&securityGroupId} request.InstanceIds = []*string{&instanceId} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().DisassociateSecurityGroups(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().DisassociateSecurityGroups(request) if e != nil { - return retryError(e) + 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()) } diff --git a/tencentcloud/resource_tc_cvm_security_group_attachment_test.go b/tencentcloud/services/cvm/resource_tc_cvm_security_group_attachment_test.go similarity index 82% rename from tencentcloud/resource_tc_cvm_security_group_attachment_test.go rename to tencentcloud/services/cvm/resource_tc_cvm_security_group_attachment_test.go index eac124078b..724fb2a860 100644 --- a/tencentcloud/resource_tc_cvm_security_group_attachment_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_security_group_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCvmSecurityGroupAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmSecurityGroupAttachment, diff --git a/tencentcloud/resource_tc_cvm_sync_image.go b/tencentcloud/services/cvm/resource_tc_cvm_sync_image.go similarity index 76% rename from tencentcloud/resource_tc_cvm_sync_image.go rename to tencentcloud/services/cvm/resource_tc_cvm_sync_image.go index 69f8f9ca4a..a911b0661e 100644 --- a/tencentcloud/resource_tc_cvm_sync_image.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_sync_image.go @@ -1,16 +1,19 @@ -package tencentcloud +package cvm import ( "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCvmSyncImage() *schema.Resource { +func ResourceTencentCloudCvmSyncImage() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCvmSyncImageCreate, Read: resourceTencentCloudCvmSyncImageRead, @@ -61,10 +64,10 @@ func resourceTencentCloudCvmSyncImage() *schema.Resource { } func resourceTencentCloudCvmSyncImageCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_sync_image.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_sync_image.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cvm.NewSyncImagesRequest() imageId := d.Get("image_id").(string) request.ImageIds = []*string{&imageId} @@ -89,10 +92,10 @@ func resourceTencentCloudCvmSyncImageCreate(d *schema.ResourceData, meta interfa request.ImageSetRequired = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().SyncImages(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().SyncImages(request) if e != nil { - return retryError(e) + 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()) } @@ -105,9 +108,9 @@ func resourceTencentCloudCvmSyncImageCreate(d *schema.ResourceData, meta interfa d.SetId(imageId) - service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CvmService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - conf := BuildStateChangeConf([]string{}, []string{"NORMAL"}, 20*readRetryTimeout, time.Second, service.CvmSyncImagesStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"NORMAL"}, 20*tccommon.ReadRetryTimeout, time.Second, service.CvmSyncImagesStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -117,15 +120,15 @@ func resourceTencentCloudCvmSyncImageCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudCvmSyncImageRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_sync_image.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_sync_image.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCvmSyncImageDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cvm_sync_image.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cvm_sync_image.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cvm_sync_image_test.go b/tencentcloud/services/cvm/resource_tc_cvm_sync_image_test.go similarity index 61% rename from tencentcloud/resource_tc_cvm_sync_image_test.go rename to tencentcloud/services/cvm/resource_tc_cvm_sync_image_test.go index 1838617de2..bde180c9d6 100644 --- a/tencentcloud/resource_tc_cvm_sync_image_test.go +++ b/tencentcloud/services/cvm/resource_tc_cvm_sync_image_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cvm_test import ( "context" @@ -6,8 +6,13 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" ) func init() { @@ -15,10 +20,10 @@ func init() { resource.AddTestSweepers("tencentcloud_cvm_sync_image", &resource.Sweeper{ Name: "tencentcloud_cvm_sync_image", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() request := cvm.NewDescribeImagesRequest() response, err := client.UseCvmClient().DescribeImages(request) if err != nil { @@ -30,17 +35,17 @@ func init() { now := time.Now() - createTime := stringTotime(*image.CreatedTime) + createTime := tccommon.StringToTime(*image.CreatedTime) interval := now.Sub(createTime).Minutes() - if strings.HasPrefix(imageName, keepResource) || strings.HasPrefix(imageName, defaultResource) { + if strings.HasPrefix(imageName, tcacctest.KeepResource) || strings.HasPrefix(imageName, tcacctest.DefaultResource) { continue } // less than 30 minute, not delete - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } - service := CvmService{client} + service := svccvm.NewCvmService(client) if err := service.DeleteImage(ctx, imageId); err != nil { continue } @@ -55,8 +60,8 @@ func init() { func TestAccTencentCloudCvmSyncImageResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCvmSyncImage, diff --git a/tencentcloud/resource_tc_eip.go b/tencentcloud/services/cvm/resource_tc_eip.go similarity index 81% rename from tencentcloud/resource_tc_eip.go rename to tencentcloud/services/cvm/resource_tc_eip.go index 3709ceceeb..2281ee8646 100644 --- a/tencentcloud/resource_tc_eip.go +++ b/tencentcloud/services/cvm/resource_tc_eip.go @@ -1,18 +1,21 @@ -package tencentcloud +package cvm import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudEip() *schema.Resource { +func ResourceTencentCloudEip() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudEipCreate, Read: resourceTencentCloudEipRead, @@ -63,14 +66,14 @@ func resourceTencentCloudEip() *schema.Resource { "prepaid_period": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue(EIP_AVAILABLE_PERIOD), + ValidateFunc: tccommon.ValidateAllowedIntValue(EIP_AVAILABLE_PERIOD), Description: "Period of instance. Default value: `1`. Valid value: `1`, `2`, `3`, `4`, `6`, `7`, `8`, `9`, `12`, `24`, `36`. NOTES: must set when `internet_charge_type` is `BANDWIDTH_PREPAID_BY_MONTH`.", }, "auto_renew_flag": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue([]int{0, 1, 2}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1, 2}), Description: "Auto renew flag. 0 - default state (manual renew); 1 - automatic renew; 2 - explicit no automatic renew. NOTES: Only supported prepaid EIP.", }, @@ -119,12 +122,12 @@ func resourceTencentCloudEip() *schema.Resource { } func resourceTencentCloudEipCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eip.create")() + defer tccommon.LogElapsed("resource.tencentcloud_eip.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() vpcService := VpcService{client: client} tagService := TagService{client: client} region := client.Region @@ -181,13 +184,13 @@ func resourceTencentCloudEipCreate(d *schema.ResourceData, meta interface{}) err } eipId := "" - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err := client.UseVpcClient().AllocateAddresses(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) - return retryError(err) + return tccommon.RetryError(err) } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) @@ -204,7 +207,7 @@ func resourceTencentCloudEipCreate(d *schema.ResourceData, meta interface{}) err d.SetId(eipId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - resourceName := BuildTagResourceName(VPC_SERVICE_TYPE, EIP_RESOURCE_TYPE, region, eipId) + resourceName := tccommon.BuildTagResourceName(VPC_SERVICE_TYPE, EIP_RESOURCE_TYPE, region, eipId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { log.Printf("[CRITAL]%s set eip tags failed: %+v", logId, err) return err @@ -212,10 +215,10 @@ func resourceTencentCloudEipCreate(d *schema.ResourceData, meta interface{}) err } // wait for status - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { eip, errRet := vpcService.DescribeEipById(ctx, eipId) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } if eip != nil && *eip.AddressStatus == EIP_STATUS_CREATING { return resource.RetryableError(fmt.Errorf("eip is still creating")) @@ -230,23 +233,23 @@ func resourceTencentCloudEipCreate(d *schema.ResourceData, meta interface{}) err } func resourceTencentCloudEipRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eip.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_eip.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() vpcService := VpcService{client: client} tagService := TagService{client: client} region := client.Region eipId := d.Id() var eip *vpc.Address - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := vpcService.DescribeEipById(ctx, eipId) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } eip = instance return nil @@ -296,12 +299,12 @@ func resourceTencentCloudEipRead(d *schema.ResourceData, meta interface{}) error } func resourceTencentCloudEipUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eip.update")() + defer tccommon.LogElapsed("resource.tencentcloud_eip.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() vpcService := VpcService{client: client} tagService := TagService{client: client} region := client.Region @@ -376,7 +379,7 @@ func resourceTencentCloudEipUpdate(d *schema.ResourceData, meta interface{}) err if d.HasChange("tags") { oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName(VPC_SERVICE_TYPE, EIP_RESOURCE_TYPE, region, eipId) + resourceName := tccommon.BuildTagResourceName(VPC_SERVICE_TYPE, EIP_RESOURCE_TYPE, region, eipId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { log.Printf("[CRITAL]%s update eip tags failed: %+v", logId, err) @@ -391,18 +394,18 @@ func resourceTencentCloudEipUpdate(d *schema.ResourceData, meta interface{}) err } func resourceTencentCloudEipDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eip.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_eip.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) vpcService := VpcService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } eipId := d.Id() - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := vpcService.UnattachEip(ctx, eipId) if errRet != nil { - return retryError(errRet, "DesOperation.MutexTaskRunning") + return tccommon.RetryError(errRet, "DesOperation.MutexTaskRunning") } return nil }) @@ -410,10 +413,10 @@ func resourceTencentCloudEipDelete(d *schema.ResourceData, meta interface{}) err return err } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := vpcService.DeleteEip(ctx, eipId) if errRet != nil { - return retryError(errRet, "DesOperation.MutexTaskRunning", "OperationDenied.MutexTaskRunning") + return tccommon.RetryError(errRet, "DesOperation.MutexTaskRunning", "OperationDenied.MutexTaskRunning") } return nil }) @@ -428,10 +431,10 @@ func resourceTencentCloudEipDelete(d *schema.ResourceData, meta interface{}) err if internetChargeType == "BANDWIDTH_PREPAID_BY_MONTH" { // isolated - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { eip, errRet := vpcService.DescribeEipById(ctx, eipId) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } if !*eip.IsArrears { return resource.RetryableError(fmt.Errorf("eip is still isolate")) @@ -443,10 +446,10 @@ func resourceTencentCloudEipDelete(d *schema.ResourceData, meta interface{}) err } // release - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := vpcService.DeleteEip(ctx, eipId) if errRet != nil { - return retryError(errRet, "DesOperation.MutexTaskRunning", "OperationDenied.MutexTaskRunning") + return tccommon.RetryError(errRet, "DesOperation.MutexTaskRunning", "OperationDenied.MutexTaskRunning") } return nil }) @@ -455,10 +458,10 @@ func resourceTencentCloudEipDelete(d *schema.ResourceData, meta interface{}) err } } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { eip, errRet := vpcService.DescribeEipById(ctx, eipId) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } if eip != nil { return resource.RetryableError(fmt.Errorf("eip is still deleting")) diff --git a/tencentcloud/resource_tc_eip_address_transform.go b/tencentcloud/services/cvm/resource_tc_eip_address_transform.go similarity index 64% rename from tencentcloud/resource_tc_eip_address_transform.go rename to tencentcloud/services/cvm/resource_tc_eip_address_transform.go index cc2c2c12fe..1e92fc38b3 100644 --- a/tencentcloud/resource_tc_eip_address_transform.go +++ b/tencentcloud/services/cvm/resource_tc_eip_address_transform.go @@ -1,16 +1,19 @@ -package tencentcloud +package cvm import ( "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" eip "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudEipAddressTransform() *schema.Resource { +func ResourceTencentCloudEipAddressTransform() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudEipAddressTransformCreate, Read: resourceTencentCloudEipAddressTransformRead, @@ -30,10 +33,10 @@ func resourceTencentCloudEipAddressTransform() *schema.Resource { } func resourceTencentCloudEipAddressTransformCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eip_address_transform.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_eip_address_transform.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = eip.NewTransformAddressRequest() @@ -45,10 +48,10 @@ func resourceTencentCloudEipAddressTransformCreate(d *schema.ResourceData, meta request.InstanceId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().TransformAddress(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().TransformAddress(request) if e != nil { - return retryError(e) + 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()) } @@ -63,9 +66,9 @@ func resourceTencentCloudEipAddressTransformCreate(d *schema.ResourceData, meta taskId := *response.Response.TaskId d.SetId(instanceId) - service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - conf := BuildStateChangeConf([]string{}, []string{"SUCCESS"}, 1*readRetryTimeout, time.Second, service.VpcIpv6AddressStateRefreshFunc(helper.UInt64ToStr(taskId), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"SUCCESS"}, 1*tccommon.ReadRetryTimeout, time.Second, service.VpcIpv6AddressStateRefreshFunc(helper.UInt64ToStr(taskId), []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -75,15 +78,15 @@ func resourceTencentCloudEipAddressTransformCreate(d *schema.ResourceData, meta } func resourceTencentCloudEipAddressTransformRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eip_address_transform.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_eip_address_transform.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudEipAddressTransformDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eip_address_transform.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_eip_address_transform.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_eip_address_transform_test.go b/tencentcloud/services/cvm/resource_tc_eip_address_transform_test.go similarity index 81% rename from tencentcloud/resource_tc_eip_address_transform_test.go rename to tencentcloud/services/cvm/resource_tc_eip_address_transform_test.go index da58f9e12a..f8293f1582 100644 --- a/tencentcloud/resource_tc_eip_address_transform_test.go +++ b/tencentcloud/services/cvm/resource_tc_eip_address_transform_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixEipAddressTransformResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccEipAddressTransform, diff --git a/tencentcloud/resource_tc_eip_association.go b/tencentcloud/services/cvm/resource_tc_eip_association.go similarity index 71% rename from tencentcloud/resource_tc_eip_association.go rename to tencentcloud/services/cvm/resource_tc_eip_association.go index 7cf1687c4f..087851a3b0 100644 --- a/tencentcloud/resource_tc_eip_association.go +++ b/tencentcloud/services/cvm/resource_tc_eip_association.go @@ -1,4 +1,4 @@ -package tencentcloud +package cvm import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudEipAssociation() *schema.Resource { +func ResourceTencentCloudEipAssociation() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudEipAssociationCreate, Read: resourceTencentCloudEipAssociationRead, @@ -25,7 +28,7 @@ func resourceTencentCloudEipAssociation() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateStringLengthInRange(1, 25), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 25), Description: "The ID of EIP.", }, "instance_id": { @@ -37,7 +40,7 @@ func resourceTencentCloudEipAssociation() *schema.Resource { "network_interface_id", "private_ip", }, - ValidateFunc: validateStringLengthInRange(1, 25), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 25), Description: "The CVM or CLB instance id going to bind with the EIP. This field is conflict with `network_interface_id` and `private_ip fields`.", }, "network_interface_id": { @@ -45,7 +48,7 @@ func resourceTencentCloudEipAssociation() *schema.Resource { ForceNew: true, Optional: true, Computed: true, - ValidateFunc: validateStringLengthInRange(1, 25), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 25), ConflictsWith: []string{ "instance_id", }, @@ -56,7 +59,7 @@ func resourceTencentCloudEipAssociation() *schema.Resource { ForceNew: true, Optional: true, Computed: true, - ValidateFunc: validateStringLengthInRange(7, 25), + ValidateFunc: tccommon.ValidateStringLengthInRange(7, 25), ConflictsWith: []string{ "instance_id", }, @@ -67,21 +70,21 @@ func resourceTencentCloudEipAssociation() *schema.Resource { } func resourceTencentCloudEipAssociationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eip_association.create")() + defer tccommon.LogElapsed("resource.tencentcloud_eip_association.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - vpcService = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + vpcService = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} eip *vpc.Address errRet error ) eipId := d.Get("eip_id").(string) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { eip, errRet = vpcService.DescribeEipById(ctx, eipId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if eip == nil { @@ -101,10 +104,10 @@ func resourceTencentCloudEipAssociationCreate(d *schema.ResourceData, meta inter if v, ok := d.GetOk("instance_id"); ok { instanceId := v.(string) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := vpcService.AttachEip(ctx, eipId, instanceId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil @@ -115,10 +118,10 @@ func resourceTencentCloudEipAssociationCreate(d *schema.ResourceData, meta inter } associationId := fmt.Sprintf("%v::%v", eipId, instanceId) - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { eip, errRet = vpcService.DescribeEipById(ctx, eipId) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } if eip == nil { @@ -158,13 +161,13 @@ func resourceTencentCloudEipAssociationCreate(d *schema.ResourceData, meta inter } if needRequest { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AssociateAddress(request) + response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AssociateAddress(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", @@ -178,10 +181,10 @@ func resourceTencentCloudEipAssociationCreate(d *schema.ResourceData, meta inter id := fmt.Sprintf("%v::%v::%v", eipId, networkId, privateIp) - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { eip, errRet = vpcService.DescribeEipById(ctx, eipId) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } if eip == nil { @@ -207,25 +210,25 @@ func resourceTencentCloudEipAssociationCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudEipAssociationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eip_association.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_eip_association.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - vpcService = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + vpcService = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() ) - association, err := parseEipAssociationId(id) + association, err := ParseEipAssociationId(id) if err != nil { return err } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { eip, errRet := vpcService.DescribeEipById(ctx, association.EipId) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } if eip == nil { @@ -252,24 +255,24 @@ func resourceTencentCloudEipAssociationRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudEipAssociationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eip_association.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_eip_association.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - vpcService = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + vpcService = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() ) - association, err := parseEipAssociationId(id) + association, err := ParseEipAssociationId(id) if err != nil { return err } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := vpcService.UnattachEip(ctx, association.EipId) if e != nil { - return retryError(e, "DesOperation.MutexTaskRunning") + return tccommon.RetryError(e, "DesOperation.MutexTaskRunning") } return nil @@ -289,7 +292,7 @@ type EipAssociationId struct { PrivateIp string } -func parseEipAssociationId(associationId string) (association EipAssociationId, errRet error) { +func ParseEipAssociationId(associationId string) (association EipAssociationId, errRet error) { ids := strings.Split(associationId, "::") if len(ids) < 2 || len(ids) > 3 { errRet = fmt.Errorf("Invalid eip association ID: %v", associationId) diff --git a/tencentcloud/resource_tc_eip_association_test.go b/tencentcloud/services/cvm/resource_tc_eip_association_test.go similarity index 72% rename from tencentcloud/resource_tc_eip_association_test.go rename to tencentcloud/services/cvm/resource_tc_eip_association_test.go index 8ca01c0b49..55a0107610 100644 --- a/tencentcloud/resource_tc_eip_association_test.go +++ b/tencentcloud/services/cvm/resource_tc_eip_association_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cvm_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + "context" "fmt" "testing" @@ -14,12 +18,12 @@ func TestAccTencentCloudEipAssociationWithInstance(t *testing.T) { t.Parallel() id := "tencentcloud_eip_association.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEipAssociationDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudEipAssociationWithInstance, Check: resource.ComposeTestCheckFunc( testAccCheckEipAssociationExists(id), @@ -28,7 +32,7 @@ func TestAccTencentCloudEipAssociationWithInstance(t *testing.T) { resource.TestCheckNoResourceAttr(id, "network_interface_id"), resource.TestCheckNoResourceAttr(id, "private_ip"), resource.TestCheckResourceAttrSet("tencentcloud_eip.foo", "public_ip"), - resource.TestCheckResourceAttr("tencentcloud_eip.foo", "name", defaultInsName), + resource.TestCheckResourceAttr("tencentcloud_eip.foo", "name", tcacctest.DefaultInsName), resource.TestCheckResourceAttr("tencentcloud_eip.foo", "status", "UNBIND"), ), }, @@ -46,12 +50,12 @@ func TestAccTencentCloudEipAssociationWithNetworkInterface(t *testing.T) { t.Parallel() id := "tencentcloud_eip_association.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEipAssociationDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudEipAssociationWithNetworkInterface, Check: resource.ComposeTestCheckFunc( testAccCheckEipAssociationExists(id), @@ -60,7 +64,7 @@ func TestAccTencentCloudEipAssociationWithNetworkInterface(t *testing.T) { resource.TestCheckResourceAttrSet(id, "private_ip"), resource.TestCheckNoResourceAttr(id, "instance_id"), resource.TestCheckResourceAttrSet("tencentcloud_eip.foo", "public_ip"), - resource.TestCheckResourceAttr("tencentcloud_eip.foo", "name", defaultInsName), + resource.TestCheckResourceAttr("tencentcloud_eip.foo", "name", tcacctest.DefaultInsName), resource.TestCheckResourceAttr("tencentcloud_eip.foo", "status", "UNBIND"), ), }, @@ -69,17 +73,15 @@ func TestAccTencentCloudEipAssociationWithNetworkInterface(t *testing.T) { } func testAccCheckEipAssociationDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - vpcService := VpcService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + vpcService := svccvm.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_eip_association" { continue } - associationId, err := parseEipAssociationId(rs.Primary.ID) + associationId, err := svccvm.ParseEipAssociationId(rs.Primary.ID) if err != nil { return err @@ -87,10 +89,10 @@ func testAccCheckEipAssociationDestroy(s *terraform.State) error { eip, err := vpcService.DescribeEipById(ctx, associationId.EipId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { eip, err = vpcService.DescribeEipById(ctx, associationId.EipId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -110,8 +112,8 @@ func testAccCheckEipAssociationDestroy(s *terraform.State) error { func testAccCheckEipAssociationExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -120,20 +122,18 @@ func testAccCheckEipAssociationExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("eip association id is not set") } - vpcService := VpcService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } - associationId, err := parseEipAssociationId(rs.Primary.ID) + vpcService := svccvm.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + associationId, err := svccvm.ParseEipAssociationId(rs.Primary.ID) if err != nil { return err } eip, err := vpcService.DescribeEipById(ctx, associationId.EipId) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { eip, err = vpcService.DescribeEipById(ctx, associationId.EipId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -148,7 +148,7 @@ func testAccCheckEipAssociationExists(n string) resource.TestCheckFunc { } } -const testAccTencentCloudEipAssociationWithInstance = defaultInstanceVariable + ` +const testAccTencentCloudEipAssociationWithInstance = tcacctest.DefaultInstanceVariable + ` resource "tencentcloud_eip" "foo" { name = var.instance_name } @@ -167,7 +167,7 @@ resource "tencentcloud_eip_association" "foo" { } ` -const testAccTencentCloudEipAssociationWithNetworkInterface = defaultVpcVariable + ` +const testAccTencentCloudEipAssociationWithNetworkInterface = tcacctest.DefaultVpcVariable + ` resource "tencentcloud_eip" "foo" { name = var.instance_name } diff --git a/tencentcloud/resource_tc_eip_normal_address_return.go b/tencentcloud/services/cvm/resource_tc_eip_normal_address_return.go similarity index 67% rename from tencentcloud/resource_tc_eip_normal_address_return.go rename to tencentcloud/services/cvm/resource_tc_eip_normal_address_return.go index edc2f10a71..1800e802f1 100644 --- a/tencentcloud/resource_tc_eip_normal_address_return.go +++ b/tencentcloud/services/cvm/resource_tc_eip_normal_address_return.go @@ -1,14 +1,16 @@ -package tencentcloud +package cvm import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" ) -func resourceTencentCloudEipNormalAddressReturn() *schema.Resource { +func ResourceTencentCloudEipNormalAddressReturn() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudEipNormalAddressReturnCreate, Read: resourceTencentCloudEipNormalAddressReturnRead, @@ -28,10 +30,10 @@ func resourceTencentCloudEipNormalAddressReturn() *schema.Resource { } func resourceTencentCloudEipNormalAddressReturnCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eip_normal_address_return.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_eip_normal_address_return.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = vpc.NewReturnNormalAddressesRequest() @@ -42,14 +44,14 @@ func resourceTencentCloudEipNormalAddressReturnCreate(d *schema.ResourceData, me for i := range addressIpsSet { addressIp := addressIpsSet[i].(string) request.AddressIps = append(request.AddressIps, &addressIp) - addressIps = addressIp + FILED_SP + addressIps = addressIp + tccommon.FILED_SP } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().ReturnNormalAddresses(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ReturnNormalAddresses(request) if e != nil { - return retryError(e) + 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()) } @@ -66,15 +68,15 @@ func resourceTencentCloudEipNormalAddressReturnCreate(d *schema.ResourceData, me } func resourceTencentCloudEipNormalAddressReturnRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eip_normal_address_return.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_eip_normal_address_return.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudEipNormalAddressReturnDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eip_normal_address_return.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_eip_normal_address_return.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_eip_normal_address_return_test.go b/tencentcloud/services/cvm/resource_tc_eip_normal_address_return_test.go similarity index 78% rename from tencentcloud/resource_tc_eip_normal_address_return_test.go rename to tencentcloud/services/cvm/resource_tc_eip_normal_address_return_test.go index 20f56469c8..434c899f7d 100644 --- a/tencentcloud/resource_tc_eip_normal_address_return_test.go +++ b/tencentcloud/services/cvm/resource_tc_eip_normal_address_return_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixEipNormalAddressReturnResource_basic(t *testing.T t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccEipNormalAddressReturn, diff --git a/tencentcloud/resource_tc_eip_public_address_adjust.go b/tencentcloud/services/cvm/resource_tc_eip_public_address_adjust.go similarity index 65% rename from tencentcloud/resource_tc_eip_public_address_adjust.go rename to tencentcloud/services/cvm/resource_tc_eip_public_address_adjust.go index 0fbf497efc..9de078e943 100644 --- a/tencentcloud/resource_tc_eip_public_address_adjust.go +++ b/tencentcloud/services/cvm/resource_tc_eip_public_address_adjust.go @@ -1,16 +1,19 @@ -package tencentcloud +package cvm import ( "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudEipPublicAddressAdjust() *schema.Resource { +func ResourceTencentCloudEipPublicAddressAdjust() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudEipPublicAddressAdjustCreate, Read: resourceTencentCloudEipPublicAddressAdjustRead, @@ -33,12 +36,12 @@ func resourceTencentCloudEipPublicAddressAdjust() *schema.Resource { } func resourceTencentCloudEipPublicAddressAdjustCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_vpc_public_address_adjust.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_vpc_public_address_adjust.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - service = VpcService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = vpc.NewAdjustPublicAddressRequest() instanceId string addressId string @@ -55,10 +58,10 @@ func resourceTencentCloudEipPublicAddressAdjustCreate(d *schema.ResourceData, me request.AddressId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().AdjustPublicAddress(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AdjustPublicAddress(request) if e != nil { - return retryError(e) + 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()) } @@ -72,26 +75,26 @@ func resourceTencentCloudEipPublicAddressAdjustCreate(d *schema.ResourceData, me return err } - conf := BuildStateChangeConf([]string{}, []string{"SUCCESS"}, 1*readRetryTimeout, time.Second, service.VpcIpv6AddressStateRefreshFunc(helper.UInt64ToStr(taskId), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"SUCCESS"}, 1*tccommon.ReadRetryTimeout, time.Second, service.VpcIpv6AddressStateRefreshFunc(helper.UInt64ToStr(taskId), []string{})) if _, e := conf.WaitForState(); e != nil { return e } - d.SetId(instanceId + FILED_SP + addressId) + d.SetId(instanceId + tccommon.FILED_SP + addressId) return resourceTencentCloudEipPublicAddressAdjustRead(d, meta) } func resourceTencentCloudEipPublicAddressAdjustRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eip_public_address_adjust.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_eip_public_address_adjust.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudEipPublicAddressAdjustDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_eip_public_address_adjust.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_eip_public_address_adjust.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_eip_public_address_adjust_test.go b/tencentcloud/services/cvm/resource_tc_eip_public_address_adjust_test.go similarity index 81% rename from tencentcloud/resource_tc_eip_public_address_adjust_test.go rename to tencentcloud/services/cvm/resource_tc_eip_public_address_adjust_test.go index 4d685cdd29..b515d10a6e 100644 --- a/tencentcloud/resource_tc_eip_public_address_adjust_test.go +++ b/tencentcloud/services/cvm/resource_tc_eip_public_address_adjust_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cvm_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixVpcPublicAddressAdjustResource_basic(t *testing.T t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccVpcPublicAddressAdjust, diff --git a/tencentcloud/resource_tc_eip_test.go b/tencentcloud/services/cvm/resource_tc_eip_test.go similarity index 76% rename from tencentcloud/resource_tc_eip_test.go rename to tencentcloud/services/cvm/resource_tc_eip_test.go index 08eb6260cc..ba4e38f5bc 100644 --- a/tencentcloud/resource_tc_eip_test.go +++ b/tencentcloud/services/cvm/resource_tc_eip_test.go @@ -1,6 +1,11 @@ -package tencentcloud +package cvm_test import ( + tcprovider "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + "context" "fmt" "log" @@ -21,18 +26,16 @@ func init() { } func testSweepEipInstance(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - sharedClient, err := sharedClientForRegion(region) + sharedClient, err := tcacctest.SharedClientForRegion(region) if err != nil { return fmt.Errorf("getting tencentcloud client error: %s", err.Error()) } - client := sharedClient.(*TencentCloudClient) + client := sharedClient.(tccommon.ProviderMeta) - vpcService := VpcService{ - client: client.apiV3Conn, - } + vpcService := svccvm.NewVpcService(client.GetAPIV3Conn()) instances, err := vpcService.DescribeEipByFilter(ctx, nil) if err != nil { @@ -46,16 +49,16 @@ func testSweepEipInstance(region string) error { now := time.Now() - createTime := stringTotime(*v.CreatedTime) + createTime := tccommon.StringToTime(*v.CreatedTime) interval := now.Sub(createTime).Minutes() if instanceName != nil { - if strings.HasPrefix(*instanceName, keepResource) || strings.HasPrefix(*instanceName, defaultResource) { + if strings.HasPrefix(*instanceName, tcacctest.KeepResource) || strings.HasPrefix(*instanceName, tcacctest.DefaultResource) { continue } } // less than 30 minute, not delete - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } @@ -69,8 +72,8 @@ func testSweepEipInstance(region string) error { func TestAccTencentCloudEipResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEipDestroy, Steps: []resource.TestStep{ { @@ -129,12 +132,12 @@ func TestAccTencentCloudEipResource_basic(t *testing.T) { func TestAccTencentCloudEipResource_anycast(t *testing.T) { defer func() { - os.Setenv(PROVIDER_REGION, "") + os.Setenv(tcprovider.PROVIDER_REGION, "") }() - os.Setenv(PROVIDER_REGION, "ap-hongkong") + os.Setenv(tcprovider.PROVIDER_REGION, "ap-hongkong") resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEipDestroy, Steps: []resource.TestStep{ { @@ -152,8 +155,8 @@ func TestAccTencentCloudEipResource_anycast(t *testing.T) { func TestAccTencentCloudEipResource_provider(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEipDestroy, Steps: []resource.TestStep{ { @@ -171,8 +174,8 @@ func TestAccTencentCloudEipResource_provider(t *testing.T) { func TestAccTencentCloudEipResource_bandwidth(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEipDestroy, Steps: []resource.TestStep{ { @@ -190,15 +193,15 @@ func TestAccTencentCloudEipResource_bandwidth(t *testing.T) { func TestAccTencentCloudEipResource_chargetype(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEipDestroy, Steps: []resource.TestStep{ { Config: testAccEipChargeType, Check: resource.ComposeTestCheckFunc( testAccCheckEipExists("tencentcloud_eip.foo"), - resource.TestCheckResourceAttr("tencentcloud_eip.foo", "internet_charge_type", "TRAFFIC_POSTPAID_BY_HOUR"), + resource.TestCheckResourceAttr("tencentcloud_eip.foo", "internet_charge_type", "TRAFFIC_tcacctest.POSTPAID_BY_HOUR"), ), }, { @@ -213,15 +216,15 @@ func TestAccTencentCloudEipResource_chargetype(t *testing.T) { func TestAccTencentCloudEipResource_prepaid(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckEipDestroy, Steps: []resource.TestStep{ { Config: testAccEipPrepaid, Check: resource.ComposeTestCheckFunc( testAccCheckEipExists("tencentcloud_eip.foo"), - resource.TestCheckResourceAttr("tencentcloud_eip.foo", "internet_charge_type", "BANDWIDTH_PREPAID_BY_MONTH"), + resource.TestCheckResourceAttr("tencentcloud_eip.foo", "internet_charge_type", "BANDWIDTH_tcacctest.PREPAID_BY_MONTH"), ), }, { @@ -239,8 +242,8 @@ func TestAccTencentCloudEipResource_prepaid(t *testing.T) { func testAccCheckEipExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -250,15 +253,13 @@ func testAccCheckEipExists(n string) resource.TestCheckFunc { return fmt.Errorf("eip id is not set") } - vpcService := VpcService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + vpcService := svccvm.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) eip, err := vpcService.DescribeEipById(ctx, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { eip, err = vpcService.DescribeEipById(ctx, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -274,11 +275,9 @@ func testAccCheckEipExists(n string) resource.TestCheckFunc { } func testAccCheckEipDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - vpcService := VpcService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + vpcService := svccvm.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_eip" { continue @@ -286,10 +285,10 @@ func testAccCheckEipDestroy(s *terraform.State) error { eip, err := vpcService.DescribeEipById(ctx, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { eip, err = vpcService.DescribeEipById(ctx, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -358,7 +357,7 @@ resource "tencentcloud_eip" "foo" { const testAccEipBandwidth = ` resource "tencentcloud_eip" "foo" { name = "eip_bandwidth" - internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" + internet_charge_type = "TRAFFIC_tcacctest.POSTPAID_BY_HOUR" internet_max_bandwidth_out = 2 } ` @@ -366,14 +365,14 @@ resource "tencentcloud_eip" "foo" { const testAccEipChargeType = ` resource "tencentcloud_eip" "foo" { name = "eip_charge_type" - internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" + internet_charge_type = "TRAFFIC_tcacctest.POSTPAID_BY_HOUR" } ` const testAccEipPrepaid = ` resource "tencentcloud_eip" "foo" { name = "eip_prepaid" - internet_charge_type = "BANDWIDTH_PREPAID_BY_MONTH" + internet_charge_type = "BANDWIDTH_tcacctest.PREPAID_BY_MONTH" prepaid_period = 6 auto_renew_flag = 1 internet_max_bandwidth_out = 2 diff --git a/tencentcloud/resource_tc_image.go b/tencentcloud/services/cvm/resource_tc_image.go similarity index 80% rename from tencentcloud/resource_tc_image.go rename to tencentcloud/services/cvm/resource_tc_image.go index fbed3fc9a1..deb2dcc428 100644 --- a/tencentcloud/resource_tc_image.go +++ b/tencentcloud/services/cvm/resource_tc_image.go @@ -1,18 +1,21 @@ -package tencentcloud +package cvm import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudImage() *schema.Resource { +func ResourceTencentCloudImage() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudImageCreate, Read: resourceTencentCloudImageRead, @@ -81,12 +84,12 @@ func resourceTencentCloudImage() *schema.Resource { } func resourceTencentCloudImageCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_image.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_image.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } request := cvm.NewCreateImageRequest() @@ -150,13 +153,13 @@ func resourceTencentCloudImageCreate(d *schema.ResourceData, meta interface{}) e } imageId := "" - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err := cvmService.client.UseCvmClient().CreateImage(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) - return retryError(err) + return tccommon.RetryError(err) } imageId = *response.Response.ImageId return nil @@ -168,9 +171,9 @@ func resourceTencentCloudImageCreate(d *schema.ResourceData, meta interface{}) e // Wait for the tags attached to the vm since tags attachment it's async while vm creation. if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("cvm", "image", tcClient.Region, imageId) + resourceName := tccommon.BuildTagResourceName("cvm", "image", tcClient.Region, imageId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { // If tags attachment failed, the user will be notified, then plan/apply/update with terraform. return err @@ -190,15 +193,15 @@ func resourceTencentCloudImageCreate(d *schema.ResourceData, meta interface{}) e } func resourceTencentCloudImageRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_image.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_image.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) imageId := d.Id() cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } image, has, errRet := cvmService.DescribeImageById(ctx, imageId, false) @@ -233,7 +236,7 @@ func resourceTencentCloudImageRead(d *schema.ResourceData, meta interface{}) err _ = d.Set("snapshot_ids", snapShotSysDisk) } - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := TagService{client} tags, err := tagService.DescribeResourceTags(ctx, "cvm", "image", client.Region, d.Id()) @@ -245,14 +248,14 @@ func resourceTencentCloudImageRead(d *schema.ResourceData, meta interface{}) err } func resourceTencentCloudImageUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_image.update")() + defer tccommon.LogElapsed("resource.tencentcloud_image.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instanceId := d.Id() cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if d.HasChange("image_name") || d.HasChange("image_description") { @@ -268,10 +271,10 @@ func resourceTencentCloudImageUpdate(d *schema.ResourceData, meta interface{}) e oldInterface, newInterface := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) tagService := TagService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := BuildTagResourceName("cvm", "image", region, instanceId) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := tccommon.BuildTagResourceName("cvm", "image", region, instanceId) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -282,21 +285,21 @@ func resourceTencentCloudImageUpdate(d *schema.ResourceData, meta interface{}) e } func resourceTencentCloudImageDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_image.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_image.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } imageId := d.Id() - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := cvmService.DeleteImage(ctx, imageId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }); nil != err { @@ -304,10 +307,10 @@ func resourceTencentCloudImageDelete(d *schema.ResourceData, meta interface{}) e } //check image - if err := resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err := cvmService.DescribeImageById(ctx, imageId, true) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if has { return resource.RetryableError(fmt.Errorf("image exits error,image_id = %s", imageId)) diff --git a/tencentcloud/resource_tc_image_test.go b/tencentcloud/services/cvm/resource_tc_image_test.go similarity index 77% rename from tencentcloud/resource_tc_image_test.go rename to tencentcloud/services/cvm/resource_tc_image_test.go index aeabf9745e..878919bbe2 100644 --- a/tencentcloud/resource_tc_image_test.go +++ b/tencentcloud/services/cvm/resource_tc_image_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cvm_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + "context" "fmt" "testing" @@ -17,8 +21,8 @@ const ( func TestAccTencentCloudImageResource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckImageDestroy, Steps: []resource.TestStep{ // use snapshot id @@ -53,7 +57,7 @@ func TestAccTencentCloudImageResource(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckImageExists(ImageInstance), resource.TestCheckResourceAttr(ImageInstance, "image_name", "image-instance-keep"), - resource.TestCheckResourceAttr(ImageInstance, "instance_id", defaultCvmId), + resource.TestCheckResourceAttr(ImageInstance, "instance_id", tcacctest.DefaultCvmId), resource.TestCheckResourceAttr(ImageInstance, "data_disk_ids.#", "1"), resource.TestCheckResourceAttr(ImageInstance, "image_description", "create image with instance"), ), @@ -62,7 +66,7 @@ func TestAccTencentCloudImageResource(t *testing.T) { Config: testAccImageWithInstanceUpdate, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttr(ImageInstance, "image_name", "image-instance-update-keep"), - resource.TestCheckResourceAttr(ImageInstance, "instance_id", defaultCvmId), + resource.TestCheckResourceAttr(ImageInstance, "instance_id", tcacctest.DefaultCvmId), resource.TestCheckResourceAttr(ImageInstance, "data_disk_ids.#", "1"), resource.TestCheckResourceAttr(ImageInstance, "image_description", "update image with instance"), ), @@ -72,12 +76,10 @@ func TestAccTencentCloudImageResource(t *testing.T) { } func testAccCheckImageDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cvmService := CvmService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cvmService := svccvm.NewCvmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_image" { continue @@ -85,10 +87,10 @@ func testAccCheckImageDestroy(s *terraform.State) error { _, has, err := cvmService.DescribeImageById(ctx, rs.Primary.ID, true) if err != nil || has { - err = resource.Retry(3*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(3*tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = cvmService.DescribeImageById(ctx, rs.Primary.ID, true) if nil != err { - return retryError(err) + return tccommon.RetryError(err) } if has { return resource.RetryableError(fmt.Errorf("image still exists: %s", rs.Primary.ID)) @@ -109,8 +111,8 @@ func testAccCheckImageDestroy(s *terraform.State) error { func testAccCheckImageExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -119,9 +121,7 @@ func testAccCheckImageExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("image id is not set") } - cvmService := CvmService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cvmService := svccvm.NewCvmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := cvmService.DescribeImageById(ctx, rs.Primary.ID, false) if err != nil { return err @@ -134,7 +134,7 @@ func testAccCheckImageExists(n string) resource.TestCheckFunc { } const ( - testAccImageWithSnapShot = defaultCvmImageVariable + ` + testAccImageWithSnapShot = tcacctest.DefaultCvmImageVariable + ` resource "tencentcloud_image" "image_snap" { image_name = "image-snapshot-keep" snapshot_ids = [var.snap_id] @@ -142,7 +142,7 @@ const ( image_description = "create image with snapshot" }` - testAccImageWithSnapShotUpdate = defaultCvmImageVariable + ` + testAccImageWithSnapShotUpdate = tcacctest.DefaultCvmImageVariable + ` resource "tencentcloud_image" "image_snap" { image_name = "image-snapshot-update-keep" snapshot_ids = [var.snap_id] @@ -150,7 +150,7 @@ const ( image_description = "update image with snapshot" }` - testAccImageWithInstance = defaultCvmImageVariable + ` + testAccImageWithInstance = tcacctest.DefaultCvmImageVariable + ` resource "tencentcloud_image" "image_instance" { image_name = "image-instance-keep" instance_id = var.cvm_id @@ -158,7 +158,7 @@ const ( image_description = "create image with instance" }` - testAccImageWithInstanceUpdate = defaultCvmImageVariable + ` + testAccImageWithInstanceUpdate = tcacctest.DefaultCvmImageVariable + ` resource "tencentcloud_image" "image_instance" { image_name = "image-instance-update-keep" instance_id = var.cvm_id diff --git a/tencentcloud/resource_tc_instance.go b/tencentcloud/services/cvm/resource_tc_instance.go similarity index 88% rename from tencentcloud/resource_tc_instance.go rename to tencentcloud/services/cvm/resource_tc_instance.go index 7639c8b953..8b22723e80 100644 --- a/tencentcloud/resource_tc_instance.go +++ b/tencentcloud/services/cvm/resource_tc_instance.go @@ -1,4 +1,4 @@ -package tencentcloud +package cvm import ( "context" @@ -10,15 +10,18 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudInstance() *schema.Resource { +func ResourceTencentCloudInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudInstanceCreate, Read: resourceTencentCloudInstanceRead, @@ -46,21 +49,21 @@ func resourceTencentCloudInstance() *schema.Resource { Type: schema.TypeInt, Optional: true, Deprecated: "It has been deprecated from version 1.59.18. Use built-in `count` instead.", - ValidateFunc: validateIntegerInRange(1, 100), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 100), Description: "The number of instances to be purchased. Value range:[1,100]; default value: 1.", }, "instance_name": { Type: schema.TypeString, Optional: true, Default: "Terraform-CVM-Instance", - ValidateFunc: validateStringLengthInRange(2, 128), + ValidateFunc: tccommon.ValidateStringLengthInRange(2, 128), Description: "The name of the instance. The max length of instance_name is 60, and default value is `Terraform-CVM-Instance`.", }, "instance_type": { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateInstanceType, + ValidateFunc: tccommon.ValidateInstanceType, Description: "The type of the instance.", }, "hostname": { @@ -84,7 +87,7 @@ func resourceTencentCloudInstance() *schema.Resource { Type: schema.TypeString, Optional: true, Description: "Billing method of a pay-as-you-go instance after shutdown. Available values: `KEEP_CHARGING`,`STOP_CHARGING`. Default `KEEP_CHARGING`.", - ValidateFunc: validateAllowedStringValue([]string{ + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{ CVM_STOP_MODE_KEEP_CHARGING, CVM_STOP_MODE_STOP_CHARGING, }), @@ -100,39 +103,39 @@ func resourceTencentCloudInstance() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CVM_CHARGE_TYPE_POSTPAID, - ValidateFunc: validateAllowedStringValue(CVM_CHARGE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CVM_CHARGE_TYPE), Description: "The charge type of instance. Valid values are `PREPAID`, `POSTPAID_BY_HOUR`, `SPOTPAID` and `CDHPAID`. The default is `POSTPAID_BY_HOUR`. Note: TencentCloud International only supports `POSTPAID_BY_HOUR` and `CDHPAID`. `PREPAID` instance may not allow to delete before expired. `SPOTPAID` instance must set `spot_instance_type` and `spot_max_price` at the same time. `CDHPAID` instance must set `cdh_instance_type` and `cdh_host_id`.", }, "instance_charge_type_prepaid_period": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue(CVM_PREPAID_PERIOD), + ValidateFunc: tccommon.ValidateAllowedIntValue(CVM_PREPAID_PERIOD), Description: "The tenancy (time unit is month) of the prepaid instance, NOTE: it only works when instance_charge_type is set to `PREPAID`. Valid values are `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12`, `24`, `36`.", }, "instance_charge_type_prepaid_renew_flag": { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateAllowedStringValue(CVM_PREPAID_RENEW_FLAG), + ValidateFunc: tccommon.ValidateAllowedStringValue(CVM_PREPAID_RENEW_FLAG), Description: "Auto renewal flag. Valid values: `NOTIFY_AND_AUTO_RENEW`: notify upon expiration and renew automatically, `NOTIFY_AND_MANUAL_RENEW`: notify upon expiration but do not renew automatically, `DISABLE_NOTIFY_AND_MANUAL_RENEW`: neither notify upon expiration nor renew automatically. Default value: `NOTIFY_AND_MANUAL_RENEW`. If this parameter is specified as `NOTIFY_AND_AUTO_RENEW`, the instance will be automatically renewed on a monthly basis if the account balance is sufficient. NOTE: it only works when instance_charge_type is set to `PREPAID`.", }, "spot_instance_type": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(CVM_SPOT_INSTANCE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CVM_SPOT_INSTANCE_TYPE), Description: "Type of spot instance, only support `ONE-TIME` now. Note: it only works when instance_charge_type is set to `SPOTPAID`.", }, "spot_max_price": { Type: schema.TypeString, Optional: true, ForceNew: true, - ValidateFunc: validateStringNumber, + ValidateFunc: tccommon.ValidateStringNumber, Description: "Max price of a spot instance, is the format of decimal string, for example \"0.50\". Note: it only works when instance_charge_type is set to `SPOTPAID`.", }, "cdh_instance_type": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringPrefix("CDH_"), + ValidateFunc: tccommon.ValidateStringPrefix("CDH_"), Description: "Type of instance created on cdh, the value of this parameter is in the format of CDH_XCXG based on the number of CPU cores and memory capacity. Note: it only works when instance_charge_type is set to `CDHPAID`.", }, "cdh_host_id": { @@ -153,7 +156,7 @@ func resourceTencentCloudInstance() *schema.Resource { } return old == "" || new == "" }, - ValidateFunc: validateAllowedStringValue(CVM_INTERNET_CHARGE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CVM_INTERNET_CHARGE_TYPE), Description: "Internet charge type of the instance, Valid values are `BANDWIDTH_PREPAID`, `TRAFFIC_POSTPAID_BY_HOUR`, `BANDWIDTH_POSTPAID_BY_HOUR` and `BANDWIDTH_PACKAGE`. If not set, internet charge type are consistent with the cvm charge type by default. This value takes NO Effect when changing and does not need to be set when `allocate_public_ip` is false.", }, "bandwidth_package_id": { @@ -217,7 +220,7 @@ func resourceTencentCloudInstance() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CVM_DISK_TYPE_CLOUD_PREMIUM, - ValidateFunc: validateAllowedStringValue(CVM_DISK_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CVM_DISK_TYPE), Description: "System disk type. For more information on limits of system disk types, see [Storage Overview](https://intl.cloud.tencent.com/document/product/213/4952). Valid values: `LOCAL_BASIC`: local disk, `LOCAL_SSD`: local SSD disk, `CLOUD_BASIC`: cloud disk, `CLOUD_SSD`: cloud SSD disk, `CLOUD_PREMIUM`: Premium Cloud Storage, `CLOUD_BSSD`: Basic SSD, `CLOUD_HSSD`: Enhanced SSD, `CLOUD_TSSD`: Tremendous SSD. NOTE: If modified, the instance may force stop.", }, "system_disk_size": { @@ -403,11 +406,11 @@ func resourceTencentCloudInstance() *schema.Resource { } func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_instance.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_instance.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } request := cvm.NewRunInstancesRequest() @@ -637,14 +640,14 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{} instanceId := "" - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check("create") - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().RunInstances(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().RunInstances(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) e, ok := err.(*sdkErrors.TencentCloudSDKError) - if ok && IsContains(CVM_RETRYABLE_ERROR, e.Code) { + if ok && tccommon.IsContains(CVM_RETRYABLE_ERROR, e.Code) { return resource.RetryableError(fmt.Errorf("cvm create error: %s, retrying", e.Error())) } return resource.NonRetryableError(err) @@ -670,7 +673,7 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{} err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError { instance, errRet := cvmService.DescribeInstanceById(ctx, instanceId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if instance != nil && *instance.InstanceState == CVM_STATUS_LAUNCH_FAILED { //LatestOperationCodeMode @@ -699,9 +702,9 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{} // Wait for the tags attached to the vm since tags attachment it's async while vm creation. if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("cvm", "instance", tcClient.Region, instanceId) + resourceName := tccommon.BuildTagResourceName("cvm", "instance", tcClient.Region, instanceId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { // If tags attachment failed, the user will be notified, then plan/apply/update with terraform. return err @@ -711,7 +714,7 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{} //keep logical consistence with the console //tag system disk if systemDiskId != "" { - resourceName = BuildTagResourceName("cvm", "volume", tcClient.Region, systemDiskId) + resourceName = tccommon.BuildTagResourceName("cvm", "volume", tcClient.Region, systemDiskId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { // If tags attachment failed, the user will be notified, then plan/apply/update with terraform. return err @@ -720,7 +723,7 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{} //tag disk ids for _, diskId := range dataDiskIds { if diskId != "" { - resourceName = BuildTagResourceName("cvm", "volume", tcClient.Region, diskId) + resourceName = tccommon.BuildTagResourceName("cvm", "volume", tcClient.Region, diskId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { // If tags attachment failed, the user will be notified, then plan/apply/update with terraform. return err @@ -736,10 +739,10 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{} return err } - err = resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := cvmService.DescribeInstanceById(ctx, instanceId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if instance != nil && *instance.InstanceState == CVM_STATUS_STOPPED { return nil @@ -755,11 +758,11 @@ func resourceTencentCloudInstanceCreate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instanceId := d.Id() forceDelete := false @@ -768,17 +771,17 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{}) _ = d.Set("force_delete", forceDelete) } - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() cvmService := CvmService{ client: client, } cbsService := CbsService{client: client} var instance *cvm.Instance var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet = cvmService.DescribeInstanceById(ctx, instanceId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if instance != nil && instance.LatestOperationState != nil && *instance.LatestOperationState == "OPERATING" { return resource.RetryableError(fmt.Errorf("waiting for instance %s operation", *instance.InstanceId)) @@ -796,11 +799,11 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{}) var cvmImages []string var response *cvm.DescribeImagesResponse - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { request := cvm.NewDescribeImagesRequest() response, errRet = client.UseCvmClient().DescribeImages(request) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if *response.Response.TotalCount > 0 { for i := range response.Response.ImageSet { @@ -815,7 +818,7 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{}) return err } - if d.Get("image_id").(string) == "" || instance.ImageId == nil || !IsContains(cvmImages, *instance.ImageId) { + if d.Get("image_id").(string) == "" || instance.ImageId == nil || !tccommon.IsContains(cvmImages, *instance.ImageId) { _ = d.Set("image_id", instance.ImageId) } @@ -882,7 +885,7 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{}) diskSizeMap[*id] = helper.Int64Uint64(*size) } } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { disks, err := cbsService.DescribeDiskList(ctx, diskIds) if err != nil { return resource.NonRetryableError(err) @@ -961,13 +964,13 @@ func resourceTencentCloudInstanceRead(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{}) (err error) { - defer logElapsed("resource.tencentcloud_instance.update")() + defer tccommon.LogElapsed("resource.tencentcloud_instance.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instanceId := d.Id() cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } d.Partial(true) @@ -1008,7 +1011,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} return err } // query cvm status - err = waitForOperationFinished(d, meta, 5*readRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) + err = waitForOperationFinished(d, meta, 5*tccommon.ReadRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) if err != nil { return err } @@ -1034,7 +1037,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} return err } // query cvm status - err = waitForOperationFinished(d, meta, 5*readRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) + err = waitForOperationFinished(d, meta, 5*tccommon.ReadRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) if err != nil { return err } @@ -1049,12 +1052,12 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} } //check success - err = waitForOperationFinished(d, meta, 2*readRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) + err = waitForOperationFinished(d, meta, 2*tccommon.ReadRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) if err != nil { return err } - time.Sleep(readRetryTimeout) + time.Sleep(tccommon.ReadRetryTimeout) } @@ -1174,7 +1177,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} if err != nil { return err } - err = waitForOperationFinished(d, meta, 2*readRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) + err = waitForOperationFinished(d, meta, 2*tccommon.ReadRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) if err != nil { return err } @@ -1190,7 +1193,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} if err != nil { return err } - err = waitForOperationFinished(d, meta, 2*readRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) + err = waitForOperationFinished(d, meta, 2*tccommon.ReadRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) if err != nil { return err } @@ -1201,7 +1204,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} if err != nil { return err } - err = waitForOperationFinished(d, meta, 2*readRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) + err = waitForOperationFinished(d, meta, 2*tccommon.ReadRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) if err != nil { return err } @@ -1225,7 +1228,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} if err != nil { return err } - err = waitForOperationFinished(d, meta, 2*readRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) + err = waitForOperationFinished(d, meta, 2*tccommon.ReadRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) if err != nil { return err } @@ -1235,7 +1238,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} if err != nil { return err } - err = waitForOperationFinished(d, meta, 2*readRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) + err = waitForOperationFinished(d, meta, 2*tccommon.ReadRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) if err != nil { return err } @@ -1253,7 +1256,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} } cbsService := CbsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } for i := range nv { @@ -1301,7 +1304,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} return fmt.Errorf("an error occurred when modifying system_disk, reason: %s", err.Error()) } - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, err := cvmService.DescribeInstanceById(ctx, instanceId) if err != nil { return resource.NonRetryableError(err) @@ -1335,7 +1338,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} return err } - err = waitForOperationFinished(d, meta, 2*readRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) + err = waitForOperationFinished(d, meta, 2*tccommon.ReadRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) if err != nil { return err } @@ -1347,7 +1350,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} return err } - err = waitForOperationFinished(d, meta, 2*readRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) + err = waitForOperationFinished(d, meta, 2*tccommon.ReadRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) if err != nil { return err } @@ -1367,10 +1370,10 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} oldInterface, newInterface := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) tagService := TagService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := BuildTagResourceName("cvm", "instance", region, instanceId) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := tccommon.BuildTagResourceName("cvm", "instance", region, instanceId) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -1380,7 +1383,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} //tag system disk if systemDiskId, ok := d.GetOk("system_disk_id"); ok { if systemDiskId.(string) != "" { - resourceName = BuildTagResourceName("cvm", "volume", region, systemDiskId.(string)) + resourceName = tccommon.BuildTagResourceName("cvm", "volume", region, systemDiskId.(string)) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -1392,7 +1395,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} for _, dataDisk := range dataDiskList { disk := dataDisk.(map[string]interface{}) dataDiskId := disk["data_disk_id"].(string) - resourceName = BuildTagResourceName("cvm", "volume", region, dataDiskId) + resourceName = tccommon.BuildTagResourceName("cvm", "volume", region, dataDiskId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -1413,7 +1416,7 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} return err } - err = waitForOperationFinished(d, meta, 2*readRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) + err = waitForOperationFinished(d, meta, 2*tccommon.ReadRetryTimeout, CVM_LATEST_OPERATION_STATE_OPERATING, false) if err != nil { return err } @@ -1426,23 +1429,23 @@ func resourceTencentCloudInstanceUpdate(d *schema.ResourceData, meta interface{} } func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_instance.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_instance.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instanceId := d.Id() //check is force delete or not forceDelete := d.Get("force_delete").(bool) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := cvmService.DeleteInstance(ctx, instanceId) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -1454,10 +1457,10 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{} notExist := false //check exist - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := cvmService.DescribeInstanceById(ctx, instanceId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if instance == nil { notExist = true @@ -1478,19 +1481,19 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{} } // exist in recycle, delete again - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := cvmService.DeleteInstance(ctx, instanceId) //when state is terminating, do not delete but check exist if errRet != nil { //check InvalidInstanceState.Terminating ee, ok := errRet.(*sdkErrors.TencentCloudSDKError) if !ok { - return retryError(errRet) + return tccommon.RetryError(errRet) } if ee.Code == "InvalidInstanceState.Terminating" { return nil } - return retryError(errRet, "OperationDenied.InstanceOperationInProgress") + return tccommon.RetryError(errRet, "OperationDenied.InstanceOperationInProgress") } return nil }) @@ -1499,10 +1502,10 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{} } //describe and check not exist - err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(5*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := cvmService.DescribeInstanceById(ctx, instanceId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if instance == nil { return nil @@ -1519,11 +1522,11 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{} diskId := value["data_disk_id"].(string) deleteWithInstance := value["delete_with_instance"].(bool) if deleteWithInstance { - cbsService := CbsService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(readRetryTimeout*2, func() *resource.RetryError { + cbsService := CbsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(tccommon.ReadRetryTimeout*2, func() *resource.RetryError { diskInfo, e := cbsService.DescribeDiskById(ctx, diskId) if e != nil { - return retryError(e, InternalError) + return tccommon.RetryError(e, tccommon.InternalError) } if *diskInfo.DiskState != CBS_STORAGE_STATUS_UNATTACHED { return resource.RetryableError(fmt.Errorf("cbs storage status is %s", *diskInfo.DiskState)) @@ -1534,10 +1537,10 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{} log.Printf("[CRITAL]%s delete cbs failed, reason:%s\n ", logId, err.Error()) return err } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := cbsService.DeleteDiskById(ctx, diskId) if e != nil { - return retryError(e, InternalError) + return tccommon.RetryError(e, tccommon.InternalError) } return nil }) @@ -1545,10 +1548,10 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{} log.Printf("[CRITAL]%s delete cbs failed, reason:%s\n ", logId, err.Error()) return err } - err = resource.Retry(readRetryTimeout*2, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*2, func() *resource.RetryError { diskInfo, e := cbsService.DescribeDiskById(ctx, diskId) if e != nil { - return retryError(e, InternalError) + return tccommon.RetryError(e, tccommon.InternalError) } if *diskInfo.DiskState == CBS_STORAGE_STATUS_TORECYCLE { return resource.RetryableError(fmt.Errorf("cbs storage status is %s", *diskInfo.DiskState)) @@ -1559,10 +1562,10 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{} log.Printf("[CRITAL]%s read cbs status failed, reason:%s\n ", logId, err.Error()) return err } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { e := cbsService.DeleteDiskById(ctx, diskId) if e != nil { - return retryError(e, InternalError) + return tccommon.RetryError(e, tccommon.InternalError) } return nil }) @@ -1570,10 +1573,10 @@ func resourceTencentCloudInstanceDelete(d *schema.ResourceData, meta interface{} log.Printf("[CRITAL]%s delete cbs failed, reason:%s\n ", logId, err.Error()) return err } - err = resource.Retry(readRetryTimeout*2, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout*2, func() *resource.RetryError { diskInfo, e := cbsService.DescribeDiskById(ctx, diskId) if e != nil { - return retryError(e, InternalError) + return tccommon.RetryError(e, tccommon.InternalError) } if diskInfo != nil { return resource.RetryableError(fmt.Errorf("cbs storage status is %s", *diskInfo.DiskState)) @@ -1597,10 +1600,10 @@ func switchInstance(cvmService *CvmService, ctx context.Context, d *schema.Resou if err != nil { return err } - err = resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := cvmService.DescribeInstanceById(ctx, instanceId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if instance != nil && *instance.InstanceState == CVM_STATUS_RUNNING { return nil @@ -1613,7 +1616,7 @@ func switchInstance(cvmService *CvmService, ctx context.Context, d *schema.Resou } else { stoppedMode := d.Get("stopped_mode").(string) skipStopApi := false - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { // when retry polling instance status, stop instance should skipped if !skipStopApi { err := cvmService.StopInstance(ctx, instanceId, stoppedMode) @@ -1645,10 +1648,10 @@ func switchInstance(cvmService *CvmService, ctx context.Context, d *schema.Resou if err != nil { return err } - err = resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, errRet := cvmService.DescribeInstanceById(ctx, instanceId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if instance != nil && *instance.InstanceState == CVM_STATUS_STOPPED { return nil @@ -1663,9 +1666,9 @@ func switchInstance(cvmService *CvmService, ctx context.Context, d *schema.Resou } func waitForOperationFinished(d *schema.ResourceData, meta interface{}, timeout time.Duration, state string, immediately bool) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() cvmService := CvmService{client} instanceId := d.Id() // We cannot catch LatestOperationState change immediately after modification returns, we must wait for LatestOperationState update to expected. @@ -1676,7 +1679,7 @@ func waitForOperationFinished(d *schema.ResourceData, meta interface{}, timeout err := resource.Retry(timeout, func() *resource.RetryError { instance, errRet := cvmService.DescribeInstanceById(ctx, instanceId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if instance == nil { return resource.NonRetryableError(fmt.Errorf("%s not exists", instanceId)) diff --git a/tencentcloud/resource_tc_instance_set.go b/tencentcloud/services/cvm/resource_tc_instance_set.go similarity index 92% rename from tencentcloud/resource_tc_instance_set.go rename to tencentcloud/services/cvm/resource_tc_instance_set.go index aacd281716..3e5ce68bed 100644 --- a/tencentcloud/resource_tc_instance_set.go +++ b/tencentcloud/services/cvm/resource_tc_instance_set.go @@ -1,4 +1,4 @@ -package tencentcloud +package cvm import ( "context" @@ -8,15 +8,18 @@ import ( "strconv" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudInstanceSet() *schema.Resource { +func ResourceTencentCloudInstanceSet() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudInstanceSetCreate, Read: resourceTencentCloudInstanceSetRead, @@ -59,14 +62,14 @@ func resourceTencentCloudInstanceSet() *schema.Resource { Type: schema.TypeString, Optional: true, Default: "Terraform-CVM-Instance", - ValidateFunc: validateStringLengthInRange(2, 128), + ValidateFunc: tccommon.ValidateStringLengthInRange(2, 128), Description: "The name of the instance. The max length of instance_name is 60, and default value is `Terraform-CVM-Instance`.", }, "instance_type": { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateInstanceType, + ValidateFunc: tccommon.ValidateInstanceType, Description: "The type of the instance.", }, "hostname": { @@ -91,7 +94,7 @@ func resourceTencentCloudInstanceSet() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CVM_CHARGE_TYPE_POSTPAID, - ValidateFunc: validateAllowedStringValue(CVM_CHARGE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CVM_CHARGE_TYPE), Description: "The charge type of instance. Only support `POSTPAID_BY_HOUR`.", }, // network @@ -100,7 +103,7 @@ func resourceTencentCloudInstanceSet() *schema.Resource { Optional: true, Computed: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue(CVM_INTERNET_CHARGE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CVM_INTERNET_CHARGE_TYPE), Description: "Internet charge type of the instance, Valid values are `BANDWIDTH_PREPAID`, `TRAFFIC_POSTPAID_BY_HOUR`, `BANDWIDTH_POSTPAID_BY_HOUR` and `BANDWIDTH_PACKAGE`. This value does not need to be set when `allocate_public_ip` is false.", }, "bandwidth_package_id": { @@ -153,14 +156,14 @@ func resourceTencentCloudInstanceSet() *schema.Resource { Type: schema.TypeString, Optional: true, Default: CVM_DISK_TYPE_CLOUD_PREMIUM, - ValidateFunc: validateAllowedStringValue(CVM_DISK_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CVM_DISK_TYPE), Description: "System disk type. For more information on limits of system disk types, see [Storage Overview](https://intl.cloud.tencent.com/document/product/213/4952). Valid values: `LOCAL_BASIC`: local disk, `LOCAL_SSD`: local SSD disk, `CLOUD_SSD`: SSD, `CLOUD_PREMIUM`: Premium Cloud Storage, `CLOUD_BSSD`: Basic SSD. NOTE: If modified, the instance may force stop.", }, "system_disk_size": { Type: schema.TypeInt, Optional: true, Default: 50, - ValidateFunc: validateIntegerInRange(50, 1000), + ValidateFunc: tccommon.ValidateIntegerInRange(50, 1000), Description: "Size of the system disk. Valid value ranges: (50~1000). and unit is GB. Default is 50GB. If modified, the instance may force stop.", }, "system_disk_id": { @@ -344,8 +347,8 @@ func resourceTencentCloudInstanceSetDelete(d *schema.ResourceData, meta interfac } func doResourceTencentCloudInstanceSetCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_instance_set.create")() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_instance_set.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) var instanceCount int @@ -475,14 +478,14 @@ func doResourceTencentCloudInstanceSetCreate(d *schema.ResourceData, meta interf instanceIds := make([]*string, 0) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check("create") - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().RunInstances(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().RunInstances(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) e, ok := err.(*sdkErrors.TencentCloudSDKError) - if ok && IsContains(CVM_RETRYABLE_ERROR, e.Code) { + if ok && tccommon.IsContains(CVM_RETRYABLE_ERROR, e.Code) { time.Sleep(1 * time.Second) // 需要重试的话,等待1s进行重试 return resource.RetryableError(fmt.Errorf("cvm create error: %s, retrying", e.Error())) } @@ -509,18 +512,18 @@ func doResourceTencentCloudInstanceSetCreate(d *schema.ResourceData, meta interf } func doResourceTencentCloudInstanceSetRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_instance_set.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_instance_set.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var instanceSetIds []*string if v, ok := d.GetOk("instance_ids"); ok { instanceSetIds = helper.InterfacesStringsPoint(v.([]interface{})) } - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() cvmService := CvmService{ client: client, } @@ -580,13 +583,13 @@ func doResourceTencentCloudInstanceSetRead(d *schema.ResourceData, meta interfac } func doResourceTencentCloudInstanceSetUpdate(d *schema.ResourceData, meta interface{}) (err error) { - defer logElapsed("resource.tencentcloud_instance_set.update")() + defer tccommon.LogElapsed("resource.tencentcloud_instance_set.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if d.HasChange("instance_count") { return fmt.Errorf("`instance_count` do not support change now, please use `resource_tc_instace` instead.") @@ -602,13 +605,13 @@ func doResourceTencentCloudInstanceSetUpdate(d *schema.ResourceData, meta interf // need delete instance if len(needExclude) > 0 { instanceSetIds := helper.StrListToStr(helper.InterfacesStringsPoint(needExclude)) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := cvmService.DeleteInstanceSetByIds(ctx, instanceSetIds) if errRet != nil { log.Printf("[CRITAL][first delete]%s api[%s] fail, reason[%s]\n", logId, "delete", errRet.Error()) e, ok := errRet.(*sdkErrors.TencentCloudSDKError) - if ok && IsContains(CVM_RETRYABLE_ERROR, e.Code) { + if ok && tccommon.IsContains(CVM_RETRYABLE_ERROR, e.Code) { time.Sleep(1 * time.Second) // 需要重试的话,等待1s进行重试 return resource.RetryableError(fmt.Errorf("[first delete]cvm delete error: %s, retrying", e.Error())) } @@ -740,14 +743,14 @@ func doResourceTencentCloudInstanceSetUpdate(d *schema.ResourceData, meta interf request.UserData = &userData } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check("create") - response, err := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().RunInstances(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().RunInstances(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) e, ok := err.(*sdkErrors.TencentCloudSDKError) - if ok && IsContains(CVM_RETRYABLE_ERROR, e.Code) { + if ok && tccommon.IsContains(CVM_RETRYABLE_ERROR, e.Code) { time.Sleep(1 * time.Second) // 需要重试的话,等待1s进行重试 return resource.RetryableError(fmt.Errorf("cvm create error: %s, retrying", e.Error())) } @@ -802,15 +805,15 @@ func doResourceTencentCloudInstanceSetUpdate(d *schema.ResourceData, meta interf } func doResourceTencentCloudInstanceSetDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_instance_set.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_instance_set.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) //instanceSetIds := d.Id() cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instanceSetIds []*string @@ -819,13 +822,13 @@ func doResourceTencentCloudInstanceSetDelete(d *schema.ResourceData, meta interf } // delete - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := cvmService.DeleteInstanceSetByIds(ctx, helper.StrListToStr(instanceSetIds)) if errRet != nil { log.Printf("[CRITAL][first delete]%s api[%s] fail, reason[%s]\n", logId, "delete", errRet.Error()) e, ok := errRet.(*sdkErrors.TencentCloudSDKError) - if ok && IsContains(CVM_RETRYABLE_ERROR, e.Code) { + if ok && tccommon.IsContains(CVM_RETRYABLE_ERROR, e.Code) { time.Sleep(1 * time.Second) // 需要重试的话,等待1s进行重试 return resource.RetryableError(fmt.Errorf("[first delete]cvm delete error: %s, retrying", e.Error())) } diff --git a/tencentcloud/resource_tc_instance_test.go b/tencentcloud/services/cvm/resource_tc_instance_test.go similarity index 77% rename from tencentcloud/resource_tc_instance_test.go rename to tencentcloud/services/cvm/resource_tc_instance_test.go index 533e7bfacb..6a6499fdf3 100644 --- a/tencentcloud/resource_tc_instance_test.go +++ b/tencentcloud/services/cvm/resource_tc_instance_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cvm_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + "context" "fmt" "log" @@ -20,18 +24,16 @@ func init() { } func testSweepCvmInstance(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - sharedClient, err := sharedClientForRegion(region) + sharedClient, err := tcacctest.SharedClientForRegion(region) if err != nil { return fmt.Errorf("getting tencentcloud client error: %s", err.Error()) } - client := sharedClient.(*TencentCloudClient) + client := sharedClient.(tccommon.ProviderMeta) - cvmService := CvmService{ - client: client.apiV3Conn, - } + cvmService := svccvm.NewCvmService(client.GetAPIV3Conn()) instances, err := cvmService.DescribeInstanceByFilter(ctx, nil, nil) if err != nil { @@ -42,14 +44,14 @@ func testSweepCvmInstance(region string) error { instanceId := *v.InstanceId instanceName := *v.InstanceName now := time.Now() - createTime := stringTotime(*v.CreatedTime) + createTime := tccommon.StringToTime(*v.CreatedTime) interval := now.Sub(createTime).Minutes() - if strings.HasPrefix(instanceName, keepResource) || strings.HasPrefix(instanceName, defaultResource) { + if strings.HasPrefix(instanceName, tcacctest.KeepResource) || strings.HasPrefix(instanceName, tcacctest.DefaultResource) { continue } - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } @@ -66,16 +68,16 @@ func TestAccTencentCloudInstanceResource_Basic(t *testing.T) { id := "tencentcloud_instance.cvm_basic" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceBasic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), resource.TestCheckResourceAttrSet(id, "private_ip"), @@ -85,7 +87,7 @@ func TestAccTencentCloudInstanceResource_Basic(t *testing.T) { ), }, { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceModifyInstanceType, Check: resource.ComposeTestCheckFunc( testAccCheckTencentCloudInstanceExists(id), @@ -108,16 +110,16 @@ func TestAccTencentCloudInstanceResource_WithDataDisk(t *testing.T) { id := "tencentcloud_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithDataDisk, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), resource.TestCheckResourceAttr(id, "system_disk_size", "100"), @@ -130,10 +132,10 @@ func TestAccTencentCloudInstanceResource_WithDataDisk(t *testing.T) { ), }, { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithDataDiskUpdate, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), resource.TestCheckResourceAttr(id, "system_disk_size", "100"), @@ -154,26 +156,26 @@ func TestAccTencentCloudInstanceResource_WithNetwork(t *testing.T) { id := "tencentcloud_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithNetworkFalse("false"), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), resource.TestCheckNoResourceAttr(id, "public_ip"), ), }, { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithNetwork("true", 5), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "internet_max_bandwidth_out", "5"), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), @@ -188,16 +190,16 @@ func TestAccTencentCloudInstanceResource_WithPrivateIP(t *testing.T) { t.Parallel() id := "tencentcloud_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithPrivateIP, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), ), @@ -209,27 +211,27 @@ func TestAccTencentCloudInstanceResource_WithPrivateIP(t *testing.T) { func TestAccTencentCloudInstanceResource_WithKeyPairs(t *testing.T) { id := "tencentcloud_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithKeyPair_withoutKeyPair, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), ), }, { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithKeyPair( "[tencentcloud_key_pair.key_pair_0.id, tencentcloud_key_pair.key_pair_1.id]", ), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), resource.TestCheckResourceAttr(id, "key_ids.#", "2"), @@ -237,12 +239,12 @@ func TestAccTencentCloudInstanceResource_WithKeyPairs(t *testing.T) { }, { PreConfig: func() { - testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) time.Sleep(time.Second * 5) }, Config: testAccTencentCloudInstanceWithKeyPair("[tencentcloud_key_pair.key_pair_2.id]"), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), resource.TestCheckResourceAttr(id, "key_ids.#", "1"), @@ -257,16 +259,16 @@ func TestAccTencentCloudInstanceResource_WithPassword(t *testing.T) { id := "tencentcloud_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithPassword("TF_test_123"), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), resource.TestCheckResourceAttrSet(id, "password"), @@ -274,12 +276,12 @@ func TestAccTencentCloudInstanceResource_WithPassword(t *testing.T) { }, { PreConfig: func() { - testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) + tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) time.Sleep(time.Second * 5) }, Config: testAccTencentCloudInstanceWithPassword("TF_test_123456"), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), resource.TestCheckResourceAttrSet(id, "password"), @@ -293,16 +295,16 @@ func TestAccTencentCloudInstanceResource_WithImageLogin(t *testing.T) { id := "tencentcloud_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_PREPAY) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Config: testAccTencentCloudInstanceWithImageLogin, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), resource.TestCheckResourceAttr(id, "keep_image_login", "true"), @@ -318,29 +320,29 @@ func TestAccTencentCloudInstanceResource_WithName(t *testing.T) { id := "tencentcloud_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, - Config: testAccTencentCloudInstanceWithName(defaultInsName), + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Config: testAccTencentCloudInstanceWithName(tcacctest.DefaultInsName), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), - resource.TestCheckResourceAttr(id, "instance_name", defaultInsName), + resource.TestCheckResourceAttr(id, "instance_name", tcacctest.DefaultInsName), ), }, { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, - Config: testAccTencentCloudInstanceWithName(defaultInsNameUpdate), + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, + Config: testAccTencentCloudInstanceWithName(tcacctest.DefaultInsNameUpdate), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), - resource.TestCheckResourceAttr(id, "instance_name", defaultInsNameUpdate), + resource.TestCheckResourceAttr(id, "instance_name", tcacctest.DefaultInsNameUpdate), ), }, }, @@ -352,19 +354,19 @@ func TestAccTencentCloudInstanceResource_WithHostname(t *testing.T) { id := "tencentcloud_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithHostname, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), - resource.TestCheckResourceAttr(id, "hostname", defaultInsName), + resource.TestCheckResourceAttr(id, "hostname", tcacctest.DefaultInsName), ), }, }, @@ -380,16 +382,16 @@ func TestAccTencentCloudInstanceResource_WithSecurityGroup(t *testing.T) { securitygroupRuleBarId := "tencentcloud_security_group_rule.bar" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: instanceId, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithSecurityGroup(`[tencentcloud_security_group.foo.id]`), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(instanceId), + tcacctest.AccCheckTencentCloudDataSourceID(instanceId), testAccCheckTencentCloudInstanceExists(instanceId), resource.TestCheckResourceAttr(instanceId, "instance_status", "RUNNING"), resource.TestCheckResourceAttr(instanceId, "security_groups.#", "1"), @@ -401,13 +403,13 @@ func TestAccTencentCloudInstanceResource_WithSecurityGroup(t *testing.T) { ), }, { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithSecurityGroup(`[ tencentcloud_security_group.foo.id, tencentcloud_security_group.bar.id ]`), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(instanceId), + tcacctest.AccCheckTencentCloudDataSourceID(instanceId), testAccCheckTencentCloudInstanceExists(instanceId), resource.TestCheckResourceAttr(instanceId, "instance_status", "RUNNING"), resource.TestCheckResourceAttr(instanceId, "security_groups.#", "2"), @@ -432,13 +434,13 @@ func TestAccTencentCloudInstanceResource_WithOrderlySecurityGroup(t *testing.T) orderlySecurityGroupId3 := "tencentcloud_security_group.orderly_security_group3" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: instanceId, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceOrderlySecurityGroups(`[ tencentcloud_security_group.orderly_security_group1.id, tencentcloud_security_group.orderly_security_group2.id, @@ -457,7 +459,7 @@ func TestAccTencentCloudInstanceResource_WithOrderlySecurityGroup(t *testing.T) }, { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceOrderlySecurityGroups(`[ tencentcloud_security_group.orderly_security_group3.id, tencentcloud_security_group.orderly_security_group2.id, @@ -483,19 +485,19 @@ func TestAccTencentCloudInstanceResource_WithTags(t *testing.T) { id := "tencentcloud_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithTags(`{ "hello" = "world" "happy" = "hour" }`), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), resource.TestCheckResourceAttr(id, "tags.hello", "world"), @@ -503,12 +505,12 @@ func TestAccTencentCloudInstanceResource_WithTags(t *testing.T) { ), }, { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithTags(`{ "hello" = "hello" }`), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), resource.TestCheckResourceAttr(id, "tags.hello", "hello"), @@ -524,12 +526,12 @@ func TestAccTencentCloudInstanceResource_WithPlacementGroup(t *testing.T) { id := "tencentcloud_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithPlacementGroup, Check: resource.ComposeTestCheckFunc( testAccCheckTencentCloudInstanceExists(id), @@ -546,16 +548,16 @@ func TestAccTencentCloudInstanceResource_WithSpotpaid(t *testing.T) { id := "tencentcloud_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithSpotpaid, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), ), @@ -569,16 +571,16 @@ func TestAccTencentCloudInstanceResource_DataDiskOrder(t *testing.T) { id := "tencentcloud_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceWithDataDiskOrder, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "data_disks.0.data_disk_size", "100"), resource.TestCheckResourceAttr(id, "data_disks.1.data_disk_size", "50"), @@ -594,16 +596,16 @@ func TestAccTencentCloudInstanceResource_DataDiskByCbs(t *testing.T) { id := "tencentcloud_instance.cvm_add_data_disk_by_cbs" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudInstanceAddDataDiskByCbs, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), ), }, @@ -615,29 +617,29 @@ func TestAccTencentCloudNeedFixInstancePostpaidToPrepaid(t *testing.T) { id := "tencentcloud_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_PREPAY) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Config: testAccTencentCloudInstancePostPaid, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), ), }, { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_PREPAY) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Config: testAccTencentCloudInstanceBasicToPrepaid, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_charge_type", "PREPAID"), resource.TestCheckResourceAttr(id, "instance_charge_type_prepaid_period", "1"), - resource.TestCheckResourceAttr(id, "instance_charge_type_prepaid_renew_flag", "NOTIFY_AND_MANUAL_RENEW"), + resource.TestCheckResourceAttr(id, "instance_charge_type_prepaid_renew_flag", "NOTIFY_tcacctest.AND_MANUAL_RENEW"), ), }, }, @@ -648,27 +650,27 @@ func TestAccTencentCloudInstanceResource_PrepaidFallbackToPostpaid(t *testing.T) id := "tencentcloud_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_PREPAY) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Config: testAccTencentCloudInstanceBasicToPrepaid, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_charge_type", "PREPAID"), resource.TestCheckResourceAttr(id, "instance_charge_type_prepaid_period", "1"), - resource.TestCheckResourceAttr(id, "instance_charge_type_prepaid_renew_flag", "NOTIFY_AND_MANUAL_RENEW"), + resource.TestCheckResourceAttr(id, "instance_charge_type_prepaid_renew_flag", "NOTIFY_tcacctest.AND_MANUAL_RENEW"), ), }, { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_PREPAY) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Config: testAccTencentCloudInstancePostPaid, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), ), @@ -677,10 +679,38 @@ func TestAccTencentCloudInstanceResource_PrepaidFallbackToPostpaid(t *testing.T) }) } +func testAccCheckSecurityGroupExists(n string, id *string) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[n] + if !ok { + return fmt.Errorf("not found: %s", n) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("no security group ID is set") + } + + service := svccvm.NewVpcService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + + sg, err := service.DescribeSecurityGroup(context.TODO(), rs.Primary.ID) + if err != nil { + return err + } + + if sg == nil { + return fmt.Errorf("security group not found: %s", rs.Primary.ID) + } + + *id = rs.Primary.ID + + return nil + } +} + func testAccCheckTencentCloudInstanceExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -690,15 +720,13 @@ func testAccCheckTencentCloudInstanceExists(n string) resource.TestCheckFunc { return fmt.Errorf("cvm instance id is not set") } - cvmService := CvmService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cvmService := svccvm.NewCvmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instance, err := cvmService.DescribeInstanceById(ctx, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, err = cvmService.DescribeInstanceById(ctx, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -714,11 +742,9 @@ func testAccCheckTencentCloudInstanceExists(n string) resource.TestCheckFunc { } func testAccCheckInstanceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cvmService := CvmService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cvmService := svccvm.NewCvmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_instance" { continue @@ -726,10 +752,10 @@ func testAccCheckInstanceDestroy(s *terraform.State) error { instance, err := cvmService.DescribeInstanceById(ctx, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instance, err = cvmService.DescribeInstanceById(ctx, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -737,14 +763,14 @@ func testAccCheckInstanceDestroy(s *terraform.State) error { if err != nil { return err } - if instance != nil && *instance.InstanceState != CVM_STATUS_SHUTDOWN && *instance.InstanceState != CVM_STATUS_TERMINATING { + if instance != nil && *instance.InstanceState != svccvm.CVM_STATUS_SHUTDOWN && *instance.InstanceState != svccvm.CVM_STATUS_TERMINATING { return fmt.Errorf("cvm instance still exists: %s", rs.Primary.ID) } } return nil } -const testAccTencentCloudInstanceBasic = defaultInstanceVariable + ` +const testAccTencentCloudInstanceBasic = tcacctest.DefaultInstanceVariable + ` resource "tencentcloud_instance" "cvm_basic" { instance_name = var.instance_name availability_zone = var.availability_cvm_zone @@ -757,7 +783,7 @@ resource "tencentcloud_instance" "cvm_basic" { } ` -const testAccTencentCloudInstanceWithDataDiskOrder = defaultInstanceVariable + ` +const testAccTencentCloudInstanceWithDataDiskOrder = tcacctest.DefaultInstanceVariable + ` resource "tencentcloud_instance" "foo" { instance_name = var.instance_name availability_zone = var.availability_cvm_zone @@ -786,7 +812,7 @@ resource "tencentcloud_instance" "foo" { } ` -const testAccTencentCloudInstanceAddDataDiskByCbs = defaultInstanceVariable + ` +const testAccTencentCloudInstanceAddDataDiskByCbs = tcacctest.DefaultInstanceVariable + ` resource "tencentcloud_instance" "cvm_add_data_disk_by_cbs" { instance_name = "cvm-add-data-disk-by-cbs" availability_zone = var.availability_cvm_zone @@ -836,9 +862,9 @@ data "tencentcloud_instance_types" "default" { } resource "tencentcloud_instance" "foo" { - instance_name = "` + defaultInsName + `" - availability_zone = "` + defaultAZone + `" - image_id = "` + defaultTkeOSImageId + `" + instance_name = "` + tcacctest.DefaultInsName + `" + availability_zone = "` + tcacctest.DefaultAZone + `" + image_id = "` + tcacctest.DefaultTkeOSImageId + `" instance_type = data.tencentcloud_instance_types.default.instance_types.0.instance_type system_disk_type = "CLOUD_PREMIUM" force_delete = true @@ -857,19 +883,19 @@ data "tencentcloud_instance_types" "default" { } resource "tencentcloud_instance" "foo" { - instance_name = "` + defaultInsName + `" - availability_zone = "` + defaultAZone + `" - image_id = "` + defaultTkeOSImageId + `" + instance_name = "` + tcacctest.DefaultInsName + `" + availability_zone = "` + tcacctest.DefaultAZone + `" + image_id = "` + tcacctest.DefaultTkeOSImageId + `" instance_type = data.tencentcloud_instance_types.default.instance_types.0.instance_type system_disk_type = "CLOUD_PREMIUM" instance_charge_type = "PREPAID" instance_charge_type_prepaid_period = 1 - instance_charge_type_prepaid_renew_flag = "NOTIFY_AND_MANUAL_RENEW" + instance_charge_type_prepaid_renew_flag = "NOTIFY_tcacctest.AND_MANUAL_RENEW" force_delete = true } ` -const testAccTencentCloudInstanceModifyInstanceType = defaultInstanceVariable + ` +const testAccTencentCloudInstanceModifyInstanceType = tcacctest.DefaultInstanceVariable + ` data "tencentcloud_instance_types" "new_type" { availability_zone = var.availability_cvm_zone @@ -889,7 +915,7 @@ resource "tencentcloud_instance" "cvm_basic" { } ` -const testAccTencentCloudInstanceWithDataDisk = defaultInstanceVariable + ` +const testAccTencentCloudInstanceWithDataDisk = tcacctest.DefaultInstanceVariable + ` resource "tencentcloud_instance" "foo" { instance_name = var.instance_name availability_zone = var.availability_cvm_zone @@ -918,7 +944,7 @@ resource "tencentcloud_instance" "foo" { } ` -const testAccTencentCloudInstanceWithDataDiskUpdate = defaultInstanceVariable + ` +const testAccTencentCloudInstanceWithDataDiskUpdate = tcacctest.DefaultInstanceVariable + ` resource "tencentcloud_instance" "foo" { instance_name = var.instance_name availability_zone = var.availability_cvm_zone @@ -1017,7 +1043,7 @@ resource "tencentcloud_instance" "foo" { func testAccTencentCloudInstanceWithNetworkFalse(hasPublicIp string) string { return fmt.Sprintf( - defaultInstanceVariable+` + tcacctest.DefaultInstanceVariable+` resource "tencentcloud_instance" "foo" { instance_name = var.instance_name availability_zone = var.availability_cvm_zone @@ -1033,7 +1059,7 @@ resource "tencentcloud_instance" "foo" { func testAccTencentCloudInstanceWithNetwork(hasPublicIp string, maxBandWidthOut int64) string { return fmt.Sprintf( - defaultInstanceVariable+` + tcacctest.DefaultInstanceVariable+` resource "tencentcloud_instance" "foo" { instance_name = var.instance_name availability_zone = var.availability_cvm_zone @@ -1048,7 +1074,7 @@ resource "tencentcloud_instance" "foo" { ) } -const testAccTencentCloudInstanceWithPrivateIP = defaultInstanceVariable + ` +const testAccTencentCloudInstanceWithPrivateIP = tcacctest.DefaultInstanceVariable + ` resource "tencentcloud_instance" "foo" { instance_name = var.instance_name availability_zone = var.availability_cvm_zone @@ -1061,7 +1087,7 @@ resource "tencentcloud_instance" "foo" { } ` -const testAccTencentCloudInstanceWithKeyPair_withoutKeyPair = defaultInstanceVariable + ` +const testAccTencentCloudInstanceWithKeyPair_withoutKeyPair = tcacctest.DefaultInstanceVariable + ` resource "tencentcloud_instance" "foo" { instance_name = var.instance_name availability_zone = var.availability_cvm_zone @@ -1074,7 +1100,7 @@ resource "tencentcloud_instance" "foo" { func testAccTencentCloudInstanceWithKeyPair(keyIds string) string { return fmt.Sprintf( - defaultInstanceVariable+` + tcacctest.DefaultInstanceVariable+` resource "tencentcloud_key_pair" "key_pair_0" { key_name = "key_pair_0" public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDjd8fTnp7Dcuj4mLaQxf9Zs/ORgUL9fQxRCNKkPgP1paTy1I513maMX126i36Lxxl3+FUB52oVbo/FgwlIfX8hyCnv8MCxqnuSDozf1CD0/wRYHcTWAtgHQHBPCC2nJtod6cVC3kB18KeV4U7zsxmwFeBIxojMOOmcOBuh7+trRw==" @@ -1105,7 +1131,7 @@ resource "tencentcloud_instance" "foo" { func testAccTencentCloudInstanceWithPassword(password string) string { return fmt.Sprintf( - defaultInstanceVariable+` + tcacctest.DefaultInstanceVariable+` resource "tencentcloud_instance" "foo" { instance_name = var.instance_name availability_zone = var.availability_cvm_zone @@ -1119,7 +1145,7 @@ resource "tencentcloud_instance" "foo" { ) } -const testAccTencentCloudInstanceWithImageLogin = defaultInstanceVariable + ` +const testAccTencentCloudInstanceWithImageLogin = tcacctest.DefaultInstanceVariable + ` data "tencentcloud_images" "zoo" { image_type = ["PRIVATE_IMAGE"] } @@ -1136,7 +1162,7 @@ resource "tencentcloud_instance" "foo" { func testAccTencentCloudInstanceWithName(instanceName string) string { return fmt.Sprintf( - defaultInstanceVariable+` + tcacctest.DefaultInstanceVariable+` resource "tencentcloud_instance" "foo" { instance_name = "%s" availability_zone = var.availability_cvm_zone @@ -1149,7 +1175,7 @@ resource "tencentcloud_instance" "foo" { ) } -const testAccTencentCloudInstanceWithHostname = defaultInstanceVariable + ` +const testAccTencentCloudInstanceWithHostname = tcacctest.DefaultInstanceVariable + ` resource "tencentcloud_instance" "foo" { instance_name = var.instance_name availability_zone = var.availability_cvm_zone @@ -1162,7 +1188,7 @@ resource "tencentcloud_instance" "foo" { func testAccTencentCloudInstanceWithSecurityGroup(ids string) string { return fmt.Sprintf( - defaultInstanceVariable+` + tcacctest.DefaultInstanceVariable+` resource "tencentcloud_security_group" "foo" { name = var.instance_name description = var.instance_name @@ -1206,7 +1232,7 @@ resource "tencentcloud_instance" "foo" { func testAccTencentCloudInstanceWithTags(tags string) string { return fmt.Sprintf( - defaultInstanceVariable+` + tcacctest.DefaultInstanceVariable+` resource "tencentcloud_instance" "foo" { instance_name = var.instance_name availability_zone = var.availability_cvm_zone @@ -1225,7 +1251,7 @@ resource "tencentcloud_instance" "foo" { ) } -const testAccTencentCloudInstanceWithPlacementGroup = defaultInstanceVariable + ` +const testAccTencentCloudInstanceWithPlacementGroup = tcacctest.DefaultInstanceVariable + ` resource "tencentcloud_placement_group" "foo" { name = var.instance_name type = "HOST" @@ -1241,7 +1267,7 @@ resource "tencentcloud_instance" "foo" { } ` -const testAccTencentCloudInstanceWithSpotpaid = defaultInstanceVariable + ` +const testAccTencentCloudInstanceWithSpotpaid = tcacctest.DefaultInstanceVariable + ` resource "tencentcloud_instance" "foo" { instance_name = var.instance_name availability_zone = var.availability_cvm_zone @@ -1256,7 +1282,7 @@ resource "tencentcloud_instance" "foo" { func testAccTencentCloudInstanceOrderlySecurityGroups(sgs string) string { - return fmt.Sprintf(defaultInstanceVariable+` + return fmt.Sprintf(tcacctest.DefaultInstanceVariable+` resource "tencentcloud_security_group" "orderly_security_group1" { name = "test-cvm-orderly-sg1" description = "test-cvm-orderly-sg1" diff --git a/tencentcloud/resource_tc_instance_testing_test.go b/tencentcloud/services/cvm/resource_tc_instance_testing_test.go similarity index 80% rename from tencentcloud/resource_tc_instance_testing_test.go rename to tencentcloud/services/cvm/resource_tc_instance_testing_test.go index fbb6960829..1fc8476f11 100644 --- a/tencentcloud/resource_tc_instance_testing_test.go +++ b/tencentcloud/services/cvm/resource_tc_instance_testing_test.go @@ -1,9 +1,11 @@ -package tencentcloud +package cvm_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudTestingCvmInstanceResource_Basic(t *testing.T) { @@ -11,16 +13,16 @@ func TestAccTencentCloudTestingCvmInstanceResource_Basic(t *testing.T) { id := "tencentcloud_instance.cvm_basic" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudTestingCvmInstanceBasic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), resource.TestCheckResourceAttrSet(id, "private_ip"), @@ -30,7 +32,7 @@ func TestAccTencentCloudTestingCvmInstanceResource_Basic(t *testing.T) { ), }, { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudTestingCvmInstanceModifyInstanceType, Check: resource.ComposeTestCheckFunc( testAccCheckTencentCloudInstanceExists(id), @@ -47,16 +49,16 @@ func TestAccTencentCloudTestingCvmInstanceResource_WithDataDisk(t *testing.T) { id := "tencentcloud_instance.foo" resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: id, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckInstanceDestroy, Steps: []resource.TestStep{ { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudTestingInstanceWithDataDisk, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), resource.TestCheckResourceAttr(id, "system_disk_size", "100"), @@ -67,10 +69,10 @@ func TestAccTencentCloudTestingCvmInstanceResource_WithDataDisk(t *testing.T) { ), }, { - PreConfig: func() { testAccStepPreConfigSetTempAKSK(t, ACCOUNT_TYPE_COMMON) }, + PreConfig: func() { tcacctest.AccStepPreConfigSetTempAKSK(t, tcacctest.ACCOUNT_TYPE_COMMON) }, Config: testAccTencentCloudTestingInstanceWithDataDiskUpdate, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID(id), + tcacctest.AccCheckTencentCloudDataSourceID(id), testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_status", "RUNNING"), resource.TestCheckResourceAttr(id, "system_disk_size", "100"), @@ -86,7 +88,7 @@ func TestAccTencentCloudTestingCvmInstanceResource_WithDataDisk(t *testing.T) { }) } -const testAccTencentCloudTestingCvmInstanceBasic = defaultInstanceVariable + ` +const testAccTencentCloudTestingCvmInstanceBasic = tcacctest.DefaultInstanceVariable + ` resource "tencentcloud_instance" "cvm_basic" { instance_name = var.instance_name availability_zone = var.availability_cvm_testing_zone @@ -98,7 +100,7 @@ resource "tencentcloud_instance" "cvm_basic" { project_id = 0 } ` -const testAccTencentCloudTestingCvmInstanceModifyInstanceType = defaultInstanceVariable + ` +const testAccTencentCloudTestingCvmInstanceModifyInstanceType = tcacctest.DefaultInstanceVariable + ` resource "tencentcloud_instance" "cvm_basic" { instance_name = var.instance_name @@ -112,7 +114,7 @@ resource "tencentcloud_instance" "cvm_basic" { } ` -const testAccTencentCloudTestingInstanceWithDataDisk = defaultInstanceVariable + ` +const testAccTencentCloudTestingInstanceWithDataDisk = tcacctest.DefaultInstanceVariable + ` resource "tencentcloud_instance" "foo" { instance_name = var.instance_name availability_zone = var.availability_cvm_testing_zone @@ -133,7 +135,7 @@ resource "tencentcloud_instance" "foo" { } ` -const testAccTencentCloudTestingInstanceWithDataDiskUpdate = defaultInstanceVariable + ` +const testAccTencentCloudTestingInstanceWithDataDiskUpdate = tcacctest.DefaultInstanceVariable + ` resource "tencentcloud_instance" "foo" { instance_name = var.instance_name availability_zone = var.availability_cvm_testing_zone diff --git a/tencentcloud/resource_tc_key_pair.go b/tencentcloud/services/cvm/resource_tc_key_pair.go similarity index 71% rename from tencentcloud/resource_tc_key_pair.go rename to tencentcloud/services/cvm/resource_tc_key_pair.go index bd8861d9ab..6cb817c637 100644 --- a/tencentcloud/resource_tc_key_pair.go +++ b/tencentcloud/services/cvm/resource_tc_key_pair.go @@ -1,4 +1,4 @@ -package tencentcloud +package cvm import ( "context" @@ -6,6 +6,8 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -14,7 +16,7 @@ import ( cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" ) -func resourceTencentCloudKeyPair() *schema.Resource { +func ResourceTencentCloudKeyPair() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudKeyPairCreate, Read: resourceTencentCloudKeyPairRead, @@ -28,7 +30,7 @@ func resourceTencentCloudKeyPair() *schema.Resource { "key_name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateKeyPairName, + ValidateFunc: tccommon.ValidateKeyPairName, Description: "The key pair's name. It is the only in one TencentCloud account.", }, "public_key": { @@ -68,16 +70,16 @@ func resourceTencentCloudKeyPair() *schema.Resource { } func cvmCreateKeyPair(ctx context.Context, d *schema.ResourceData, meta interface{}) (keyId string, err error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cvm.NewCreateKeyPairRequest() response := cvm.NewCreateKeyPairResponse() request.KeyName = helper.String(d.Get("key_name").(string)) request.ProjectId = helper.IntInt64(d.Get("project_id").(int)) - innerErr := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().CreateKeyPair(request) + innerErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().CreateKeyPair(request) if e != nil { - return retryError(e) + 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()) } @@ -99,17 +101,17 @@ func cvmCreateKeyPair(ctx context.Context, d *schema.ResourceData, meta interfac } func cvmCreateKeyPairByImportPublicKey(ctx context.Context, d *schema.ResourceData, meta interface{}) (keyId string, err error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cvm.NewImportKeyPairRequest() response := cvm.NewImportKeyPairResponse() request.KeyName = helper.String(d.Get("key_name").(string)) request.ProjectId = helper.IntInt64(d.Get("project_id").(int)) request.PublicKey = helper.String(d.Get("public_key").(string)) - innerErr := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ImportKeyPair(request) + innerErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCvmClient().ImportKeyPair(request) if e != nil { - return retryError(e) + 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()) } @@ -131,10 +133,10 @@ func cvmCreateKeyPairByImportPublicKey(ctx context.Context, d *schema.ResourceDa } func resourceTencentCloudKeyPairCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_key_pair.create")() + defer tccommon.LogElapsed("resource.tencentcloud_key_pair.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( keyId string err error @@ -151,9 +153,9 @@ func resourceTencentCloudKeyPairCreate(d *schema.ResourceData, meta interface{}) d.SetId(keyId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} - resourceName := BuildTagResourceName("cvm", "keypair", tcClient.Region, keyId) + resourceName := tccommon.BuildTagResourceName("cvm", "keypair", tcClient.Region, keyId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -163,22 +165,22 @@ func resourceTencentCloudKeyPairCreate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudKeyPairRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_key_pair.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_key_pair.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) keyId := d.Id() cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var keyPair *cvm.KeyPair var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { keyPair, errRet = cvmService.DescribeKeyPairById(ctx, keyId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -201,7 +203,7 @@ func resourceTencentCloudKeyPairRead(d *schema.ResourceData, meta interface{}) e _ = d.Set("public_key", publicKey) } - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := TagService{client} tags, err := tagService.DescribeResourceTags(ctx, "cvm", "keypair", client.Region, d.Id()) @@ -214,14 +216,14 @@ func resourceTencentCloudKeyPairRead(d *schema.ResourceData, meta interface{}) e } func resourceTencentCloudKeyPairUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_key_pair.update")() + defer tccommon.LogElapsed("resource.tencentcloud_key_pair.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) keyId := d.Id() cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if d.HasChange("key_name") { @@ -236,10 +238,10 @@ func resourceTencentCloudKeyPairUpdate(d *schema.ResourceData, meta interface{}) oldInterface, newInterface := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldInterface.(map[string]interface{}), newInterface.(map[string]interface{})) tagService := TagService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - region := meta.(*TencentCloudClient).apiV3Conn.Region - resourceName := BuildTagResourceName("cvm", "keypair", region, keyId) + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region + resourceName := tccommon.BuildTagResourceName("cvm", "keypair", region, keyId) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -250,22 +252,22 @@ func resourceTencentCloudKeyPairUpdate(d *schema.ResourceData, meta interface{}) } func resourceTencentCloudKeyPairDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_key_pair.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_key_pair.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) keyId := d.Id() cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var keyPair *cvm.KeyPair var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { keyPair, errRet = cvmService.DescribeKeyPairById(ctx, keyId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -278,7 +280,7 @@ func resourceTencentCloudKeyPairDelete(d *schema.ResourceData, meta interface{}) } if len(keyPair.AssociatedInstanceIds) > 0 { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := cvmService.UnbindKeyPair(ctx, []*string{&keyId}, keyPair.AssociatedInstanceIds) if errRet != nil { if sdkErr, ok := errRet.(*errors.TencentCloudSDKError); ok { @@ -286,7 +288,7 @@ func resourceTencentCloudKeyPairDelete(d *schema.ResourceData, meta interface{}) return nil } } - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -295,10 +297,10 @@ func resourceTencentCloudKeyPairDelete(d *schema.ResourceData, meta interface{}) } } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { errRet := cvmService.DeleteKeyPair(ctx, keyId) if errRet != nil { - return retryError(errRet, KYE_PAIR_INVALID_ERROR, KEY_PAIR_NOT_SUPPORT_ERROR) + return tccommon.RetryError(errRet, KYE_PAIR_INVALID_ERROR, KEY_PAIR_NOT_SUPPORT_ERROR) } return nil }) diff --git a/tencentcloud/resource_tc_key_pair_test.go b/tencentcloud/services/cvm/resource_tc_key_pair_test.go similarity index 70% rename from tencentcloud/resource_tc_key_pair_test.go rename to tencentcloud/services/cvm/resource_tc_key_pair_test.go index 90e45778f7..975f8480ec 100644 --- a/tencentcloud/resource_tc_key_pair_test.go +++ b/tencentcloud/services/cvm/resource_tc_key_pair_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cvm_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + "context" "fmt" "log" @@ -17,17 +21,15 @@ func init() { resource.AddTestSweepers("tencentcloud_cvm_key_pair", &resource.Sweeper{ Name: "tencentcloud_cvm_key_pair", F: func(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - sharedClient, err := sharedClientForRegion(region) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sharedClient, err := tcacctest.SharedClientForRegion(region) if err != nil { return fmt.Errorf("getting tencentcloud client error: %s", err.Error()) } - client := sharedClient.(*TencentCloudClient) + client := sharedClient.(tccommon.ProviderMeta) - cvmService := CvmService{ - client: client.apiV3Conn, - } + cvmService := svccvm.NewCvmService(client.GetAPIV3Conn()) keyPairs, err := cvmService.DescribeKeyPairByFilter(ctx, "", "", nil) if err != nil { return fmt.Errorf("get instance list error: %s", err.Error()) @@ -35,15 +37,15 @@ func init() { for _, keyPair := range keyPairs { instanceId := *keyPair.KeyId instanceName := *keyPair.KeyName - createTime := stringTotime(*keyPair.CreatedTime) + createTime := tccommon.StringToTime(*keyPair.CreatedTime) now := time.Now() interval := now.Sub(createTime).Minutes() - if strings.HasPrefix(instanceName, keepResource) || strings.HasPrefix(instanceName, defaultResource) { + if strings.HasPrefix(instanceName, tcacctest.KeepResource) || strings.HasPrefix(instanceName, tcacctest.DefaultResource) { continue } - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } @@ -60,9 +62,9 @@ func init() { func TestAccTencentCloudKeyPairResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: "tencentcloud_key_pair.foo", - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckKeyPairDestroy, Steps: []resource.TestStep{ { @@ -83,9 +85,9 @@ func TestAccTencentCloudKeyPairResource_basic(t *testing.T) { func TestAccTencentCloudKeyPairResource_publicKey(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { tcacctest.AccPreCheck(t) }, IDRefreshName: "tencentcloud_key_pair.foo", - Providers: testAccProviders, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckKeyPairDestroy, Steps: []resource.TestStep{ { @@ -106,8 +108,8 @@ func TestAccTencentCloudKeyPairResource_publicKey(t *testing.T) { func testAccCheckKeyPairExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -116,15 +118,13 @@ func testAccCheckKeyPairExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("key pair id is not set") } - cvmService := CvmService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cvmService := svccvm.NewCvmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) keyPair, err := cvmService.DescribeKeyPairById(ctx, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { keyPair, err = cvmService.DescribeKeyPairById(ctx, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -140,11 +140,9 @@ func testAccCheckKeyPairExists(n string) resource.TestCheckFunc { } func testAccCheckKeyPairDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cvmService := CvmService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cvmService := svccvm.NewCvmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_key_pair" { continue @@ -152,10 +150,10 @@ func testAccCheckKeyPairDestroy(s *terraform.State) error { keyPair, err := cvmService.DescribeKeyPairById(ctx, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { keyPair, err = cvmService.DescribeKeyPairById(ctx, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) diff --git a/tencentcloud/resource_tc_placement_group.go b/tencentcloud/services/cvm/resource_tc_placement_group.go similarity index 63% rename from tencentcloud/resource_tc_placement_group.go rename to tencentcloud/services/cvm/resource_tc_placement_group.go index 5e39bf2c76..25fac68fbf 100644 --- a/tencentcloud/resource_tc_placement_group.go +++ b/tencentcloud/services/cvm/resource_tc_placement_group.go @@ -1,14 +1,16 @@ -package tencentcloud +package cvm import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" ) -func resourceTencentCloudPlacementGroup() *schema.Resource { +func ResourceTencentCloudPlacementGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudPlacementGroupCreate, Read: resourceTencentCloudPlacementGroupRead, @@ -22,14 +24,14 @@ func resourceTencentCloudPlacementGroup() *schema.Resource { "name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of the placement group, 1-60 characters in length.", }, "type": { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue(CVM_PLACEMENT_GROUP_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(CVM_PLACEMENT_GROUP_TYPE), Description: "Type of the placement group. Valid values: `HOST`, `SW` and `RACK`.", }, @@ -54,21 +56,21 @@ func resourceTencentCloudPlacementGroup() *schema.Resource { } func resourceTencentCloudPlacementGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_placement_group.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_placement_group.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } placementName := d.Get("name").(string) placementType := d.Get("type").(string) var id string var errRet error - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { id, errRet = cvmService.CreatePlacementGroup(ctx, placementName, placementType) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -81,22 +83,22 @@ func resourceTencentCloudPlacementGroupCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudPlacementGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_placement_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_placement_group.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) placementId := d.Id() cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var placement *cvm.DisasterRecoverGroup var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { placement, errRet = cvmService.DescribePlacementGroupById(ctx, placementId) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -118,20 +120,20 @@ func resourceTencentCloudPlacementGroupRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudPlacementGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_placement_group.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_placement_group.update")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) placementId := d.Id() cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if d.HasChange("name") { placementName := d.Get("name").(string) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err := cvmService.ModifyPlacementGroup(ctx, placementId, placementName) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -144,18 +146,18 @@ func resourceTencentCloudPlacementGroupUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudPlacementGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_placement_group.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_placement_group.delete")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) placementId := d.Id() cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err := cvmService.DeletePlacementGroup(ctx, placementId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) diff --git a/tencentcloud/resource_tc_placement_group_test.go b/tencentcloud/services/cvm/resource_tc_placement_group_test.go similarity index 69% rename from tencentcloud/resource_tc_placement_group_test.go rename to tencentcloud/services/cvm/resource_tc_placement_group_test.go index 06d6785603..94a145f701 100644 --- a/tencentcloud/resource_tc_placement_group_test.go +++ b/tencentcloud/services/cvm/resource_tc_placement_group_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cvm_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccvm "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + "context" "fmt" "testing" @@ -12,8 +16,8 @@ import ( func TestAccTencentCloudPlacementGroup(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckPlacementGroupDestroy, Steps: []resource.TestStep{ { @@ -33,8 +37,8 @@ func TestAccTencentCloudPlacementGroup(t *testing.T) { func testAccCheckPlacementGroupExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -44,15 +48,13 @@ func testAccCheckPlacementGroupExists(n string) resource.TestCheckFunc { return fmt.Errorf("placement group id is not set") } - cvmService := CvmService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cvmService := svccvm.NewCvmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) placement, err := cvmService.DescribePlacementGroupById(ctx, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { placement, err = cvmService.DescribePlacementGroupById(ctx, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -68,11 +70,9 @@ func testAccCheckPlacementGroupExists(n string) resource.TestCheckFunc { } func testAccCheckPlacementGroupDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cvmService := CvmService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cvmService := svccvm.NewCvmService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_placement_group" { continue @@ -80,10 +80,10 @@ func testAccCheckPlacementGroupDestroy(s *terraform.State) error { placement, err := cvmService.DescribePlacementGroupById(ctx, rs.Primary.ID) if err != nil { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { placement, err = cvmService.DescribePlacementGroupById(ctx, rs.Primary.ID) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) diff --git a/tencentcloud/resource_tc_reserved_instance.go b/tencentcloud/services/cvm/resource_tc_reserved_instance.go similarity index 76% rename from tencentcloud/resource_tc_reserved_instance.go rename to tencentcloud/services/cvm/resource_tc_reserved_instance.go index 051e001f34..9b18443082 100644 --- a/tencentcloud/resource_tc_reserved_instance.go +++ b/tencentcloud/services/cvm/resource_tc_reserved_instance.go @@ -1,15 +1,17 @@ -package tencentcloud +package cvm import ( "context" "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" ) -func resourceTencentCloudReservedInstance() *schema.Resource { +func ResourceTencentCloudReservedInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudReservedInstanceCreate, Read: resourceTencentCloudReservedInstanceRead, @@ -28,7 +30,7 @@ func resourceTencentCloudReservedInstance() *schema.Resource { "instance_count": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateIntegerMin(1), + ValidateFunc: tccommon.ValidateIntegerMin(1), Description: "Number of reserved instances to be purchased.", }, "reserved_instance_name": { @@ -60,14 +62,14 @@ func resourceTencentCloudReservedInstance() *schema.Resource { } func resourceTencentCloudReservedInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_reserved_instance.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + defer tccommon.LogElapsed("resource.tencentcloud_reserved_instance.create")() + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) configId := d.Get("config_id").(string) count := d.Get("instance_count").(int) cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } extendParams := make(map[string]interface{}) if v, ok := d.GetOk("reserved_instance_name"); ok { @@ -75,10 +77,10 @@ func resourceTencentCloudReservedInstanceCreate(d *schema.ResourceData, meta int } var instanceId string var errRet error - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { instanceId, errRet = cvmService.CreateReservedInstance(ctx, configId, int64(count), extendParams) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -91,25 +93,25 @@ func resourceTencentCloudReservedInstanceCreate(d *schema.ResourceData, meta int } func resourceTencentCloudReservedInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_reserved_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_reserved_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() cvmService := CvmService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } filter := map[string]string{ "reserved-instances-id": id, } var instances []*cvm.ReservedInstances var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instances, errRet = cvmService.DescribeReservedInstanceByFilter(ctx, filter) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) diff --git a/tencentcloud/service_tencentcloud_cbs.go b/tencentcloud/services/cvm/service_tencentcloud_cbs.go similarity index 94% rename from tencentcloud/service_tencentcloud_cbs.go rename to tencentcloud/services/cvm/service_tencentcloud_cbs.go index 23308f993d..22a4d1d0ca 100644 --- a/tencentcloud/service_tencentcloud_cbs.go +++ b/tencentcloud/services/cvm/service_tencentcloud_cbs.go @@ -1,12 +1,15 @@ -package tencentcloud +package cvm import ( "context" "log" "sync" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" cbs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" @@ -49,7 +52,7 @@ func (me *CbsService) DescribeDiskById(ctx context.Context, diskId string) (disk } func (me *CbsService) DescribeDiskList(ctx context.Context, diskIds []*string) (disk []*cbs.Disk, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewDescribeDisksRequest() request.DiskIds = diskIds request.Limit = helper.IntUint64(100) @@ -71,7 +74,7 @@ func (me *CbsService) DescribeDiskList(ctx context.Context, diskIds []*string) ( } func (me *CbsService) DescribeDisksByFilter(ctx context.Context, params map[string]interface{}) (disks []*cbs.Disk, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewDescribeDisksRequest() request.Filters = make([]*cbs.Filter, 0, len(params)) for k, v := range params { @@ -119,7 +122,7 @@ func (me *CbsService) DescribeDisksByFilter(ctx context.Context, params map[stri } func (me *CbsService) DescribeDisksInParallelByFilter(ctx context.Context, params map[string]interface{}) (disks []*cbs.Disk, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewDescribeDisksRequest() request.Filters = make([]*cbs.Filter, 0, len(params)) @@ -151,7 +154,7 @@ func (me *CbsService) DescribeDisksInParallelByFilter(ctx context.Context, param var limit = 100 num := int(*total) / limit - g := NewGoRoutine(num + 1) + g := tccommon.NewGoRoutine(num + 1) wg := sync.WaitGroup{} var diskSetList = make([]interface{}, num+1) @@ -206,7 +209,7 @@ func (me *CbsService) DescribeDisksInParallelByFilter(ctx context.Context, param } func (me *CbsService) ModifyDiskAttributes(ctx context.Context, diskId, diskName string, projectId int) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewModifyDiskAttributesRequest() request.DiskIds = []*string{&diskId} if diskName != "" { @@ -229,7 +232,7 @@ func (me *CbsService) ModifyDiskAttributes(ctx context.Context, diskId, diskName } func (me *CbsService) DeleteDiskSetByIds(ctx context.Context, diskSetIds string) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewTerminateDisksRequest() diskSet, err := helper.StrToStrList(diskSetIds) @@ -251,7 +254,7 @@ func (me *CbsService) DeleteDiskSetByIds(ctx context.Context, diskSetIds string) } func (me *CbsService) DeleteDiskById(ctx context.Context, diskId string) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewTerminateDisksRequest() request.DiskIds = []*string{&diskId} ratelimit.Check(request.GetAction()) @@ -267,7 +270,7 @@ func (me *CbsService) DeleteDiskById(ctx context.Context, diskId string) error { } func (me *CbsService) ResizeDisk(ctx context.Context, diskId string, diskSize int) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewResizeDiskRequest() request.DiskId = &diskId request.DiskSize = helper.IntUint64(diskSize) @@ -284,7 +287,7 @@ func (me *CbsService) ResizeDisk(ctx context.Context, diskId string, diskSize in } func (me *CbsService) ModifyThroughputPerformance(ctx context.Context, diskId string, throughputPerformance int) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewModifyDiskExtraPerformanceRequest() request.DiskId = &diskId request.ThroughputPerformance = helper.IntUint64(throughputPerformance) @@ -301,7 +304,7 @@ func (me *CbsService) ModifyThroughputPerformance(ctx context.Context, diskId st } func (me *CbsService) ApplySnapshot(ctx context.Context, diskId, snapshotId string) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewApplySnapshotRequest() request.DiskId = &diskId request.SnapshotId = &snapshotId @@ -318,7 +321,7 @@ func (me *CbsService) ApplySnapshot(ctx context.Context, diskId, snapshotId stri } func (me *CbsService) AttachDisk(ctx context.Context, diskId, instanceId string) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewAttachDisksRequest() request.DiskIds = []*string{&diskId} request.InstanceId = &instanceId @@ -335,7 +338,7 @@ func (me *CbsService) AttachDisk(ctx context.Context, diskId, instanceId string) } func (me *CbsService) DetachDisk(ctx context.Context, diskId, instanceId string) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewDetachDisksRequest() request.DiskIds = []*string{&diskId} request.InstanceId = &instanceId @@ -352,7 +355,7 @@ func (me *CbsService) DetachDisk(ctx context.Context, diskId, instanceId string) } func (me *CbsService) CreateSnapshot(ctx context.Context, diskId, snapshotName string, tags map[string]string) (snapshotId string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewCreateSnapshotRequest() request.DiskId = &diskId request.SnapshotName = &snapshotName @@ -381,7 +384,7 @@ func (me *CbsService) CreateSnapshot(ctx context.Context, diskId, snapshotName s } func (me *CbsService) DescribeSnapshotById(ctx context.Context, snapshotId string) (snapshot *cbs.Snapshot, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewDescribeSnapshotsRequest() request.SnapshotIds = []*string{&snapshotId} ratelimit.Check(request.GetAction()) @@ -407,7 +410,7 @@ func (me *CbsService) DescribeSnapshotByIds(ctx context.Context, snapshotIdsPara } var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cbs.NewDescribeSnapshotsRequest() err error response *cbs.DescribeSnapshotsResponse @@ -419,11 +422,11 @@ func (me *CbsService) DescribeSnapshotByIds(ctx context.Context, snapshotIdsPara request.Offset = &offset request.Limit = &pageSize - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseCbsClient().DescribeSnapshots(request) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -445,7 +448,7 @@ func (me *CbsService) DescribeSnapshotByIds(ctx context.Context, snapshotIdsPara } func (me *CbsService) DescribeSnapshotsByFilter(ctx context.Context, params map[string]string) (snapshots []*cbs.Snapshot, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewDescribeSnapshotsRequest() request.Filters = make([]*cbs.Filter, 0, len(params)) for k, v := range params { @@ -487,7 +490,7 @@ func (me *CbsService) DescribeSnapshotsByFilter(ctx context.Context, params map[ } func (me *CbsService) ModifySnapshotName(ctx context.Context, snapshotId, snapshotName string) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewModifySnapshotAttributeRequest() request.SnapshotId = &snapshotId request.SnapshotName = &snapshotName @@ -504,7 +507,7 @@ func (me *CbsService) ModifySnapshotName(ctx context.Context, snapshotId, snapsh } func (me *CbsService) DeleteSnapshot(ctx context.Context, snapshotId string) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewDeleteSnapshotsRequest() request.SnapshotIds = []*string{&snapshotId} ratelimit.Check(request.GetAction()) @@ -520,7 +523,7 @@ func (me *CbsService) DeleteSnapshot(ctx context.Context, snapshotId string) err } func (me *CbsService) DescribeSnapshotPolicyById(ctx context.Context, policyId string) (policy *cbs.AutoSnapshotPolicy, errRet error) { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cbs.NewDescribeAutoSnapshotPoliciesRequest() request.AutoSnapshotPolicyIds = []*string{&policyId} ratelimit.Check(request.GetAction()) @@ -541,7 +544,7 @@ func (me *CbsService) DescribeSnapshotPolicyById(ctx context.Context, policyId s } func (me *CbsService) DescribeSnapshotPolicy(ctx context.Context, policyId, policyName string) (policies []*cbs.AutoSnapshotPolicy, errRet error) { - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cbs.NewDescribeAutoSnapshotPoliciesRequest() request.Filters = make([]*cbs.Filter, 0) if policyId != "" { @@ -571,7 +574,7 @@ func (me *CbsService) DescribeSnapshotPolicy(ctx context.Context, policyId, poli } func (me *CbsService) DeleteSnapshotPolicy(ctx context.Context, policyId string) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewDeleteAutoSnapshotPoliciesRequest() request.AutoSnapshotPolicyIds = []*string{&policyId} ratelimit.Check(request.GetAction()) @@ -587,7 +590,7 @@ func (me *CbsService) DeleteSnapshotPolicy(ctx context.Context, policyId string) } func (me *CbsService) AttachSnapshotPolicy(ctx context.Context, diskId, policyId string) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewBindAutoSnapshotPolicyRequest() request.AutoSnapshotPolicyId = &policyId request.DiskIds = []*string{&diskId} @@ -602,7 +605,7 @@ func (me *CbsService) AttachSnapshotPolicy(ctx context.Context, diskId, policyId } func (me *CbsService) DescribeAttachedSnapshotPolicy(ctx context.Context, diskId, policyId string) (policy *cbs.AutoSnapshotPolicy, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewDescribeDiskAssociatedAutoSnapshotPolicyRequest() request.DiskId = &diskId ratelimit.Check(request.GetAction()) @@ -623,7 +626,7 @@ func (me *CbsService) DescribeAttachedSnapshotPolicy(ctx context.Context, diskId } func (me *CbsService) UnattachSnapshotPolicy(ctx context.Context, diskId, policyId string) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewUnbindAutoSnapshotPolicyRequest() request.AutoSnapshotPolicyId = &policyId request.DiskIds = []*string{&diskId} @@ -638,7 +641,7 @@ func (me *CbsService) UnattachSnapshotPolicy(ctx context.Context, diskId, policy } func (me *CbsService) ModifyDiskChargeType(ctx context.Context, storageId string, chargeType string, renewFlag string, period int) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewModifyDisksChargeTypeRequest() request.DiskIds = []*string{&storageId} request.DiskChargePrepaid = &cbs.DiskChargePrepaid{Period: helper.IntUint64(period), RenewFlag: &renewFlag} @@ -653,7 +656,7 @@ func (me *CbsService) ModifyDiskChargeType(ctx context.Context, storageId string } func (me *CbsService) ModifyDisksRenewFlag(ctx context.Context, storageId string, renewFlag string) error { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewModifyDisksRenewFlagRequest() request.DiskIds = []*string{&storageId} request.RenewFlag = &renewFlag @@ -669,7 +672,7 @@ func (me *CbsService) ModifyDisksRenewFlag(ctx context.Context, storageId string } func (me *CbsService) DescribeCbsDiskBackupById(ctx context.Context, diskBackupId string) (DiskBackup *cbs.DiskBackup, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewDescribeDiskBackupsRequest() request.DiskBackupIds = []*string{&diskBackupId} @@ -698,7 +701,7 @@ func (me *CbsService) DescribeCbsDiskBackupById(ctx context.Context, diskBackupI } func (me *CbsService) DeleteCbsDiskBackupById(ctx context.Context, diskBackupId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewDeleteDiskBackupsRequest() request.DiskBackupIds = []*string{&diskBackupId} @@ -722,7 +725,7 @@ func (me *CbsService) DeleteCbsDiskBackupById(ctx context.Context, diskBackupId } func (me *CbsService) ModifyDiskBackupQuota(ctx context.Context, diskId string, diskBackupQuota int) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewModifyDiskBackupQuotaRequest() defer func() { if errRet != nil { @@ -746,7 +749,7 @@ func (me *CbsService) ModifyDiskBackupQuota(ctx context.Context, diskId string, } func (me *CbsService) CreateDiskBackup(ctx context.Context, diskId, diskBackupName string) (diskBackupId string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewCreateDiskBackupRequest() defer func() { if errRet != nil { @@ -756,11 +759,11 @@ func (me *CbsService) CreateDiskBackup(ctx context.Context, diskId, diskBackupNa request.DiskId = helper.String(diskId) request.DiskBackupName = helper.String(diskBackupName) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) result, e := me.client.UseCbsClient().CreateDiskBackup(request) if e != nil { - return retryError(e) + 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()) } @@ -776,7 +779,7 @@ func (me *CbsService) CreateDiskBackup(ctx context.Context, diskId, diskBackupNa } func (me *CbsService) DescribeCbsSnapshotSharePermissionById(ctx context.Context, snapshotId string) (snapshotSharePermissions []*cbs.SharePermission, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewDescribeSnapshotSharePermissionRequest() request.SnapshotId = &snapshotId @@ -801,7 +804,7 @@ func (me *CbsService) DescribeCbsSnapshotSharePermissionById(ctx context.Context } func (me *CbsService) ModifySnapshotsSharePermission(ctx context.Context, snapshotId, permission string, accountIds []string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewModifySnapshotsSharePermissionRequest() defer func() { @@ -814,10 +817,10 @@ func (me *CbsService) ModifySnapshotsSharePermission(ctx context.Context, snapsh request.AccountIds = helper.StringsStringsPoint(accountIds) ratelimit.Check(request.GetAction()) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := me.client.UseCbsClient().ModifySnapshotsSharePermission(request) if e != nil { - return retryError(e) + 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()) } @@ -831,7 +834,7 @@ func (me *CbsService) ModifySnapshotsSharePermission(ctx context.Context, snapsh } func (me *CbsService) ApplyDiskBackup(ctx context.Context, diskBackupId, diskId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cbs.NewApplyDiskBackupRequest() defer func() { @@ -843,10 +846,10 @@ func (me *CbsService) ApplyDiskBackup(ctx context.Context, diskBackupId, diskId request.DiskId = helper.String(diskId) ratelimit.Check(request.GetAction()) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := me.client.UseCbsClient().ApplyDiskBackup(request) if e != nil { - return retryError(e) + 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()) } diff --git a/tencentcloud/services/cvm/service_tencentcloud_cvm.go b/tencentcloud/services/cvm/service_tencentcloud_cvm.go new file mode 100644 index 0000000000..607b57fed6 --- /dev/null +++ b/tencentcloud/services/cvm/service_tencentcloud_cvm.go @@ -0,0 +1,1776 @@ +package cvm + +import ( + "context" + "fmt" + "log" + "sort" + "strings" + "sync" + "time" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + sdkError "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +func NewCvmService(client *connectivity.TencentCloudClient) CvmService { + return CvmService{client: client} +} + +type CvmService struct { + client *connectivity.TencentCloudClient +} + +func (me *CvmService) DescribeInstanceSetByIds(ctx context.Context, instanceSetIds string) (instance []*cvm.Instance, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeInstancesRequest() + + instanceSet, err := helper.StrToStrList(instanceSetIds) + if err != nil { + return + } + + for _, v := range instanceSet { + ins := v + instanceId := &ins + request.InstanceIds = append(request.InstanceIds, instanceId) + } + + request.Limit = helper.IntInt64(100) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.InstanceSet) < 1 { + return + } + instance = response.Response.InstanceSet + return +} + +func (me *CvmService) DescribeInstanceById(ctx context.Context, instanceId string) (instance *cvm.Instance, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeInstancesRequest() + request.InstanceIds = []*string{&instanceId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.InstanceSet) < 1 { + return + } + instance = response.Response.InstanceSet[0] + return +} + +func (me *CvmService) DescribeInstanceByFilter(ctx context.Context, instancesId []*string, filters map[string]string) (instances []*cvm.Instance, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeInstancesRequest() + if instancesId != nil { + request.InstanceIds = instancesId + } else { + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + filter := cvm.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + } + + var offset int64 = 0 + var pageSize int64 = 100 + instances = make([]*cvm.Instance, 0) + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.InstanceSet) < 1 { + break + } + instances = append(instances, response.Response.InstanceSet...) + if len(response.Response.InstanceSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *CvmService) DescribeInstanceInParallelByFilter(ctx context.Context, filters map[string]string) (instances []*cvm.Instance, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeInstancesRequest() + + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + filter := cvm.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + response, err := me.client.UseCvmClient().DescribeInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + if response == nil || len(response.Response.InstanceSet) < 1 { + return + } + + total := response.Response.TotalCount + + var limit = 100 + + num := int(*total) / limit + + maxConcurrentNum := 50 + //g := tccommon.NewGoRoutine(num + 1) + g := tccommon.NewGoRoutine(maxConcurrentNum) + wg := sync.WaitGroup{} + + var instanceSetList = make([]interface{}, num+1) + + for i := 0; i <= num; i++ { + wg.Add(1) + value := i + goFunc := func() { + offset := value * limit + request := cvm.NewDescribeInstancesRequest() + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + filter := cvm.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + request.Offset = helper.IntInt64(offset) + request.Limit = helper.IntInt64(limit) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + instanceSetList[value] = response.Response.InstanceSet + + wg.Done() + log.Printf("[DEBUG]%s thread %d finished", logId, value) + } + g.Run(goFunc) + } + wg.Wait() + + log.Printf("[DEBUG]%s DescribeInstance requet finished", logId) + for _, v := range instanceSetList { + instances = append(instances, v.([]*cvm.Instance)...) + } + log.Printf("[DEBUG]%s transfer Instance finished", logId) + return +} + +func (me *CvmService) ModifyInstanceName(ctx context.Context, instanceId, instanceName string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyInstancesAttributeRequest() + request.InstanceIds = []*string{&instanceId} + request.InstanceName = &instanceName + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyInstancesAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ModifySecurityGroups(ctx context.Context, instanceId string, securityGroups []*string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyInstancesAttributeRequest() + request.InstanceIds = []*string{&instanceId} + request.SecurityGroups = securityGroups + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyInstancesAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ModifyDisableApiTermination(ctx context.Context, instanceId string, disableApiTermination bool) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyInstancesAttributeRequest() + request.InstanceIds = []*string{&instanceId} + request.DisableApiTermination = &disableApiTermination + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyInstancesAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ModifyProjectId(ctx context.Context, instanceId string, projectId int64) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyInstancesProjectRequest() + request.InstanceIds = []*string{&instanceId} + request.ProjectId = &projectId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyInstancesProject(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ModifyInstanceType(ctx context.Context, instanceId, instanceType string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewResetInstancesTypeRequest() + request.InstanceIds = []*string{&instanceId} + request.InstanceType = &instanceType + request.ForceStop = helper.Bool(true) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ResetInstancesType(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ModifyPassword(ctx context.Context, instanceId, password string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewResetInstancesPasswordRequest() + request.InstanceIds = []*string{&instanceId} + request.Password = &password + forceStop := true + request.ForceStop = &forceStop + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ResetInstancesPassword(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ModifyInternetMaxBandwidthOut(ctx context.Context, instanceId, internetChargeType string, internetMaxBandWidthOut int64) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewResetInstancesInternetMaxBandwidthRequest() + request.InstanceIds = []*string{&instanceId} + request.InternetAccessible = &cvm.InternetAccessible{ + InternetChargeType: &internetChargeType, + InternetMaxBandwidthOut: &internetMaxBandWidthOut, + } + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseCvmClient().ResetInstancesInternetMaxBandwidth(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *CvmService) ModifyVpc(ctx context.Context, instanceId, vpcId, subnetId, privateIp string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyInstancesVpcAttributeRequest() + request.InstanceIds = []*string{&instanceId} + request.VirtualPrivateCloud = &cvm.VirtualPrivateCloud{ + VpcId: &vpcId, + SubnetId: &subnetId, + } + if privateIp != "" { + request.VirtualPrivateCloud.PrivateIpAddresses = []*string{&privateIp} + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyInstancesVpcAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) StopInstance(ctx context.Context, instanceId string, stoppedMode string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewStopInstancesRequest() + request.InstanceIds = []*string{&instanceId} + if stoppedMode != "" { + request.StoppedMode = &stoppedMode + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().StopInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) StartInstance(ctx context.Context, instanceId string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewStartInstancesRequest() + request.InstanceIds = []*string{&instanceId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().StartInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) DeleteInstance(ctx context.Context, instanceId string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewTerminateInstancesRequest() + request.InstanceIds = []*string{&instanceId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().TerminateInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) DeleteInstanceSetByIds(ctx context.Context, instanceSetIds string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewTerminateInstancesRequest() + + instanceSet, err := helper.StrToStrList(instanceSetIds) + if err != nil { + return err + } + + for _, v := range instanceSet { + ins := v + instanceId := &ins + request.InstanceIds = append(request.InstanceIds, instanceId) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().TerminateInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ResetInstance(ctx context.Context, request *cvm.ResetInstanceRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCvmClient().ResetInstance(request) + + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) DescribeInstanceTypes(ctx context.Context, zone string) (instanceTypes []*cvm.InstanceTypeConfig, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeInstanceTypeConfigsRequest() + if zone != "" { + request.Filters = make([]*cvm.Filter, 0, 1) + filter := &cvm.Filter{ + Name: helper.String("zone"), + Values: []*string{&zone}, + } + request.Filters = append(request.Filters, filter) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeInstanceTypeConfigs(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + instanceTypes = response.Response.InstanceTypeConfigSet + return +} + +func (me *CvmService) DescribeInstanceTypesByFilter(ctx context.Context, filters map[string][]string) (instanceTypes []*cvm.InstanceTypeConfig, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeInstanceTypeConfigsRequest() + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + values := make([]*string, 0, len(v)) + for _, value := range v { + values = append(values, helper.String(value)) + } + filter := &cvm.Filter{ + Name: helper.String(k), + Values: values, + } + request.Filters = append(request.Filters, filter) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeInstanceTypeConfigs(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + instanceTypes = response.Response.InstanceTypeConfigSet + return +} + +func (me *CvmService) DescribeInstancesSellTypeByFilter(ctx context.Context, filters map[string][]string) (instanceTypes []*cvm.InstanceTypeQuotaItem, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeZoneInstanceConfigInfosRequest() + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + values := make([]*string, 0, len(v)) + for _, value := range v { + values = append(values, helper.String(value)) + } + filter := &cvm.Filter{ + Name: helper.String(k), + Values: values, + } + request.Filters = append(request.Filters, filter) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeZoneInstanceConfigInfos(request) + if err != nil { + //deal with not supported error + e, ok := err.(*sdkErrors.TencentCloudSDKError) + if ok && e.Code == CVM_ZONE_NOT_SUPPORT_ERROR { + return + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + + instanceTypes = response.Response.InstanceTypeQuotaSet + return +} + +func (me *CvmService) DescribeKeyPairById(ctx context.Context, keyId string) (keyPair *cvm.KeyPair, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeKeyPairsRequest() + request.KeyIds = []*string{&keyId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeKeyPairs(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.KeyPairSet) > 0 { + keyPair = response.Response.KeyPairSet[0] + } + return +} + +func (me *CvmService) DescribeKeyPairByFilter(ctx context.Context, id, name string, projectId *int) (keyPairs []*cvm.KeyPair, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeKeyPairsRequest() + if id != "" { + request.KeyIds = []*string{&id} + } + request.Filters = make([]*cvm.Filter, 0) + if name != "" { + filter := &cvm.Filter{ + Name: helper.String("key-name"), + Values: []*string{&name}, + } + request.Filters = append(request.Filters, filter) + } + if projectId != nil { + filter := &cvm.Filter{ + Name: helper.String("project-id"), + Values: []*string{helper.String(fmt.Sprintf("%d", *projectId))}, + } + request.Filters = append(request.Filters, filter) + } + + var offset int64 = 0 + var pageSize int64 = 100 + keyPairs = make([]*cvm.KeyPair, 0) + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeKeyPairs(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.KeyPairSet) < 1 { + break + } + keyPairs = append(keyPairs, response.Response.KeyPairSet...) + if len(response.Response.KeyPairSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *CvmService) ModifyKeyPairName(ctx context.Context, keyId, keyName string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyKeyPairAttributeRequest() + request.KeyId = &keyId + request.KeyName = &keyName + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyKeyPairAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) DeleteKeyPair(ctx context.Context, keyId string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDeleteKeyPairsRequest() + request.KeyIds = []*string{&keyId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DeleteKeyPairs(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) UnbindKeyPair(ctx context.Context, keyIds []*string, instanceIds []*string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDisassociateInstancesKeyPairsRequest() + request.KeyIds = keyIds + request.InstanceIds = instanceIds + request.ForceStop = helper.Bool(true) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DisassociateInstancesKeyPairs(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) BindKeyPair(ctx context.Context, keyIds []*string, instanceId string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewAssociateInstancesKeyPairsRequest() + request.KeyIds = keyIds + request.InstanceIds = []*string{&instanceId} + request.ForceStop = helper.Bool(true) + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseCvmClient().AssociateInstancesKeyPairs(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + + return nil +} + +func (me *CvmService) CreatePlacementGroup(ctx context.Context, placementName, placementType string) (placementId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewCreateDisasterRecoverGroupRequest() + request.Name = &placementName + request.Type = &placementType + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().CreateDisasterRecoverGroup(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response.Response.DisasterRecoverGroupId == nil { + errRet = fmt.Errorf("placement group id is nil") + return + } + placementId = *response.Response.DisasterRecoverGroupId + return +} + +func (me *CvmService) DescribePlacementGroupById(ctx context.Context, placementId string) (placementGroup *cvm.DisasterRecoverGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeDisasterRecoverGroupsRequest() + request.DisasterRecoverGroupIds = []*string{&placementId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeDisasterRecoverGroups(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.DisasterRecoverGroupSet) < 1 { + return + } + placementGroup = response.Response.DisasterRecoverGroupSet[0] + return +} + +func (me *CvmService) DescribePlacementGroupByFilter(ctx context.Context, id, name string) (placementGroups []*cvm.DisasterRecoverGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeDisasterRecoverGroupsRequest() + if id != "" { + request.DisasterRecoverGroupIds = []*string{&id} + } + if name != "" { + request.Name = &name + } + + var offset int64 = 0 + var pageSize int64 = 100 + placementGroups = make([]*cvm.DisasterRecoverGroup, 0) + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeDisasterRecoverGroups(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.DisasterRecoverGroupSet) < 1 { + break + } + placementGroups = append(placementGroups, response.Response.DisasterRecoverGroupSet...) + if len(response.Response.DisasterRecoverGroupSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *CvmService) ModifyPlacementGroup(ctx context.Context, placementId, name string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyDisasterRecoverGroupAttributeRequest() + request.DisasterRecoverGroupId = &placementId + request.Name = &name + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyDisasterRecoverGroupAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) DeletePlacementGroup(ctx context.Context, placementId string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDeleteDisasterRecoverGroupsRequest() + request.DisasterRecoverGroupIds = []*string{&placementId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DeleteDisasterRecoverGroups(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) DescribeRegions(ctx context.Context) (zones []*cvm.RegionInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeRegionsRequest() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeRegions(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + zones = response.Response.RegionSet + return +} + +func (me *CvmService) DescribeZones(ctx context.Context) (zones []*cvm.ZoneInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeZonesRequest() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeZones(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + zones = response.Response.ZoneSet + return +} + +func (me *CvmService) CreateReservedInstance(ctx context.Context, configId string, count int64, extendParams map[string]interface{}) (instanceId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewPurchaseReservedInstancesOfferingRequest() + request.ReservedInstancesOfferingId = &configId + request.InstanceCount = &count + if v, ok := extendParams["reserved_instance_name"]; ok { + reservedInstanceName := v.(string) + request.ReservedInstanceName = &reservedInstanceName + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().PurchaseReservedInstancesOffering(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response.Response.ReservedInstanceId == nil { + errRet = fmt.Errorf("reserved instance id is nil") + return + } + instanceId = *response.Response.ReservedInstanceId + return +} + +func (me *CvmService) DescribeReservedInstanceByFilter(ctx context.Context, filters map[string]string) (instances []*cvm.ReservedInstances, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeReservedInstancesRequest() + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + filter := cvm.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset int64 = 0 + var pageSize int64 = 100 + instances = make([]*cvm.ReservedInstances, 0) + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeReservedInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.ReservedInstancesSet) < 1 { + break + } + instances = append(instances, response.Response.ReservedInstancesSet...) + if len(response.Response.ReservedInstancesSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *CvmService) DescribeReservedInstanceConfigs(ctx context.Context, filters map[string]string) (configs []*cvm.ReservedInstancesOffering, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeReservedInstancesOfferingsRequest() + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + filter := cvm.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset int64 = 0 + var pageSize int64 = 100 + configs = make([]*cvm.ReservedInstancesOffering, 0) + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeReservedInstancesOfferings(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.ReservedInstancesOfferingsSet) < 1 { + break + } + configs = append(configs, response.Response.ReservedInstancesOfferingsSet...) + if len(response.Response.ReservedInstancesOfferingsSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func flattenCvmTagsMapping(tags []*cvm.Tag) (mapping map[string]string) { + mapping = make(map[string]string) + for _, tag := range tags { + mapping[*tag.Key] = *tag.Value + } + return +} + +type cvmImages []*cvm.Image + +func (a cvmImages) Len() int { + return len(a) +} + +func (a cvmImages) Swap(i, j int) { + a[i], a[j] = a[j], a[i] +} + +func (a cvmImages) Less(i, j int) bool { + if a[i].CreatedTime == nil || a[j].CreatedTime == nil { + return false + } + + itime, _ := time.Parse(time.RFC3339, *a[i].CreatedTime) + jtime, _ := time.Parse(time.RFC3339, *a[j].CreatedTime) + + return itime.Unix() < jtime.Unix() +} + +// Sort images by creation date, in descending order. +func sortImages(images cvmImages) cvmImages { + sortedImages := images + sort.Sort(sort.Reverse(sortedImages)) + return sortedImages +} + +func (me *CvmService) ModifyImage(ctx context.Context, instanceId, imageName, imageDesc string) (errRet error) { + logId := tccommon.GetLogId(ctx) + var request = cvm.NewModifyImageAttributeRequest() + request.ImageId = helper.String(instanceId) + request.ImageName = helper.String(imageName) + request.ImageDescription = helper.String(imageDesc) + + err := resource.Retry(6*tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, e := me.client.UseCvmClient().ModifyImageAttribute(request) + if e != nil { + if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { + if ee.Code == "InvalidImageId.Malformed" || ee.Code == "InvalidImageId.NotFound" || + ee.Code == "InvalidImageName.Duplicate" || ee.Code == "InvalidParameter.ValueTooLarge" { + return resource.NonRetryableError(e) + } + } + log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), e.Error()) + return resource.RetryableError(e) + } + return nil + }) + if err != nil { + return err + } + return nil +} + +func (me *CvmService) DeleteImage(ctx context.Context, imageId string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDeleteImagesRequest() + request.ImageIds = []*string{&imageId} + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseCvmClient().DeleteImages(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + + return nil +} + +func (me *CvmService) DescribeImageById(ctx context.Context, keyId string, isDelete bool) (image *cvm.Image, has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewDescribeImagesRequest() + request.ImageIds = []*string{&keyId} + + var imgRsp *cvm.DescribeImagesResponse + err := resource.Retry(20*tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeImages(request) + if err != nil { + return resource.RetryableError(err) + } + if response != nil && response.Response != nil { + if len(response.Response.ImageSet) == 0 && !isDelete { + return resource.RetryableError(fmt.Errorf("iamge instance status is processing")) + } + if len(response.Response.ImageSet) > 0 { + if *response.Response.ImageSet[0].ImageState == "CREATEFAILED" { + return resource.NonRetryableError(fmt.Errorf("[CRITAL]%s Create Image is failed", logId)) + } + if *response.Response.ImageSet[0].ImageState != "NORMAL" { + return resource.RetryableError(fmt.Errorf("iamge instance status is processing")) + } + } + + imgRsp = response + return nil + } + return resource.NonRetryableError(fmt.Errorf("response is null")) + }) + + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + + if imgRsp == nil { + return + } + + if len(imgRsp.Response.ImageSet) > 0 && len(imgRsp.Response.ImageSet[0].SnapshotSet) != 0 { + has = true + image = imgRsp.Response.ImageSet[0] + } + return +} + +func (me *CvmService) DescribeImagesByFilter(ctx context.Context, filters map[string][]string, instanceType string) (images []*cvm.Image, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDescribeImagesRequest() + request.Filters = make([]*cvm.Filter, 0, len(filters)) + for k, v := range filters { + filter := cvm.Filter{ + Name: helper.String(k), + Values: []*string{}, + } + for _, vv := range v { + filter.Values = append(filter.Values, helper.String(vv)) + } + request.Filters = append(request.Filters, &filter) + } + if instanceType != "" { + request.InstanceType = helper.String(instanceType) + } + var offset uint64 = 0 + var pageSize uint64 = 100 + images = make([]*cvm.Image, 0) + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().DescribeImages(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.ImageSet) < 1 { + break + } + images = append(images, response.Response.ImageSet...) + if len(response.Response.ImageSet) < int(pageSize) { + break + } + offset += pageSize + } + + return +} + +func (me *CvmService) ModifyRenewParam(ctx context.Context, instanceId string, renewFlag string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyInstancesRenewFlagRequest() + request.InstanceIds = []*string{&instanceId} + request.RenewFlag = &renewFlag + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyInstancesRenewFlag(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ModifyInstanceChargeType(ctx context.Context, instanceId string, chargeType string, period int, + renewFlag string) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyInstancesChargeTypeRequest() + request.InstanceIds = []*string{&instanceId} + request.InstanceChargeType = &chargeType + if chargeType == CVM_CHARGE_TYPE_PREPAID { + request.InstanceChargePrepaid = &cvm.InstanceChargePrepaid{} + if period != -1 { + request.InstanceChargePrepaid.Period = helper.IntInt64(period) + } + if renewFlag != "" { + request.InstanceChargePrepaid.RenewFlag = &renewFlag + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyInstancesChargeType(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) ResizeInstanceDisks(ctx context.Context, request *cvm.ResizeInstanceDisksRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + + 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.UseCvmClient().ResizeInstanceDisks(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 +} + +func (me *CvmService) DescribeCvmHpcClusterById(ctx context.Context, hpcClusterId string) (hpcCluster *cvm.HpcClusterInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDescribeHpcClustersRequest() + request.HpcClusterIds = []*string{&hpcClusterId} + + 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()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*cvm.HpcClusterInfo, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCvmClient().DescribeHpcClusters(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()) + + if response == nil || len(response.Response.HpcClusterSet) < 1 { + break + } + instances = append(instances, response.Response.HpcClusterSet...) + if len(response.Response.HpcClusterSet) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + hpcCluster = instances[0] + return +} + +func (me *CvmService) DeleteCvmHpcClusterById(ctx context.Context, hpcClusterId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDeleteHpcClustersRequest() + request.HpcClusterIds = []*string{&hpcClusterId} + + 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.UseCvmClient().DeleteHpcClusters(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 +} + +func (me *CvmService) DescribeCvmLaunchTemplateById(ctx context.Context, launchTemplateId string) (launchTemplate *cvm.LaunchTemplateInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDescribeLaunchTemplatesRequest() + request.LaunchTemplateIds = []*string{&launchTemplateId} + + 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.UseCvmClient().DescribeLaunchTemplates(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()) + + if len(response.Response.LaunchTemplateSet) < 1 { + return + } + + launchTemplate = response.Response.LaunchTemplateSet[0] + return +} + +func (me *CvmService) DescribeLaunchTemplateVersionsById(ctx context.Context, launchTemplateId string) (launchTemplate *cvm.LaunchTemplateVersionInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDescribeLaunchTemplateVersionsRequest() + request.LaunchTemplateId = &launchTemplateId + + 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.UseCvmClient().DescribeLaunchTemplateVersions(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()) + + if len(response.Response.LaunchTemplateVersionSet) < 1 { + return + } + + launchTemplate = response.Response.LaunchTemplateVersionSet[0] + return +} + +func (me *CvmService) DescribeLaunchTemplateVersions(ctx context.Context, launchTemplateId string) (launchTemplates []*cvm.LaunchTemplateVersionInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDescribeLaunchTemplateVersionsRequest() + request.LaunchTemplateId = &launchTemplateId + + 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()) + } + }() + + offect := 0 + limit := 50 + for { + ratelimit.Check(request.GetAction()) + request.Offset = helper.IntUint64(offect) + request.Limit = helper.IntUint64(limit) + response, err := me.client.UseCvmClient().DescribeLaunchTemplateVersions(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()) + if response == nil || response.Response == nil || len(response.Response.LaunchTemplateVersionSet) == 0 { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + return + } + + launchTemplates = append(launchTemplates, response.Response.LaunchTemplateVersionSet...) + + if len(response.Response.LaunchTemplateVersionSet) < limit { + break + } + } + + return +} + +func (me *CvmService) DeleteCvmLaunchTemplateById(ctx context.Context, launchTemplateId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDeleteLaunchTemplateRequest() + request.LaunchTemplateId = &launchTemplateId + + 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.UseCvmClient().DeleteLaunchTemplate(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 +} + +func (me *CvmService) DescribeCvmLaunchTemplateVersionById(ctx context.Context, launchTemplateId, launchTemplateVersionNumber string) (launchTemplateVersion *cvm.LaunchTemplateVersionInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDescribeLaunchTemplateVersionsRequest() + request.LaunchTemplateId = &launchTemplateId + request.LaunchTemplateVersions = []*uint64{helper.StrToUint64Point(launchTemplateVersionNumber)} + + 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.UseCvmClient().DescribeLaunchTemplateVersions(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()) + + if len(response.Response.LaunchTemplateVersionSet) < 1 { + return + } + + launchTemplateVersion = response.Response.LaunchTemplateVersionSet[0] + return +} + +func (me *CvmService) DeleteCvmLaunchTemplateVersionById(ctx context.Context, launchTemplateId, launchTemplateVersionNumber string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewDeleteLaunchTemplateVersionsRequest() + request.LaunchTemplateId = &launchTemplateId + request.LaunchTemplateVersions = []*int64{helper.StrToInt64Point(launchTemplateVersionNumber)} + + 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.UseCvmClient().DeleteLaunchTemplateVersions(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 +} + +func (me *CvmService) ModifyLaunchTemplateDefaultVersion(ctx context.Context, launchTemplateId string, defaultVersion int) error { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyLaunchTemplateDefaultVersionRequest() + request.LaunchTemplateId = helper.String(launchTemplateId) + request.DefaultVersion = helper.IntInt64(defaultVersion) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseCvmClient().ModifyLaunchTemplateDefaultVersion(request) + if err != nil { + if sdkErr, ok := err.(*sdkError.TencentCloudSDKError); ok { + if sdkErr.Code == "InvalidParameterValue.LaunchTemplateIdVerSetAlready" && strings.Contains(sdkErr.Message, "The specified launch template version had been set to default") { + return nil + } + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *CvmService) DescribeCvmChcHostsByFilter(ctx context.Context, param map[string]interface{}) (chcHosts []*cvm.ChcHost, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cvm.NewDescribeChcHostsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "chc_ids" { + request.ChcIds = helper.Strings(v.([]string)) + } + if k == "filters" { + request.Filters = v.([]*cvm.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseCvmClient().DescribeChcHosts(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()) + + if response == nil || len(response.Response.ChcHostSet) < 1 { + break + } + chcHosts = append(chcHosts, response.Response.ChcHostSet...) + if len(response.Response.ChcHostSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *CvmService) DescribeCvmChcDeniedActionsByFilter(ctx context.Context, param map[string]interface{}) (chcDeniedActions []*cvm.ChcHostDeniedActions, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cvm.NewDescribeChcDeniedActionsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "chc_ids" { + request.ChcIds = helper.Strings(v.([]string)) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCvmClient().DescribeChcDeniedActions(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()) + + if response == nil || len(response.Response.ChcHostDeniedActionSet) < 1 { + return + } + chcDeniedActions = append(chcDeniedActions, response.Response.ChcHostDeniedActionSet...) + + return +} + +func (me *CvmService) DeleteCvmChcAssistVpcById(ctx context.Context, chcId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cvm.NewRemoveChcAssistVpcRequest() + request.ChcIds = []*string{&chcId} + + 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.UseCvmClient().RemoveChcAssistVpc(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 +} + +func (me *CvmService) CvmChcInstanceStateRefreshFunc(chcId string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + request := cvm.NewDescribeChcHostsRequest() + request.ChcIds = []*string{&chcId} + response, err := me.client.UseCvmClient().DescribeChcHosts(request) + + if err != nil { + return nil, "", err + } + + if response == nil || response.Response == nil || len(response.Response.ChcHostSet) < 1 { + return nil, "", fmt.Errorf("Not found instance.") + } + return response.Response.ChcHostSet[0], helper.PString(response.Response.ChcHostSet[0].InstanceState), nil + } +} + +func (me *CvmService) CvmChcInstanceDeployVpcStateRefreshFunc(chcId string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + request := cvm.NewDescribeChcHostsRequest() + request.ChcIds = []*string{&chcId} + response, err := me.client.UseCvmClient().DescribeChcHosts(request) + + if err != nil { + return nil, "", err + } + + if response == nil || response.Response == nil || len(response.Response.ChcHostSet) < 1 { + return nil, "", fmt.Errorf("Not found instance.") + } + + if response.Response.ChcHostSet[0].DeployVirtualPrivateCloud == nil { + return response.Response.ChcHostSet[0], "", nil + } + return response.Response.ChcHostSet[0], helper.PString(response.Response.ChcHostSet[0].DeployVirtualPrivateCloud.VpcId), nil + } +} + +func (me *CvmService) CvmSyncImagesStateRefreshFunc(imageId string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + request := cvm.NewDescribeImagesRequest() + request.ImageIds = []*string{&imageId} + response, err := me.client.UseCvmClient().DescribeImages(request) + + if err != nil { + return nil, "", err + } + + if response == nil || response.Response == nil || len(response.Response.ImageSet) < 1 { + return nil, "", fmt.Errorf("Not found instance.") + } + + if response.Response.ImageSet[0].ImageState == nil { + return response.Response.ImageSet[0], "", nil + } + return response.Response.ImageSet[0], helper.PString(response.Response.ImageSet[0].ImageState), nil + } +} + +func (me *CvmService) DescribeCvmImageQuotaByFilter(ctx context.Context, param map[string]interface{}) (imageQuota int64, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cvm.NewDescribeImageQuotaRequest() + ) + + 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.UseCvmClient().DescribeImageQuota(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()) + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("Response is null") + return + } + imageQuota = *response.Response.ImageNumQuota + + return +} + +func (me *CvmService) DescribeCvmImageSharePermissionByFilter(ctx context.Context, param map[string]interface{}) (imageSharePermission []*cvm.SharePermission, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cvm.NewDescribeImageSharePermissionRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "ImageId" { + request.ImageId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseCvmClient().DescribeImageSharePermission(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()) + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("Response is null") + } + imageSharePermission = response.Response.SharePermissionSet + + return +} + +func (me *CvmService) ModifyImageSharePermission(ctx context.Context, imageId, permission string, accountIds []string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := cvm.NewModifyImageSharePermissionRequest() + + 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()) + } + }() + request.ImageId = helper.String(imageId) + request.Permission = helper.String(permission) + request.AccountIds = helper.StringsStringsPoint(accountIds) + ratelimit.Check(request.GetAction()) + + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := me.client.UseCvmClient().ModifyImageSharePermission(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 cvm ModifyImageSharePermission failed, reason:%+v", logId, err) + return err + } + return +} diff --git a/tencentcloud/services/cvm/service_tencentcloud_tag.go b/tencentcloud/services/cvm/service_tencentcloud_tag.go new file mode 100644 index 0000000000..c6854fdc9d --- /dev/null +++ b/tencentcloud/services/cvm/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package cvm + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 +} diff --git a/tencentcloud/services/cvm/service_tencentcloud_vpc.go b/tencentcloud/services/cvm/service_tencentcloud_vpc.go new file mode 100644 index 0000000000..d92374d74e --- /dev/null +++ b/tencentcloud/services/cvm/service_tencentcloud_vpc.go @@ -0,0 +1,8075 @@ +package cvm + +import ( + "context" + "encoding/base64" + "encoding/json" + "errors" + "fmt" + "log" + "net" + "regexp" + "strconv" + "strings" + "sync" + "time" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +var eipUnattachLocker = &sync.Mutex{} + +/* For Adun Sake please DO NOT Declare the redundant Type STRUCT!! */ +// VPC basic information +type VpcBasicInfo struct { + vpcId string + name string + cidr string + isMulticast bool + isDefault bool + dnsServers []string + createTime string + tags []*vpc.Tag + assistantCidrs []string + dockerAssistantCidrs []string +} + +// subnet basic information +type VpcSubnetBasicInfo struct { + vpcId string + subnetId string + routeTableId string + name string + cidr string + isMulticast bool + isDefault bool + zone string + availableIpCount int64 + createTime string +} + +// route entry basic information +type VpcRouteEntryBasicInfo struct { + routeEntryId int64 + destinationCidr string + nextType string + nextBub string + description string + entryType string + enabled bool +} + +// route table basic information +type VpcRouteTableBasicInfo struct { + routeTableId string + name string + vpcId string + isDefault bool + subnetIds []string + entryInfos []VpcRouteEntryBasicInfo + createTime string +} + +type VpcSecurityGroupLiteRule struct { + action string + cidrIp string + port string + protocol string + addressId string + addressGroupId string + securityGroupId string + protocolTemplateId string + protocolTemplateGroupId string +} + +var securityGroupIdRE = regexp.MustCompile(`^sg-\w{8}$`) +var ipAddressIdRE = regexp.MustCompile(`^ipm-\w{8}$`) +var ipAddressGroupIdRE = regexp.MustCompile(`^ipmg-\w{8}$`) +var protocolTemplateRE = regexp.MustCompile(`^ppmg?-\w{8}$`) +var protocolTemplateIdRE = regexp.MustCompile(`^ppm-\w{8}$`) +var protocolTemplateGroupIdRE = regexp.MustCompile(`^ppmg-\w{8}$`) +var portRE = regexp.MustCompile(`^(\d{1,5},)*\d{1,5}$|^\d{1,5}-\d{1,5}$`) + +// acl rule +type VpcACLRule struct { + action string + cidrIp string + port string + protocol string +} + +type VpcEniIP struct { + ip net.IP + primary bool + desc *string +} + +func (rule VpcSecurityGroupLiteRule) String() string { + + var source string + + if rule.cidrIp != "" { + source = rule.cidrIp + } + if rule.securityGroupId != "" { + source = rule.securityGroupId + } + if rule.addressId != "" { + source = rule.addressId + } + if rule.addressGroupId != "" { + source = rule.addressGroupId + } + + protocol := rule.protocol + + if protocol == "" && rule.protocolTemplateId != "" { + protocol = rule.protocolTemplateId + } else if protocol == "" && rule.protocolTemplateGroupId != "" { + protocol = rule.protocolTemplateGroupId + } + + return fmt.Sprintf("%s#%s#%s#%s", rule.action, source, rule.port, protocol) +} + +func getSecurityGroupPolicies(rules []VpcSecurityGroupLiteRule) []*vpc.SecurityGroupPolicy { + policies := make([]*vpc.SecurityGroupPolicy, 0) + + for i := range rules { + rule := rules[i] + policy := &vpc.SecurityGroupPolicy{ + Action: &rule.action, + } + + if rule.securityGroupId != "" { + policy.SecurityGroupId = &rule.securityGroupId + } else if rule.addressId != "" || rule.addressGroupId != "" { + policy.AddressTemplate = &vpc.AddressTemplateSpecification{} + if rule.addressId != "" { + policy.AddressTemplate.AddressId = &rule.addressId + } + if rule.addressGroupId != "" { + policy.AddressTemplate.AddressGroupId = &rule.addressGroupId + } + } else { + policy.CidrBlock = &rule.cidrIp + } + + usingProtocolTemplate := rule.protocolTemplateId != "" || rule.protocolTemplateGroupId != "" + + if usingProtocolTemplate { + policy.ServiceTemplate = &vpc.ServiceTemplateSpecification{} + if rule.protocolTemplateId != "" { + policy.ServiceTemplate.ServiceId = &rule.protocolTemplateId + } + if rule.protocolTemplateGroupId != "" { + policy.ServiceTemplate.ServiceGroupId = &rule.protocolTemplateGroupId + } + } + + if !usingProtocolTemplate { + policy.Protocol = &rule.protocol + } + + if !usingProtocolTemplate && rule.port != "" { + policy.Port = &rule.port + } + + policies = append(policies, policy) + } + return policies +} + +func NewVpcService(client *connectivity.TencentCloudClient) VpcService { + return VpcService{client: client} +} + +type VpcService struct { + client *connectivity.TencentCloudClient +} + +// ///////common +func (me *VpcService) fillFilter(ins []*vpc.Filter, key, value string) (outs []*vpc.Filter) { + if ins == nil { + ins = make([]*vpc.Filter, 0, 2) + } + + var filter = vpc.Filter{Name: &key, Values: []*string{&value}} + ins = append(ins, &filter) + outs = ins + return +} + +// ////////api +func (me *VpcService) CreateVpc(ctx context.Context, name, cidr string, + isMulticast bool, dnsServers []string, tags map[string]string) (vpcId string, isDefault bool, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateVpcRequest() + 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()) + } + }() + + request.VpcName = &name + request.CidrBlock = &cidr + + var enableMulticast = map[bool]string{true: "true", false: "false"}[isMulticast] + request.EnableMulticast = &enableMulticast + + if len(dnsServers) > 0 { + request.DnsServers = make([]*string, 0, len(dnsServers)) + for index := range dnsServers { + request.DnsServers = append(request.DnsServers, &dnsServers[index]) + } + } + + if len(tags) > 0 { + for tagKey, tagValue := range tags { + tag := vpc.Tag{ + Key: helper.String(tagKey), + Value: helper.String(tagValue), + } + request.Tags = append(request.Tags, &tag) + } + } + + var response *vpc.CreateVpcResponse + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseVpcClient().CreateVpc(request) + if err != nil { + return tccommon.RetryError(err) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s create vpc failed, reason: %v", logId, err) + errRet = err + return + } + vpcId, isDefault = *response.Response.Vpc.VpcId, *response.Response.Vpc.IsDefault + return +} + +func (me *VpcService) DescribeVpc(ctx context.Context, + vpcId string, + tagKey string, + cidrBlock string) (info VpcBasicInfo, has int, errRet error) { + infos, err := me.DescribeVpcs(ctx, vpcId, "", nil, nil, tagKey, cidrBlock) + if err != nil { + errRet = err + return + } + has = len(infos) + if has > 0 { + info = infos[0] + } + return +} + +func (me *VpcService) DescribeVpcs(ctx context.Context, + vpcId, name string, + tags map[string]string, + isDefaultPtr *bool, + tagKey string, + cidrBlock string) (infos []VpcBasicInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeVpcsRequest() + 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()) + } + }() + + infos = make([]VpcBasicInfo, 0, 100) + + var ( + offset = 0 + limit = 100 + total = -1 + hasVpc = map[string]bool{} + filters []*vpc.Filter + ) + + if vpcId != "" { + filters = me.fillFilter(filters, "vpc-id", vpcId) + } + + if name != "" { + filters = me.fillFilter(filters, "vpc-name", name) + } + + if tagKey != "" { + filters = me.fillFilter(filters, "tag-key", tagKey) + } + + if cidrBlock != "" { + filters = me.fillFilter(filters, "cidr-block", cidrBlock) + } + + if isDefaultPtr != nil { + filters = me.fillFilter(filters, "is-default", map[bool]string{true: "true", false: "false"}[*isDefaultPtr]) + } + + for k, v := range tags { + filters = me.fillFilter(filters, "tag:"+k, v) + } + + if len(filters) > 0 { + request.Filters = filters + } + +getMoreData: + + if total >= 0 { + if offset >= total { + return + } + } + var strLimit = fmt.Sprintf("%d", limit) + request.Limit = &strLimit + + var strOffset = fmt.Sprintf("%d", offset) + request.Offset = &strOffset + var response *vpc.DescribeVpcsResponse + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseVpcClient().DescribeVpcs(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s read vpc failed, reason: %v", logId, err) + return nil, err + } + + if total < 0 { + total = int(*response.Response.TotalCount) + } + + if len(response.Response.VpcSet) > 0 { + offset += limit + } else { + // get empty VpcInfo, we're done + return + } + for _, item := range response.Response.VpcSet { + var basicInfo VpcBasicInfo + basicInfo.cidr = *item.CidrBlock + basicInfo.createTime = *item.CreatedTime + basicInfo.dnsServers = make([]string, 0, len(item.DnsServerSet)) + + for _, v := range item.DnsServerSet { + basicInfo.dnsServers = append(basicInfo.dnsServers, *v) + } + basicInfo.isDefault = *item.IsDefault + basicInfo.isMulticast = *item.EnableMulticast + basicInfo.name = *item.VpcName + basicInfo.vpcId = *item.VpcId + + if hasVpc[basicInfo.vpcId] { + errRet = fmt.Errorf("get repeated vpc_id[%s] when doing DescribeVpcs", basicInfo.vpcId) + return + } + hasVpc[basicInfo.vpcId] = true + + if len(item.AssistantCidrSet) > 0 { + for i := range item.AssistantCidrSet { + kind := item.AssistantCidrSet[i].AssistantType + cidr := item.AssistantCidrSet[i].CidrBlock + if kind != nil && *kind == 0 { + basicInfo.assistantCidrs = append(basicInfo.assistantCidrs, *cidr) + } else { + basicInfo.dockerAssistantCidrs = append(basicInfo.dockerAssistantCidrs, *cidr) + } + } + } + + if len(item.TagSet) > 0 { + basicInfo.tags = item.TagSet + } + + infos = append(infos, basicInfo) + } + goto getMoreData + +} +func (me *VpcService) DescribeSubnet(ctx context.Context, + subnetId string, + isRemoteVpcSNAT *bool, + tagKey, + cidrBlock string) (info VpcSubnetBasicInfo, has int, errRet error) { + infos, err := me.DescribeSubnets(ctx, subnetId, "", "", "", nil, nil, isRemoteVpcSNAT, tagKey, cidrBlock) + if err != nil { + errRet = err + return + } + has = len(infos) + if has > 0 { + info = infos[0] + } + return +} + +func (me *VpcService) DescribeSubnets(ctx context.Context, + subnetId, + vpcId, + subnetName, + zone string, + tags map[string]string, + isDefaultPtr *bool, + isRemoteVpcSNAT *bool, + tagKey, + cidrBlock string) (infos []VpcSubnetBasicInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeSubnetsRequest() + 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()) + } + }() + + var ( + offset = 0 + limit = 100 + total = -1 + hasSubnet = map[string]bool{} + filters []*vpc.Filter + ) + + if subnetId != "" { + filters = me.fillFilter(filters, "subnet-id", subnetId) + } + if vpcId != "" { + filters = me.fillFilter(filters, "vpc-id", vpcId) + } + if subnetName != "" { + filters = me.fillFilter(filters, "subnet-name", subnetName) + } + if zone != "" { + filters = me.fillFilter(filters, "zone", zone) + } + + if isDefaultPtr != nil { + filters = me.fillFilter(filters, "is-default", map[bool]string{true: "true", false: "false"}[*isDefaultPtr]) + } + + if isRemoteVpcSNAT != nil { + filters = me.fillFilter(filters, "is-remote-vpc-snat", map[bool]string{true: "true", false: "false"}[*isRemoteVpcSNAT]) + } + + if tagKey != "" { + filters = me.fillFilter(filters, "tag-key", tagKey) + } + if cidrBlock != "" { + filters = me.fillFilter(filters, "cidr-block", cidrBlock) + } + + for k, v := range tags { + filters = me.fillFilter(filters, "tag:"+k, v) + } + + if len(filters) > 0 { + request.Filters = filters + } + +getMoreData: + if total >= 0 { + if offset >= total { + return + } + } + var strLimit = fmt.Sprintf("%d", limit) + request.Limit = &strLimit + + var strOffset = fmt.Sprintf("%d", offset) + request.Offset = &strOffset + var response *vpc.DescribeSubnetsResponse + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseVpcClient().DescribeSubnets(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s read subnets failed, reason: %v", logId, err) + return nil, err + } + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if total < 0 { + total = int(*response.Response.TotalCount) + } + + if len(response.Response.SubnetSet) > 0 { + offset += limit + } else { + // get empty subnet, we're done + return + } + for _, item := range response.Response.SubnetSet { + var basicInfo VpcSubnetBasicInfo + + basicInfo.cidr = *item.CidrBlock + basicInfo.createTime = *item.CreatedTime + basicInfo.vpcId = *item.VpcId + basicInfo.subnetId = *item.SubnetId + basicInfo.routeTableId = *item.RouteTableId + + basicInfo.name = *item.SubnetName + basicInfo.isDefault = *item.IsDefault + basicInfo.isMulticast = *item.EnableBroadcast + + basicInfo.zone = *item.Zone + basicInfo.availableIpCount = int64(*item.AvailableIpAddressCount) + + if hasSubnet[basicInfo.subnetId] { + errRet = fmt.Errorf("get repeated subnetId[%s] when doing DescribeSubnets", basicInfo.subnetId) + return + } + hasSubnet[basicInfo.subnetId] = true + infos = append(infos, basicInfo) + } + goto getMoreData +} + +func (me *VpcService) ModifyVpcAttribute(ctx context.Context, vpcId, name string, isMulticast bool, dnsServers []string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyVpcAttributeRequest() + 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()) + } + }() + + request.VpcId = &vpcId + request.VpcName = &name + + if len(dnsServers) > 0 { + request.DnsServers = make([]*string, 0, len(dnsServers)) + for index := range dnsServers { + request.DnsServers = append(request.DnsServers, &dnsServers[index]) + } + } + var enableMulticast = map[bool]string{true: "true", false: "false"}[isMulticast] + request.EnableMulticast = &enableMulticast + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().ModifyVpcAttribute(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s modify vpc failed, reason: %v", logId, err) + return err + } + + return +} + +func (me *VpcService) DeleteVpc(ctx context.Context, vpcId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteVpcRequest() + 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()) + } + }() + if vpcId == "" { + errRet = fmt.Errorf("DeleteVpc can not delete empty vpc_id.") + return + } + + request.VpcId = &vpcId + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().DeleteVpc(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete vpc failed, reason: %v", logId, err) + return err + } + return + +} + +func (me *VpcService) CreateSubnet(ctx context.Context, vpcId, name, cidr, zone string, tags map[string]string) (subnetId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateSubnetRequest() + 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()) + } + }() + + if vpcId == "" { + errRet = fmt.Errorf("CreateSubnet can not invoke by empty vpc_id.") + return + } + request.VpcId = &vpcId + request.SubnetName = &name + request.CidrBlock = &cidr + request.Zone = &zone + + if len(tags) > 0 { + for tagKey, tagValue := range tags { + tag := vpc.Tag{ + Key: helper.String(tagKey), + Value: helper.String(tagValue), + } + request.Tags = append(request.Tags, &tag) + } + } + + var response *vpc.CreateSubnetResponse + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + result, err := me.client.UseVpcClient().CreateSubnet(request) + if err != nil { + return tccommon.RetryError(err) + } + response = result + return nil + }); err != nil { + log.Printf("[CRITAL]%s create subnet failed, reason: %v", logId, err) + return "", err + } + + subnetId = *response.Response.Subnet.SubnetId + + return +} + +func (me *VpcService) ModifySubnetAttribute(ctx context.Context, subnetId, name string, isMulticast bool) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifySubnetAttributeRequest() + 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()) + } + }() + + var enableMulticast = map[bool]string{true: "true", false: "false"}[isMulticast] + + request.SubnetId = &subnetId + request.SubnetName = &name + request.EnableBroadcast = &enableMulticast + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().ModifySubnetAttribute(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s modify subnet failed, reason: %v", logId, err) + return err + } + return +} + +func (me *VpcService) DeleteSubnet(ctx context.Context, subnetId string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteSubnetRequest() + 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()) + } + }() + request.SubnetId = &subnetId + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().DeleteSubnet(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete subnet failed, reason: %v", logId, err) + return err + } + return + +} + +func (me *VpcService) ReplaceRouteTableAssociation(ctx context.Context, subnetId string, routeTableId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewReplaceRouteTableAssociationRequest() + 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()) + } + }() + request.SubnetId = &subnetId + request.RouteTableId = &routeTableId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().ReplaceRouteTableAssociation(request) + + errRet = err + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + return +} + +func (me *VpcService) IsRouteTableInVpc(ctx context.Context, routeTableId, vpcId string) (info VpcRouteTableBasicInfo, has int, errRet error) { + + infos, err := me.DescribeRouteTables(ctx, routeTableId, "", vpcId, nil, nil, "") + if err != nil { + errRet = err + return + } + has = len(infos) + if has > 0 { + info = infos[0] + } + return + +} + +func (me *VpcService) DescribeRouteTable(ctx context.Context, routeTableId string) (info VpcRouteTableBasicInfo, has int, errRet error) { + + infos, err := me.DescribeRouteTables(ctx, routeTableId, "", "", nil, nil, "") + if err != nil { + errRet = err + return + } + + has = len(infos) + + if has == 0 { + return + } + info = infos[0] + return +} +func (me *VpcService) DescribeRouteTables(ctx context.Context, + routeTableId, + routeTableName, + vpcId string, + tags map[string]string, + associationMain *bool, + tagKey string) (infos []VpcRouteTableBasicInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeRouteTablesRequest() + 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()) + } + }() + + infos = make([]VpcRouteTableBasicInfo, 0, 100) + var offset = 0 + var limit = 100 + var total = -1 + var hasTableMap = map[string]bool{} + + var filters []*vpc.Filter + if routeTableId != "" { + filters = me.fillFilter(filters, "route-table-id", routeTableId) + } + if vpcId != "" { + filters = me.fillFilter(filters, "vpc-id", vpcId) + } + if routeTableName != "" { + filters = me.fillFilter(filters, "route-table-name", routeTableName) + } + if associationMain != nil { + filters = me.fillFilter(filters, "association.main", map[bool]string{true: "true", false: "false"}[*associationMain]) + } + if tagKey != "" { + filters = me.fillFilter(filters, "tag-key", tagKey) + } + for k, v := range tags { + filters = me.fillFilter(filters, "tag:"+k, v) + } + if len(filters) > 0 { + request.Filters = filters + } + +getMoreData: + if total >= 0 { + if offset >= total { + return + } + } + var strLimit = fmt.Sprintf("%d", limit) + request.Limit = &strLimit + + var strOffset = fmt.Sprintf("%d", offset) + request.Offset = &strOffset + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeRouteTables(request) + if err != nil { + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if total < 0 { + total = int(*response.Response.TotalCount) + } + + if len(response.Response.RouteTableSet) > 0 { + offset += limit + } else { + // get empty Vpcinfo, we're done + return + } + for _, item := range response.Response.RouteTableSet { + var basicInfo VpcRouteTableBasicInfo + basicInfo.createTime = *item.CreatedTime + basicInfo.isDefault = *item.Main + basicInfo.name = *item.RouteTableName + basicInfo.routeTableId = *item.RouteTableId + basicInfo.vpcId = *item.VpcId + + basicInfo.subnetIds = make([]string, 0, len(item.AssociationSet)) + for _, v := range item.AssociationSet { + basicInfo.subnetIds = append(basicInfo.subnetIds, *v.SubnetId) + } + + basicInfo.entryInfos = make([]VpcRouteEntryBasicInfo, 0, len(item.RouteSet)) + + for _, v := range item.RouteSet { + var entry VpcRouteEntryBasicInfo + entry.destinationCidr = *v.DestinationCidrBlock + entry.nextBub = *v.GatewayId + entry.nextType = *v.GatewayType + entry.description = *v.RouteDescription + entry.routeEntryId = int64(*v.RouteId) + entry.entryType = *v.RouteType + entry.enabled = *v.Enabled + basicInfo.entryInfos = append(basicInfo.entryInfos, entry) + } + if hasTableMap[basicInfo.routeTableId] { + errRet = fmt.Errorf("get repeated route_table_id[%s] when doing DescribeRouteTables", basicInfo.routeTableId) + return + } + hasTableMap[basicInfo.routeTableId] = true + infos = append(infos, basicInfo) + } + goto getMoreData + +} + +func (me *VpcService) CreateRouteTable(ctx context.Context, name, vpcId string, tags map[string]string) (routeTableId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateRouteTableRequest() + 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()) + } + }() + + if vpcId == "" { + errRet = fmt.Errorf("CreateRouteTable can not invoke by empty vpc_id.") + return + } + request.VpcId = &vpcId + request.RouteTableName = &name + if len(tags) > 0 { + for tagKey, tagValue := range tags { + tag := vpc.Tag{ + Key: helper.String(tagKey), + Value: helper.String(tagValue), + } + request.Tags = append(request.Tags, &tag) + } + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().CreateRouteTable(request) + errRet = err + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + routeTableId = *response.Response.RouteTable.RouteTableId + } + return +} + +func (me *VpcService) DeleteRouteTable(ctx context.Context, routeTableId string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteRouteTableRequest() + 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()) + } + }() + + if routeTableId == "" { + errRet = fmt.Errorf("DeleteRouteTable can not invoke by empty routeTableId.") + return + } + request.RouteTableId = &routeTableId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DeleteRouteTable(request) + errRet = err + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + + return +} + +func (me *VpcService) ModifyRouteTableAttribute(ctx context.Context, routeTableId string, name string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyRouteTableAttributeRequest() + 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()) + } + }() + + if routeTableId == "" { + errRet = fmt.Errorf("ModifyRouteTableAttribute can not invoke by empty routeTableId.") + return + } + request.RouteTableId = &routeTableId + request.RouteTableName = &name + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().ModifyRouteTableAttribute(request) + errRet = err + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + + return +} + +func (me *VpcService) GetRouteId(ctx context.Context, + routeTableId, destinationCidrBlock, nextType, nextHub, description string) (entryId int64, errRet error) { + + logId := tccommon.GetLogId(ctx) + + info, has, err := me.DescribeRouteTable(ctx, routeTableId) + if err != nil { + errRet = err + return + } + if has == 0 { + errRet = fmt.Errorf("not fonud the route table of this route entry") + return + } + + if has != 1 { + errRet = fmt.Errorf("one routeTableId id get %d routeTableId infos", has) + return + } + + for _, v := range info.entryInfos { + + if v.destinationCidr == destinationCidrBlock && v.nextType == nextType && v.nextBub == nextHub { + entryId = v.routeEntryId + return + } + } + errRet = fmt.Errorf("not found route entry id from route table [%s]", routeTableId) + + for _, v := range info.entryInfos { + log.Printf("%s[WARN] GetRouteId [%+v] vs [%+v],[%+v] vs [%+v],[%+v] vs [%+v] %+v\n", + logId, + v.destinationCidr, + destinationCidrBlock, + v.nextType, + nextType, + v.nextBub, + nextHub, + v.destinationCidr == destinationCidrBlock && v.nextType == nextType && v.nextBub == nextHub) + } + + return + +} + +func (me *VpcService) DeleteRoutes(ctx context.Context, routeTableId string, entryId uint64) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteRoutesRequest() + 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()) + } + }() + + if routeTableId == "" { + errRet = fmt.Errorf("DeleteRoutes can not invoke by empty routeTableId.") + return + } + + request.RouteTableId = &routeTableId + var route vpc.Route + route.RouteId = &entryId + request.Routes = []*vpc.Route{&route} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DeleteRoutes(request) + errRet = err + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } + return +} + +func (me *VpcService) CreateRoutes(ctx context.Context, + routeTableId, destinationCidrBlock, nextType, nextHub, description string, enabled bool) (entryId int64, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateRoutesRequest() + 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()) + } + }() + + if routeTableId == "" { + errRet = fmt.Errorf("CreateRoutes can not invoke by empty routeTableId.") + return + } + request.RouteTableId = &routeTableId + var route vpc.Route + route.DestinationCidrBlock = &destinationCidrBlock + route.RouteDescription = &description + route.GatewayType = &nextType + route.GatewayId = &nextHub + route.Enabled = &enabled + request.Routes = []*vpc.Route{&route} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().CreateRoutes(request) + errRet = err + if err == nil { + log.Printf("[DEBUG]%s api[%s] , request body [%s], response body[%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + } else { + return + } + + entryId, errRet = me.GetRouteId(ctx, routeTableId, destinationCidrBlock, nextType, nextHub, description) + + if errRet != nil { + time.Sleep(3 * time.Second) + entryId, errRet = me.GetRouteId(ctx, routeTableId, destinationCidrBlock, nextType, nextHub, description) + } + + if errRet != nil { + time.Sleep(5 * time.Second) + entryId, errRet = me.GetRouteId(ctx, routeTableId, destinationCidrBlock, nextType, nextHub, description) + } + + /* + if *(response.Response.TotalCount) != 1 { + errRet = fmt.Errorf("CreateRoutes return %d routeTable . but we only request 1.", *response.Response.TotalCount) + return + } + + if len(response.Response.RouteTableSet) != 1 { + errRet = fmt.Errorf("CreateRoutes return %d routeTable info . but we only request 1.", len(response.Response.RouteTableSet)) + return + } + + if len(response.Response.RouteTableSet[0].RouteSet) != 1 { + errRet = fmt.Errorf("CreateRoutes return %d routeTableSet info . but we only create 1.", len(response.Response.RouteTableSet[0].RouteSet)) + return + } + + entryId = int64(*response.Response.RouteTableSet[0].RouteSet[0].RouteId) + */ + + return +} + +func (me *VpcService) SwitchRouteEnabled(ctx context.Context, routeTableId string, routeId uint64, enabled bool) error { + if enabled { + request := vpc.NewEnableRoutesRequest() + request.RouteTableId = &routeTableId + request.RouteIds = []*uint64{&routeId} + return me.EnableRoutes(ctx, request) + } else { + request := vpc.NewDisableRoutesRequest() + request.RouteTableId = &routeTableId + request.RouteIds = []*uint64{&routeId} + return me.DisableRoutes(ctx, request) + } +} + +func (me *VpcService) EnableRoutes(ctx context.Context, request *vpc.EnableRoutesRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().EnableRoutes(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 +} +func (me *VpcService) DisableRoutes(ctx context.Context, request *vpc.DisableRoutesRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().DisableRoutes(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 +} +func (me *VpcService) CreateSecurityGroup(ctx context.Context, name, desc string, projectId *int, tags map[string]string) (id string, err error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewCreateSecurityGroupRequest() + + request.GroupName = &name + request.GroupDescription = &desc + + if projectId != nil { + request.ProjectId = helper.String(strconv.Itoa(*projectId)) + } + + if len(tags) > 0 { + for tagKey, tagValue := range tags { + tag := vpc.Tag{ + Key: helper.String(tagKey), + Value: helper.String(tagValue), + } + request.Tags = append(request.Tags, &tag) + } + } + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().CreateSecurityGroup(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + if response.Response.SecurityGroup == nil || response.Response.SecurityGroup.SecurityGroupId == nil { + err := fmt.Errorf("api[%s] return security group id is nil", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + id = *response.Response.SecurityGroup.SecurityGroupId + return nil + }); err != nil { + log.Printf("[CRITAL]%s create security group failed, reason: %v", logId, err) + return "", err + } + + return +} + +func (me *VpcService) DescribeSecurityGroup(ctx context.Context, id string) (sg *vpc.SecurityGroup, err error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeSecurityGroupsRequest() + request.SecurityGroupIds = []*string{&id} + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeSecurityGroups(request) + if err != nil { + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if sdkError.Code == "ResourceNotFound" { + return nil + } + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err, tccommon.InternalError) + } + + if len(response.Response.SecurityGroupSet) == 0 { + return nil + } + + sg = response.Response.SecurityGroupSet[0] + + return nil + }); err != nil { + log.Printf("[CRITAL]%s read security group failed, reason: %v", logId, err) + return nil, err + } + + return +} + +func (me *VpcService) ModifySecurityGroup(ctx context.Context, id string, newName, newDesc *string) error { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewModifySecurityGroupAttributeRequest() + + request.SecurityGroupId = &id + request.GroupName = newName + request.GroupDescription = newDesc + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().ModifySecurityGroupAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s modify security group failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) DeleteSecurityGroup(ctx context.Context, id string) error { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteSecurityGroupRequest() + request.SecurityGroupId = &id + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseVpcClient().DeleteSecurityGroup(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete security group failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) DescribeSecurityGroupsAssociate(ctx context.Context, ids []string) ([]*vpc.SecurityGroupAssociationStatistics, error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeSecurityGroupAssociationStatisticsRequest() + request.SecurityGroupIds = common.StringPtrs(ids) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeSecurityGroupAssociationStatistics(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return nil, err + } + + return response.Response.SecurityGroupAssociationStatisticsSet, nil +} + +// Deprecated: the redundant type struct cause cause unnecessary mental burden, use sdk request directly +func (me *VpcService) CreateSecurityGroupPolicy(ctx context.Context, info securityGroupRuleBasicInfoWithPolicyIndex) (ruleId string, err error) { + logId := tccommon.GetLogId(ctx) + + createRequest := vpc.NewCreateSecurityGroupPoliciesRequest() + createRequest.SecurityGroupId = &info.SgId + + createRequest.SecurityGroupPolicySet = new(vpc.SecurityGroupPolicySet) + + policy := new(vpc.SecurityGroupPolicy) + + policy.CidrBlock = info.CidrIp + policy.SecurityGroupId = info.SourceSgId + policy.AddressTemplate = &vpc.AddressTemplateSpecification{} + if info.AddressTemplateId != nil && *info.AddressTemplateId != "" { + policy.AddressTemplate.AddressId = info.AddressTemplateId + } + if info.AddressTemplateGroupId != nil && *info.AddressTemplateGroupId != "" { + policy.AddressTemplate.AddressGroupId = info.AddressTemplateGroupId + } + + policy.ServiceTemplate = &vpc.ServiceTemplateSpecification{} + if info.ProtocolTemplateId != nil && *info.ProtocolTemplateId != "" { + policy.ServiceTemplate.ServiceId = info.ProtocolTemplateId + } + if info.ProtocolTemplateGroupId != nil && *info.ProtocolTemplateGroupId != "" { + policy.ServiceTemplate.ServiceGroupId = info.ProtocolTemplateGroupId + } + + if info.Protocol != nil { + policy.Protocol = common.StringPtr(strings.ToUpper(*info.Protocol)) + } + policy.PolicyIndex = helper.Int64(info.PolicyIndex) + policy.Port = info.PortRange + policy.PolicyDescription = info.Description + policy.Action = common.StringPtr(strings.ToUpper(info.Action)) + + switch strings.ToLower(info.PolicyType) { + case "ingress": + createRequest.SecurityGroupPolicySet.Ingress = []*vpc.SecurityGroupPolicy{policy} + + case "egress": + createRequest.SecurityGroupPolicySet.Egress = []*vpc.SecurityGroupPolicy{policy} + } + ratelimit.Check(createRequest.GetAction()) + if _, err := me.client.UseVpcClient().CreateSecurityGroupPolicies(createRequest); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, createRequest.GetAction(), createRequest.ToJsonString(), err) + return "", err + } + + if info.CidrIp == nil { + info.CidrIp = common.StringPtr("") + } + if info.Protocol == nil { + info.Protocol = common.StringPtr("ALL") + } + if info.PortRange == nil { + info.PortRange = common.StringPtr("ALL") + } + if info.SourceSgId == nil { + info.SourceSgId = common.StringPtr("") + } + + ruleId, err = buildSecurityGroupRuleId(info.securityGroupRuleBasicInfo) + if err != nil { + return "", fmt.Errorf("build rule id error, reason: %v", err) + } + + return ruleId, nil +} + +func (me *VpcService) CreateSecurityGroupPolicies(ctx context.Context, request *vpc.CreateSecurityGroupPoliciesRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().CreateSecurityGroupPolicies(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 +} + +// Deprecated: use DescribeSecurityGroupPolicies instead +func (me *VpcService) DescribeSecurityGroupPolicy(ctx context.Context, ruleId string) (sgId string, policyType string, policy *vpc.SecurityGroupPolicy, errRet error) { + logId := tccommon.GetLogId(ctx) + + info, err := parseSecurityGroupRuleId(ruleId) + if err != nil { + errRet = err + return + } + + request := vpc.NewDescribeSecurityGroupPoliciesRequest() + request.SecurityGroupId = &info.SgId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeSecurityGroupPolicies(request) + if err != nil { + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + // if security group does not exist, security group rule does not exist too + if sdkError.Code == "ResourceNotFound" { + return + } + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + + policySet := response.Response.SecurityGroupPolicySet + + if policySet == nil { + log.Printf("[DEBUG]%s policy set is nil", logId) + return + } + + var policies []*vpc.SecurityGroupPolicy + + switch strings.ToLower(info.PolicyType) { + case "ingress": + policies = policySet.Ingress + + case "egress": + policies = policySet.Egress + } + + for _, pl := range policies { + if comparePolicyAndSecurityGroupInfo(pl, info) { + policy = pl + break + } + } + + if policy == nil { + log.Printf("[DEBUG]%s can't find security group rule, maybe user modify rules on web console", logId) + return + } + + return info.SgId, info.PolicyType, policy, nil +} + +func (me *VpcService) DescribeSecurityGroupPolicies(ctx context.Context, sgId string) (result *vpc.SecurityGroupPolicySet, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeSecurityGroupPoliciesRequest() + 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()) + } + }() + request.SecurityGroupId = &sgId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeSecurityGroupPolicies(request) + + if err != nil { + errRet = err + return + } + + result = response.Response.SecurityGroupPolicySet + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *VpcService) DeleteSecurityGroupPolicy(ctx context.Context, ruleId string) error { + logId := tccommon.GetLogId(ctx) + + info, err := parseSecurityGroupRuleId(ruleId) + if err != nil { + return err + } + + request := vpc.NewDeleteSecurityGroupPoliciesRequest() + request.SecurityGroupId = &info.SgId + request.SecurityGroupPolicySet = new(vpc.SecurityGroupPolicySet) + + policy := new(vpc.SecurityGroupPolicy) + policy.Action = common.StringPtr(strings.ToUpper(info.Action)) + + if *info.CidrIp != "" { + policy.CidrBlock = info.CidrIp + } + + if *info.Protocol != "ALL" { + policy.Protocol = common.StringPtr(strings.ToUpper(*info.Protocol)) + } + + if *info.PortRange != "ALL" { + policy.Port = info.PortRange + } + + if *info.SourceSgId != "" { + policy.SecurityGroupId = info.SourceSgId + } + + if info.AddressTemplateGroupId != nil && *info.AddressTemplateGroupId != "" { + policy.AddressTemplate = &vpc.AddressTemplateSpecification{} + policy.AddressTemplate.AddressGroupId = info.AddressTemplateGroupId + } + + if info.AddressTemplateId != nil && *info.AddressTemplateId != "" { + policy.AddressTemplate = &vpc.AddressTemplateSpecification{} + policy.AddressTemplate.AddressId = info.AddressTemplateId + } + + if info.ProtocolTemplateGroupId != nil && *info.ProtocolTemplateGroupId != "" { + policy.ServiceTemplate = &vpc.ServiceTemplateSpecification{} + policy.ServiceTemplate.ServiceGroupId = info.ProtocolTemplateGroupId + } + + if info.ProtocolTemplateId != nil && *info.ProtocolTemplateId != "" { + policy.ServiceTemplate = &vpc.ServiceTemplateSpecification{} + policy.ServiceTemplate.ServiceId = info.ProtocolTemplateId + } + + if info.Description != nil && *info.Description != "" { + policy.PolicyDescription = info.Description + } + + switch strings.ToLower(info.PolicyType) { + case "ingress": + request.SecurityGroupPolicySet.Ingress = []*vpc.SecurityGroupPolicy{policy} + + case "egress": + request.SecurityGroupPolicySet.Egress = []*vpc.SecurityGroupPolicy{policy} + } + ratelimit.Check(request.GetAction()) + if _, err := me.client.UseVpcClient().DeleteSecurityGroupPolicies(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return err + } + + return nil +} + +func (me *VpcService) DeleteSecurityGroupPolicies(ctx context.Context, request *vpc.DeleteSecurityGroupPoliciesRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().DeleteSecurityGroupPolicies(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 +} + +func (me *VpcService) DeleteSecurityGroupPolicyByPolicyIndex(ctx context.Context, policyIndex int64, sgId, policyType string) error { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteSecurityGroupPoliciesRequest() + request.SecurityGroupId = helper.String(sgId) + request.SecurityGroupPolicySet = new(vpc.SecurityGroupPolicySet) + + policy := new(vpc.SecurityGroupPolicy) + policy.PolicyIndex = helper.Int64(policyIndex) + switch strings.ToLower(policyType) { + case "ingress": + request.SecurityGroupPolicySet.Ingress = []*vpc.SecurityGroupPolicy{policy} + + case "egress": + request.SecurityGroupPolicySet.Egress = []*vpc.SecurityGroupPolicy{policy} + } + ratelimit.Check(request.GetAction()) + if _, err := me.client.UseVpcClient().DeleteSecurityGroupPolicies(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return err + } + return nil + +} + +func (me *VpcService) DeleteSecurityGroupPolicyByPolicyIndexList(ctx context.Context, sgId string, policyIndexList []*int64, policyType string) error { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteSecurityGroupPoliciesRequest() + request.SecurityGroupId = helper.String(sgId) + request.SecurityGroupPolicySet = new(vpc.SecurityGroupPolicySet) + + tmpList := make([]*vpc.SecurityGroupPolicy, 0) + for _, v := range policyIndexList { + policy := new(vpc.SecurityGroupPolicy) + policy.PolicyIndex = v + tmpList = append(tmpList, policy) + } + + switch strings.ToLower(policyType) { + + case "ingress": + request.SecurityGroupPolicySet.Ingress = tmpList + + case "egress": + request.SecurityGroupPolicySet.Egress = tmpList + } + + ratelimit.Check(request.GetAction()) + if _, err := me.client.UseVpcClient().DeleteSecurityGroupPolicies(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return err + } + return nil + +} + +// Deprecated: Use ModifySecurityGroupPolicies instead +func (me *VpcService) ModifySecurityGroupPolicy(ctx context.Context, ruleId string, desc *string) error { + logId := tccommon.GetLogId(ctx) + + info, err := parseSecurityGroupRuleId(ruleId) + if err != nil { + return err + } + + request := vpc.NewReplaceSecurityGroupPolicyRequest() + request.SecurityGroupId = &info.SgId + request.SecurityGroupPolicySet = new(vpc.SecurityGroupPolicySet) + + policy := &vpc.SecurityGroupPolicy{ + Action: &info.Action, + CidrBlock: info.CidrIp, + Protocol: info.Protocol, + Port: info.PortRange, + SecurityGroupId: info.SourceSgId, + PolicyDescription: desc, + } + + switch info.PolicyType { + case "ingress": + request.SecurityGroupPolicySet.Ingress = []*vpc.SecurityGroupPolicy{policy} + + case "egress": + request.SecurityGroupPolicySet.Egress = []*vpc.SecurityGroupPolicy{policy} + } + ratelimit.Check(request.GetAction()) + if _, err := me.client.UseVpcClient().ReplaceSecurityGroupPolicy(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return err + } + + return nil +} + +func (me *VpcService) ModifySecurityGroupPolicies(ctx context.Context, request *vpc.ModifySecurityGroupPoliciesRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().ModifySecurityGroupPolicies(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 +} + +func (me *VpcService) DescribeSecurityGroups(ctx context.Context, sgId, sgName *string, projectId *int, tags map[string]string) (sgs []*vpc.SecurityGroup, err error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeSecurityGroupsRequest() + + if sgId != nil { + request.SecurityGroupIds = []*string{sgId} + } else { + if sgName != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("security-group-name"), + Values: []*string{sgName}, + }) + } + + if projectId != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("project-id"), + Values: []*string{helper.String(strconv.Itoa(*projectId))}, + }) + } + + for k, v := range tags { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("tag:" + k), + Values: []*string{helper.String(v)}, + }) + } + } + + request.Limit = helper.String(strconv.Itoa(DESCRIBE_SECURITY_GROUP_LIMIT)) + + offset := 0 + count := DESCRIBE_SECURITY_GROUP_LIMIT + // run loop at least once + for count == DESCRIBE_SECURITY_GROUP_LIMIT { + request.Offset = helper.String(strconv.Itoa(offset)) + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeSecurityGroups(request) + if err != nil { + count = 0 + + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if sdkError.Code == "ResourceNotFound" { + return nil + } + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err, tccommon.InternalError) + } + + set := response.Response.SecurityGroupSet + count = len(set) + sgs = append(sgs, set...) + + return nil + }); err != nil { + log.Printf("[CRITAL]%s read security groups failed, reason: %v", logId, err) + return nil, err + } + + offset += count + } + + return +} + +func (me *VpcService) modifyLiteRulesInSecurityGroup(ctx context.Context, sgId string, ingress, egress []VpcSecurityGroupLiteRule) error { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewModifySecurityGroupPoliciesRequest() + request.SecurityGroupId = &sgId + request.SecurityGroupPolicySet = new(vpc.SecurityGroupPolicySet) + request.SecurityGroupPolicySet.Egress = getSecurityGroupPolicies(egress) + request.SecurityGroupPolicySet.Ingress = getSecurityGroupPolicies(ingress) + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseVpcClient().ModifySecurityGroupPolicies(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }) +} + +func (me *VpcService) DeleteLiteRules(ctx context.Context, sgId string, rules []VpcSecurityGroupLiteRule, isIngress bool) error { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteSecurityGroupPoliciesRequest() + request.SecurityGroupId = &sgId + request.SecurityGroupPolicySet = new(vpc.SecurityGroupPolicySet) + + if isIngress { + request.SecurityGroupPolicySet.Ingress = getSecurityGroupPolicies(rules) + } else { + request.SecurityGroupPolicySet.Egress = getSecurityGroupPolicies(rules) + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseVpcClient().DeleteSecurityGroupPolicies(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + + return tccommon.RetryError(err) + } + + return nil + }) +} + +func (me *VpcService) AttachLiteRulesToSecurityGroup(ctx context.Context, sgId string, ingress, egress []VpcSecurityGroupLiteRule) error { + logId := tccommon.GetLogId(ctx) + + if err := me.modifyLiteRulesInSecurityGroup(ctx, sgId, ingress, egress); err != nil { + log.Printf("[CRITAL]%s attach lite rules to security group failed, reason: %v", logId, err) + + return err + } + + return nil +} + +func (me *VpcService) DescribeSecurityGroupPolices(ctx context.Context, sgId string) (ingress, egress []VpcSecurityGroupLiteRule, exist bool, err error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeSecurityGroupPoliciesRequest() + request.SecurityGroupId = &sgId + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeSecurityGroupPolicies(request) + if err != nil { + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if sdkError.Code == "ResourceNotFound" { + return nil + } + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + policySet := response.Response.SecurityGroupPolicySet + + for _, in := range policySet.Ingress { + if nilFields := tccommon.CheckNil(in, map[string]string{ + "Action": "action", + "SecurityGroupId": "nested security group id", + }); len(nilFields) > 0 { + err := fmt.Errorf("api[%s] security group ingress %v are nil", request.GetAction(), nilFields) + log.Printf("[CRITAL]%s %v", logId, err) + } + + liteRule := VpcSecurityGroupLiteRule{ + //protocol: strings.ToUpper(*in.Protocol), + //port: *in.Port, + cidrIp: *in.CidrBlock, + action: *in.Action, + securityGroupId: *in.SecurityGroupId, + } + + if in.Protocol != nil { + liteRule.protocol = strings.ToUpper(*in.Protocol) + } + + if in.Port != nil { + liteRule.port = *in.Port + } + + if in.AddressTemplate != nil { + liteRule.addressId = *in.AddressTemplate.AddressId + liteRule.addressGroupId = *in.AddressTemplate.AddressGroupId + } + + if in.ServiceTemplate != nil { + liteRule.protocolTemplateId = *in.ServiceTemplate.ServiceId + liteRule.protocolTemplateGroupId = *in.ServiceTemplate.ServiceGroupId + } + + ingress = append(ingress, liteRule) + } + + for _, eg := range policySet.Egress { + if nilFields := tccommon.CheckNil(eg, map[string]string{ + "Action": "action", + "SecurityGroupId": "nested security group id", + }); len(nilFields) > 0 { + err := fmt.Errorf("api[%s] security group egress %v are nil", request.GetAction(), nilFields) + log.Printf("[CRITAL]%s %v", logId, err) + } + + liteRule := VpcSecurityGroupLiteRule{ + action: *eg.Action, + cidrIp: *eg.CidrBlock, + securityGroupId: *eg.SecurityGroupId, + } + + if eg.Port != nil { + liteRule.port = *eg.Port + } + + if eg.Protocol != nil { + liteRule.protocol = strings.ToUpper(*eg.Protocol) + } + + if eg.AddressTemplate != nil { + liteRule.addressId = *eg.AddressTemplate.AddressId + liteRule.addressGroupId = *eg.AddressTemplate.AddressGroupId + } + + if eg.ServiceTemplate != nil { + liteRule.protocolTemplateId = *eg.ServiceTemplate.ServiceId + liteRule.protocolTemplateGroupId = *eg.ServiceTemplate.ServiceGroupId + } + + egress = append(egress, liteRule) + } + + exist = true + + return nil + }); err != nil { + log.Printf("[CRITAL]%s describe security group policies failed, rason: %v", logId, err) + return nil, nil, false, err + } + + return +} + +func (me *VpcService) DetachAllLiteRulesFromSecurityGroup(ctx context.Context, sgId string) error { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewModifySecurityGroupPoliciesRequest() + request.SecurityGroupId = &sgId + request.SecurityGroupPolicySet = &vpc.SecurityGroupPolicySet{ + Version: helper.String("0"), + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseVpcClient().ModifySecurityGroupPolicies(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }) +} + +type securityGroupRuleBasicInfo struct { + SgId string `json:"sg_id"` + PolicyType string `json:"policy_type"` + CidrIp *string `json:"cidr_ip,omitempty"` + Protocol *string `json:"protocol"` + PortRange *string `json:"port_range"` + Action string `json:"action"` + SourceSgId *string `json:"source_sg_id"` + Description *string `json:"description,omitempty"` + AddressTemplateId *string `json:"address_template_id,omitempty"` + AddressTemplateGroupId *string `json:"address_template_group_id,omitempty"` + ProtocolTemplateId *string `json:"protocol_template_id,omitempty"` + ProtocolTemplateGroupId *string `json:"protocol_template_group_id,omitempty"` +} + +type securityGroupRuleBasicInfoWithPolicyIndex struct { + securityGroupRuleBasicInfo + PolicyIndex int64 `json:"policy_index"` +} + +// Build an ID for a Security Group Rule (new version) +func buildSecurityGroupRuleId(info securityGroupRuleBasicInfo) (ruleId string, err error) { + b, err := json.Marshal(info) + if err != nil { + return "", err + } + + log.Printf("[DEBUG] build rule is %s", string(b)) + + return base64.StdEncoding.EncodeToString(b), nil +} + +// Parse Security Group Rule ID +func parseSecurityGroupRuleId(ruleId string) (info securityGroupRuleBasicInfo, errRet error) { + log.Printf("[DEBUG] parseSecurityGroupRuleId before: %v", ruleId) + + // new version ID + if b, err := base64.StdEncoding.DecodeString(ruleId); err == nil { + errRet = json.Unmarshal(b, &info) + return + } + + // old version ID + m := make(map[string]string) + ruleQueryStrings := strings.Split(ruleId, "&") + if len(ruleQueryStrings) == 0 { + errRet = errors.New("ruleId is invalid") + return + } + for _, str := range ruleQueryStrings { + arr := strings.Split(str, "=") + if len(arr) != 2 { + errRet = errors.New("ruleId is invalid") + return + } + m[arr[0]] = arr[1] + } + + info.SgId = m["sgId"] + info.PolicyType = m["direction"] + info.Action = m["action"] + + // the newest version include template + addressTemplateId, addressTemplateOk := m["address_template_id"] + addressGroupTemplateId, addressTemplateGroupOk := m["address_template_group_id"] + if addressTemplateOk || addressTemplateGroupOk { + if addressTemplateGroupOk { + info.AddressTemplateGroupId = common.StringPtr(addressGroupTemplateId) + } else { + info.AddressTemplateId = common.StringPtr(addressTemplateId) + } + info.CidrIp = common.StringPtr("") + info.SourceSgId = common.StringPtr("") + } else { + if m["sourceSgid"] == "" { + info.CidrIp = common.StringPtr(m["cidrIp"]) + } else { + info.CidrIp = common.StringPtr("") + } + info.SourceSgId = common.StringPtr(m["sourceSgid"]) + } + + protocolTemplateId, protocolTemplateOk := m["protocol_template_id"] + protocolGroupTemplateId, protocolTemplateGroupOk := m["protocol_template_group_id"] + if protocolTemplateOk || protocolTemplateGroupOk { + if protocolTemplateGroupOk { + info.ProtocolTemplateGroupId = common.StringPtr(protocolGroupTemplateId) + } else { + info.ProtocolTemplateId = common.StringPtr(protocolTemplateId) + } + info.Protocol = common.StringPtr("") + info.PortRange = common.StringPtr("") + } else { + info.Protocol = common.StringPtr(m["ipProtocol"]) + info.PortRange = common.StringPtr(m["portRange"]) + } + + info.Description = common.StringPtr(m["description"]) + + log.Printf("[DEBUG] parseSecurityGroupRuleId after: %v", info) + return +} + +func comparePolicyAndSecurityGroupInfo(policy *vpc.SecurityGroupPolicy, info securityGroupRuleBasicInfo) bool { + if policy.PolicyDescription != nil && *policy.PolicyDescription != "" { + if info.Description == nil || *policy.PolicyDescription != *info.Description { + return false + } + } else { + if info.Description != nil && *info.Description != "" { + return false + } + } + // policy.CidrBlock will be nil if address template is set + if policy.CidrBlock != nil && *policy.CidrBlock != "" { + if info.CidrIp == nil || *policy.CidrBlock != *info.CidrIp { + return false + } + } else { + if info.CidrIp != nil && *info.CidrIp != "" { + return false + } + } + + // policy.Port will be nil if protocol template is set + if policy.Port != nil && *policy.Port != "" { + if info.PortRange == nil || *policy.Port != *info.PortRange { + return false + } + } else { + if info.PortRange != nil && *info.PortRange != "" && *info.PortRange != "ALL" { + return false + } + } + + // policy.Protocol will be nil if protocol template is set + if policy.Protocol != nil && *policy.Protocol != "" { + if info.Protocol == nil || !strings.EqualFold(*policy.Protocol, *info.Protocol) { + return false + } + } else { + if info.Protocol != nil && *info.Protocol != "" && *info.Protocol != "ALL" { + return false + } + } + + // policy.SecurityGroupId always not nil + if *policy.SecurityGroupId != *info.SourceSgId { + return false + } + + if !strings.EqualFold(*policy.Action, info.Action) { + return false + } + + // if template is not null it must be compared + if info.ProtocolTemplateId != nil && *info.ProtocolTemplateId != "" { + if policy.ServiceTemplate == nil || policy.ServiceTemplate.ServiceId == nil || *info.ProtocolTemplateId != *policy.ServiceTemplate.ServiceId { + log.Printf("%s %v test", *info.ProtocolTemplateId, policy.ServiceTemplate) + return false + } + } else { + if policy.ServiceTemplate != nil && policy.ServiceTemplate.ServiceId != nil && *policy.ServiceTemplate.ServiceId != "" { + return false + } + } + + if info.ProtocolTemplateGroupId != nil && *info.ProtocolTemplateGroupId != "" { + if policy.ServiceTemplate == nil || policy.ServiceTemplate.ServiceGroupId == nil || *info.ProtocolTemplateGroupId != *policy.ServiceTemplate.ServiceGroupId { + log.Printf("%s %v test", *info.ProtocolTemplateGroupId, policy.ServiceTemplate) + return false + } + } else { + if policy.ServiceTemplate != nil && policy.ServiceTemplate.ServiceGroupId != nil && *policy.ServiceTemplate.ServiceGroupId != "" { + return false + } + } + + if info.AddressTemplateGroupId != nil && *info.AddressTemplateGroupId != "" { + if policy.AddressTemplate == nil || policy.AddressTemplate.AddressGroupId == nil || *info.AddressTemplateGroupId != *policy.AddressTemplate.AddressGroupId { + return false + } + } else { + if policy.AddressTemplate != nil && policy.AddressTemplate.AddressGroupId != nil && *policy.AddressTemplate.AddressGroupId != "" { + return false + } + } + if info.AddressTemplateId != nil && *info.AddressTemplateId != "" { + if policy.AddressTemplate == nil || policy.AddressTemplate.AddressId == nil || *info.AddressTemplateId != *policy.AddressTemplate.AddressId { + return false + } + } else { + if policy.AddressTemplate != nil && policy.AddressTemplate.AddressId != nil && *policy.AddressTemplate.AddressId != "" { + return false + } + } + + return true +} + +func parseRule(str string) (liteRule VpcSecurityGroupLiteRule, err error) { + split := strings.Split(str, "#") + if len(split) != 4 { + err = fmt.Errorf("invalid security group rule %s", str) + return + } + + var ( + source string + port string + protocol string + // source is "sg-xxxxxx" / "ipm-xxxxxx" / "ipmg-xxxxxx" formatted + isInstanceIdSource = true + ) + + liteRule.action, source, port, protocol = split[0], split[1], split[2], split[3] + + if securityGroupIdRE.MatchString(source) { + liteRule.securityGroupId = source + } else if ipAddressIdRE.MatchString(source) { + liteRule.addressId = source + } else if ipAddressGroupIdRE.MatchString(source) { + liteRule.addressGroupId = source + } else { + isInstanceIdSource = false + liteRule.cidrIp = source + } + + if v := liteRule.action; v != "ACCEPT" && v != "DROP" { + err = fmt.Errorf("invalid action `%s`, available actions: `ACCEPT`, `DROP`", v) + return + } + + if net.ParseIP(liteRule.cidrIp) == nil && !isInstanceIdSource { + if _, _, err = net.ParseCIDR(liteRule.cidrIp); err != nil { + err = fmt.Errorf("invalid cidr_ip %s, allow cidr_ip format is `8.8.8.8` or `10.0.1.0/24`", liteRule.cidrIp) + return + } + } + + liteRule.port = port + if port != "ALL" && !portRE.MatchString(port) && !protocolTemplateRE.MatchString(protocol) { + err = fmt.Errorf("invalid port %s, allow port format is `ALL`, `53`, `80,443` or `80-90`", liteRule.port) + return + } + + liteRule.protocol = protocol + if protocolTemplateRE.MatchString(protocol) { + liteRule.port = "" + liteRule.protocol = "" + if protocolTemplateIdRE.MatchString(protocol) { + liteRule.protocolTemplateId = protocol + } else if protocolTemplateGroupIdRE.MatchString(protocol) { + liteRule.protocolTemplateGroupId = protocol + } + } else if protocol != "TCP" && protocol != "UDP" && protocol != "ALL" && protocol != "ICMP" { + err = fmt.Errorf("invalid protocol %s, allow protocol is `ALL`, `TCP`, `UDP`, `ICMP` or `ppm(g?)-xxxxxxxx`", liteRule.protocol) + } else if protocol == "ALL" || protocol == "ICMP" { + if liteRule.port != "ALL" { + err = fmt.Errorf("when protocol is %s, port must be ALL", protocol) + } else { + liteRule.port = "" + } + } + + if err != nil { + return + } + + return +} + +/* +EIP +*/ +func (me *VpcService) DescribeEipById(ctx context.Context, eipId string) (eip *vpc.Address, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeAddressesRequest() + request.AddressIds = []*string{&eipId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeAddresses(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.AddressSet) < 1 { + return + } + eip = response.Response.AddressSet[0] + return +} + +func (me *VpcService) DescribeEipByFilter(ctx context.Context, filters map[string][]string) (eips []*vpc.Address, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeAddressesRequest() + request.Filters = make([]*vpc.Filter, 0, len(filters)) + for k, v := range filters { + filter := &vpc.Filter{ + Name: helper.String(k), + Values: []*string{}, + } + for _, vv := range v { + filter.Values = append(filter.Values, helper.String(vv)) + } + request.Filters = append(request.Filters, filter) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeAddresses(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + eips = response.Response.AddressSet + return +} + +func (me *VpcService) ModifyEipName(ctx context.Context, eipId, eipName string) error { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyAddressAttributeRequest() + request.AddressId = &eipId + request.AddressName = &eipName + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().ModifyAddressAttribute(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *VpcService) ModifyEipBandwidthOut(ctx context.Context, eipId string, bandwidthOut int) error { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyAddressesBandwidthRequest() + request.AddressIds = []*string{&eipId} + request.InternetMaxBandwidthOut = helper.IntInt64(bandwidthOut) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().ModifyAddressesBandwidth(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *VpcService) ModifyEipInternetChargeType(ctx context.Context, eipId string, internetChargeType string, bandwidthOut, period, renewFlag int) error { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyAddressInternetChargeTypeRequest() + request.AddressId = &eipId + request.InternetChargeType = &internetChargeType + request.InternetMaxBandwidthOut = helper.IntUint64(bandwidthOut) + + if internetChargeType == "BANDWIDTH_PREPAID_BY_MONTH" { + addressChargePrepaid := vpc.AddressChargePrepaid{} + addressChargePrepaid.AutoRenewFlag = helper.IntInt64(renewFlag) + addressChargePrepaid.Period = helper.IntInt64(period) + request.AddressChargePrepaid = &addressChargePrepaid + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().ModifyAddressInternetChargeType(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *VpcService) RenewAddress(ctx context.Context, eipId string, period int, renewFlag int) error { + logId := tccommon.GetLogId(ctx) + request := vpc.NewRenewAddressesRequest() + request.AddressIds = []*string{&eipId} + addressChargePrepaid := vpc.AddressChargePrepaid{} + addressChargePrepaid.AutoRenewFlag = helper.IntInt64(renewFlag) + addressChargePrepaid.Period = helper.IntInt64(period) + request.AddressChargePrepaid = &addressChargePrepaid + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().RenewAddresses(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *VpcService) DeleteEip(ctx context.Context, eipId string) error { + logId := tccommon.GetLogId(ctx) + request := vpc.NewReleaseAddressesRequest() + request.AddressIds = []*string{&eipId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().ReleaseAddresses(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *VpcService) AttachEip(ctx context.Context, eipId, instanceId string) error { + logId := tccommon.GetLogId(ctx) + request := vpc.NewAssociateAddressRequest() + request.AddressId = &eipId + request.InstanceId = &instanceId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().AssociateAddress(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return nil +} + +func (me *VpcService) DescribeNatGatewayById(ctx context.Context, natGateWayId string) (natGateWay *vpc.NatGateway, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeNatGatewaysRequest() + request.NatGatewayIds = []*string{&natGateWayId} + 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.UseVpcClient().DescribeNatGateways(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()) + + if len(response.Response.NatGatewaySet) > 0 { + natGateWay = response.Response.NatGatewaySet[0] + } + + return +} + +func (me *VpcService) DescribeNatGatewayByFilter(ctx context.Context, filters map[string]string) (instances []*vpc.NatGateway, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeNatGatewaysRequest() + ) + request.Filters = make([]*vpc.Filter, 0, len(filters)) + for k, v := range filters { + filter := vpc.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset uint64 = 0 + var pageSize uint64 = 100 + instances = make([]*vpc.NatGateway, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeNatGateways(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.NatGatewaySet) < 1 { + break + } + instances = append(instances, response.Response.NatGatewaySet...) + if len(response.Response.NatGatewaySet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *VpcService) DeleteNatGateway(ctx context.Context, natGatewayId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteNatGatewayRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.NatGatewayId = &natGatewayId + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, errRet = me.client.UseVpcClient().DeleteNatGateway(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + return +} + +func (me *VpcService) DisassociateNatGatewayAddress(ctx context.Context, request *vpc.DisassociateNatGatewayAddressRequest) (result *vpc.DisassociateNatGatewayAddressResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + 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()) + } + }() + + // Check if Nat Gateway Ip still associate + gateway, err := me.DescribeNatGatewayById(ctx, *request.NatGatewayId) + + if err != nil { + errRet = err + return + } + + if gateway == nil || len(gateway.PublicIpAddressSet) == 0 { + return + } + + var gatewayAddresses []string + var candidates []*string + + for i := range gateway.PublicIpAddressSet { + addr := gateway.PublicIpAddressSet[i].PublicIpAddress + gatewayAddresses = append(gatewayAddresses, *addr) + } + + for i := range request.PublicIpAddresses { + addr := request.PublicIpAddresses[i] + if helper.StringsContain(gatewayAddresses, *addr) { + candidates = append(candidates, addr) + } + } + + if len(candidates) == 0 { + return nil, nil + } + + request.PublicIpAddresses = candidates + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DisassociateNatGatewayAddress(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()) + + result = response + return +} + +func (me *VpcService) UnattachEip(ctx context.Context, eipId string) error { + eipUnattachLocker.Lock() + defer eipUnattachLocker.Unlock() + + logId := tccommon.GetLogId(ctx) + eip, err := me.DescribeEipById(ctx, eipId) + if err != nil { + return err + } + if eip == nil || *eip.AddressStatus == EIP_STATUS_UNBIND { + return nil + } + + // DisassociateAddress Doesn't support Disassociate NAT Address + if eip.InstanceId != nil && strings.HasPrefix(*eip.InstanceId, "nat-") { + request := vpc.NewDisassociateNatGatewayAddressRequest() + request.NatGatewayId = eip.InstanceId + request.PublicIpAddresses = []*string{eip.AddressIp} + _, err := me.DisassociateNatGatewayAddress(ctx, request) + if err != nil { + return err + } + + outErr := resource.Retry(tccommon.ReadRetryTimeout*3, func() *resource.RetryError { + eip, err := me.DescribeEipById(ctx, eipId) + if err != nil { + return tccommon.RetryError(err) + } + if eip != nil && *eip.AddressStatus != EIP_STATUS_UNBIND { + return resource.RetryableError(fmt.Errorf("eip is still %s", EIP_STATUS_UNBIND)) + } + return nil + }) + + if outErr != nil { + return outErr + } + } + + request := vpc.NewDisassociateAddressRequest() + request.AddressId = &eipId + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DisassociateAddress(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + if response.Response.TaskId == nil { + return nil + } + taskId, err := strconv.ParseUint(*response.Response.TaskId, 10, 64) + if err != nil { + return nil + } + + taskRequest := vpc.NewDescribeTaskResultRequest() + taskRequest.TaskId = &taskId + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(taskRequest.GetAction()) + taskResponse, err := me.client.UseVpcClient().DescribeTaskResult(taskRequest) + if err != nil { + return tccommon.RetryError(err) + } + if taskResponse.Response.Result != nil && *taskResponse.Response.Result == EIP_TASK_STATUS_RUNNING { + return resource.RetryableError(errors.New("eip task is running")) + } + return nil + }) + if err != nil { + return err + } + + return nil +} + +func (me *VpcService) CreateEni( + ctx context.Context, + name, vpcId, subnetId, desc string, + securityGroups []string, + ipv4Count *int, + ipv4s []VpcEniIP, + tags map[string]string, +) (id string, err error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + createRequest := vpc.NewCreateNetworkInterfaceRequest() + createRequest.NetworkInterfaceName = &name + createRequest.VpcId = &vpcId + createRequest.SubnetId = &subnetId + createRequest.NetworkInterfaceDescription = &desc + + if len(securityGroups) > 0 { + createRequest.SecurityGroupIds = common.StringPtrs(securityGroups) + } + + if len(tags) > 0 { + for tagKey, tagValue := range tags { + tag := vpc.Tag{ + Key: helper.String(tagKey), + Value: helper.String(tagValue), + } + createRequest.Tags = append(createRequest.Tags, &tag) + } + } + + if ipv4Count != nil { + // create will assign a primary ip, secondary ip count is *ipv4Count-1 + createRequest.SecondaryPrivateIpAddressCount = helper.IntUint64(*ipv4Count - 1) + } + + var wantIpv4 []string + + for _, ipv4 := range ipv4s { + wantIpv4 = append(wantIpv4, ipv4.ip.String()) + createRequest.PrivateIpAddresses = append(createRequest.PrivateIpAddresses, &vpc.PrivateIpAddressSpecification{ + PrivateIpAddress: helper.String(ipv4.ip.String()), + Primary: helper.Bool(ipv4.primary), + Description: ipv4.desc, + }) + } + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(createRequest.GetAction()) + + response, err := client.CreateNetworkInterface(createRequest) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, createRequest.GetAction(), createRequest.ToJsonString(), err) + return tccommon.RetryError(err) + } + + eni := response.Response.NetworkInterface + + if eni == nil { + err := fmt.Errorf("api[%s] eni is nil", createRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if eni.NetworkInterfaceId == nil { + err := fmt.Errorf("api[%s] eni id is nil", createRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + ipv4Set := eni.PrivateIpAddressSet + + if len(wantIpv4) > 0 { + checkMap := make(map[string]bool, len(wantIpv4)) + for _, ipv4 := range wantIpv4 { + checkMap[ipv4] = false + } + + for _, ipv4 := range ipv4Set { + if ipv4.PrivateIpAddress == nil { + err := fmt.Errorf("api[%s] eni ipv4 ip is nil", createRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + checkMap[*ipv4.PrivateIpAddress] = true + } + + for ipv4, checked := range checkMap { + if !checked { + err := fmt.Errorf("api[%s] doesn't assign %s ip", createRequest.GetAction(), ipv4) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + } + } else { + if len(ipv4Set) != *ipv4Count { + err := fmt.Errorf("api[%s] doesn't assign enough ip", createRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + wantIpv4 = make([]string, 0, *ipv4Count) + for _, ipv4 := range ipv4Set { + if ipv4.PrivateIpAddress == nil { + err := fmt.Errorf("api[%s] eni ipv4 ip is nil", createRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + wantIpv4 = append(wantIpv4, *ipv4.PrivateIpAddress) + } + } + + id = *eni.NetworkInterfaceId + + return nil + }); err != nil { + log.Printf("[CRITAL]%s create eni failed, reason: %v", logId, err) + return "", err + } + + if err := waitEniReady(ctx, id, client, wantIpv4, nil); err != nil { + log.Printf("[CRITAL]%s create eni failed, reason: %v", logId, err) + return "", err + } + + return +} + +func (me *VpcService) describeEnis( + ctx context.Context, + ids []string, + vpcId, subnetId, id, cvmId, sgId, name, desc, ipv4 *string, + tags map[string]string, +) (enis []*vpc.NetworkInterface, err error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeNetworkInterfacesRequest() + + if len(ids) > 0 { + request.NetworkInterfaceIds = common.StringPtrs(ids) + } + + if vpcId != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("vpc-id"), + Values: []*string{vpcId}, + }) + } + + if subnetId != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("subnet-id"), + Values: []*string{subnetId}, + }) + } + + if id != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("network-interface-id"), + Values: []*string{id}, + }) + } + + if cvmId != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("attachment.instance-id"), + Values: []*string{cvmId}, + }) + } + + if sgId != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("groups.security-group-id"), + Values: []*string{sgId}, + }) + } + + if name != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("network-interface-name"), + Values: []*string{name}, + }) + } + + if desc != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("network-interface-description"), + Values: []*string{desc}, + }) + } + + if ipv4 != nil { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("address-ip"), + Values: []*string{ipv4}, + }) + } + + for k, v := range tags { + request.Filters = append(request.Filters, &vpc.Filter{ + Name: helper.String("tag:" + k), + Values: []*string{helper.String(v)}, + }) + } + + var offset uint64 + request.Offset = &offset + request.Limit = helper.IntUint64(ENI_DESCRIBE_LIMIT) + + count := ENI_DESCRIBE_LIMIT + for count == ENI_DESCRIBE_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeNetworkInterfaces(request) + if err != nil { + count = 0 + + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if sdkError.Code == "ResourceNotFound" { + return nil + } + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + eniSet := response.Response.NetworkInterfaceSet + count = len(eniSet) + enis = append(enis, eniSet...) + + return nil + }); err != nil { + log.Printf("[CRITAL]%s read eni list failed, reason: %v", logId, err) + return nil, err + } + + offset += uint64(count) + } + + return +} + +func (me *VpcService) DescribeEniById(ctx context.Context, ids []string) (enis []*vpc.NetworkInterface, err error) { + return me.describeEnis(ctx, ids, nil, nil, nil, nil, nil, nil, nil, nil, nil) +} + +func (me *VpcService) ModifyEniAttribute(ctx context.Context, id string, name, desc *string, sgs []string) error { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + request := vpc.NewModifyNetworkInterfaceAttributeRequest() + request.NetworkInterfaceId = &id + request.NetworkInterfaceName = name + request.NetworkInterfaceDescription = desc + request.SecurityGroupIds = common.StringPtrs(sgs) + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := client.ModifyNetworkInterfaceAttribute(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s modify eni attribute failed, reason: %v", logId, err) + return err + } + + if err := waitEniReady(ctx, id, client, nil, nil); err != nil { + log.Printf("[CRITAL]%s modify eni attribute failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) UnAssignIpv4FromEni(ctx context.Context, id string, ipv4s []string) error { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + request := vpc.NewUnassignPrivateIpAddressesRequest() + request.NetworkInterfaceId = &id + request.PrivateIpAddresses = make([]*vpc.PrivateIpAddressSpecification, 0, len(ipv4s)) + for _, ipv4 := range ipv4s { + request.PrivateIpAddresses = append(request.PrivateIpAddresses, &vpc.PrivateIpAddressSpecification{ + PrivateIpAddress: helper.String(ipv4), + }) + } + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := client.UnassignPrivateIpAddresses(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s unassign ipv4 from eni failed, reason: %v", logId, err) + return err + } + + if err := waitEniReady(ctx, id, client, nil, ipv4s); err != nil { + log.Printf("[CRITAL]%s unassign ipv4 from eni failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) AssignIpv4ToEni(ctx context.Context, id string, ipv4s []VpcEniIP, ipv4Count *int) error { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + request := vpc.NewAssignPrivateIpAddressesRequest() + request.NetworkInterfaceId = &id + + if ipv4Count != nil { + request.SecondaryPrivateIpAddressCount = helper.IntUint64(*ipv4Count) + } + + var wantIpv4 []string + + if len(ipv4s) > 0 { + request.PrivateIpAddresses = make([]*vpc.PrivateIpAddressSpecification, 0, len(ipv4s)) + wantIpv4 = make([]string, 0, len(ipv4s)) + + for _, ipv4 := range ipv4s { + wantIpv4 = append(wantIpv4, ipv4.ip.String()) + request.PrivateIpAddresses = append(request.PrivateIpAddresses, &vpc.PrivateIpAddressSpecification{ + PrivateIpAddress: helper.String(ipv4.ip.String()), + Primary: helper.Bool(ipv4.primary), + Description: ipv4.desc, + }) + } + } + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := client.AssignPrivateIpAddresses(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + ipv4Set := response.Response.PrivateIpAddressSet + + if len(wantIpv4) > 0 { + checkMap := make(map[string]bool, len(wantIpv4)) + for _, ipv4 := range wantIpv4 { + checkMap[ipv4] = false + } + + for _, ipv4 := range ipv4Set { + if ipv4.PrivateIpAddress == nil { + err := fmt.Errorf("api[%s] eni ipv4 ip is nil", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + checkMap[*ipv4.PrivateIpAddress] = true + } + + for ipv4, checked := range checkMap { + if !checked { + err := fmt.Errorf("api[%s] doesn't assign %s ip", request.GetAction(), ipv4) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + } + } else { + if len(ipv4Set) != *ipv4Count { + err := fmt.Errorf("api[%s] doesn't assign enough ip", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + wantIpv4 = make([]string, 0, *ipv4Count) + for _, ipv4 := range ipv4Set { + if ipv4.PrivateIpAddress == nil { + err := fmt.Errorf("api[%s] eni ipv4 ip is nil", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + wantIpv4 = append(wantIpv4, *ipv4.PrivateIpAddress) + } + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s assign ipv4 to eni failed, reason: %v", logId, err) + return err + } + + if err := waitEniReady(ctx, id, client, wantIpv4, nil); err != nil { + log.Printf("[CRITAL]%s assign ipv4 to eni failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) DeleteEni(ctx context.Context, id string) error { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + deleteRequest := vpc.NewDeleteNetworkInterfaceRequest() + deleteRequest.NetworkInterfaceId = &id + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(deleteRequest.GetAction()) + + if _, err := client.DeleteNetworkInterface(deleteRequest); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, deleteRequest.GetAction(), deleteRequest.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete eni failed, reason: %v", logId, err) + return err + } + + describeRequest := vpc.NewDescribeNetworkInterfacesRequest() + describeRequest.NetworkInterfaceIds = []*string{&id} + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(describeRequest.GetAction()) + + response, err := client.DescribeNetworkInterfaces(describeRequest) + if err != nil { + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if sdkError.Code == "ResourceNotFound" { + return nil + } + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, describeRequest.GetAction(), describeRequest.ToJsonString(), err) + return tccommon.RetryError(err) + } + + for _, eni := range response.Response.NetworkInterfaceSet { + if eni.NetworkInterfaceId == nil { + err := fmt.Errorf("api[%s] eni id is nil", describeRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *eni.NetworkInterfaceId == id { + err := errors.New("eni still exists") + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s delete eni failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) AttachEniToCvm(ctx context.Context, eniId, cvmId string) error { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + attachRequest := vpc.NewAttachNetworkInterfaceRequest() + attachRequest.NetworkInterfaceId = &eniId + attachRequest.InstanceId = &cvmId + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(attachRequest.GetAction()) + + if _, err := client.AttachNetworkInterface(attachRequest); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, attachRequest.GetAction(), attachRequest.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s attach eni to instance failed, reason: %v", logId, err) + return err + } + + describeRequest := vpc.NewDescribeNetworkInterfacesRequest() + describeRequest.NetworkInterfaceIds = []*string{&eniId} + + if err := resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(describeRequest.GetAction()) + + response, err := client.DescribeNetworkInterfaces(describeRequest) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, describeRequest.GetAction(), describeRequest.ToJsonString(), err) + return tccommon.RetryError(err) + } + + var eni *vpc.NetworkInterface + for _, e := range response.Response.NetworkInterfaceSet { + if e.NetworkInterfaceId == nil { + err := fmt.Errorf("api[%s] eni id is nil", describeRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *e.NetworkInterfaceId == eniId { + eni = e + break + } + } + + if eni == nil { + err := fmt.Errorf("api[%s] eni not found", describeRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if eni.Attachment == nil { + err := fmt.Errorf("api[%s] eni attachment is not ready", describeRequest.GetAction()) + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + + if eni.Attachment.InstanceId == nil { + err := fmt.Errorf("api[%s] eni attach instance id is nil", describeRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *eni.Attachment.InstanceId != cvmId { + err := fmt.Errorf("api[%s] eni attach instance id is not right", describeRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if eni.State == nil { + err := fmt.Errorf("api[%s] eni state is nil", describeRequest.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *eni.State != ENI_STATE_AVAILABLE { + err := errors.New("eni is not ready") + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s attach eni to instance failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) DetachEniFromCvm(ctx context.Context, eniId, cvmId string) error { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + request := vpc.NewDetachNetworkInterfaceRequest() + request.NetworkInterfaceId = &eniId + request.InstanceId = &cvmId + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := client.DetachNetworkInterface(request); err != nil { + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + switch sdkError.Code { + case "UnsupportedOperation.InvalidState": + return resource.RetryableError(errors.New("cvm may still bind eni")) + + case "ResourceNotFound": + // eni or cvm doesn't exist + return nil + } + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s detach eni from instance failed, reason: %v", logId, err) + return err + } + + if err := waitEniDetach(ctx, eniId, client); err != nil { + log.Printf("[CRITAL]%s detach eni from instance failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) ModifyEniPrimaryIpv4Desc(ctx context.Context, id, ip string, desc *string) error { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + request := vpc.NewModifyPrivateIpAddressesAttributeRequest() + request.NetworkInterfaceId = &id + request.PrivateIpAddresses = []*vpc.PrivateIpAddressSpecification{ + { + PrivateIpAddress: &ip, + Description: desc, + }, + } + + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := client.ModifyPrivateIpAddressesAttribute(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s modify eni primary ipv4 description failed, reason: %v", logId, err) + return err + } + + if err := waitEniReady(ctx, id, client, []string{ip}, nil); err != nil { + log.Printf("[CRITAL]%s modify eni primary ipv4 description failed, reason: %v", logId, err) + return err + } + + return nil +} + +func (me *VpcService) DescribeEniByFilters( + ctx context.Context, + vpcId, subnetId, cvmId, sgId, name, desc, ipv4 *string, + tags map[string]string, +) (enis []*vpc.NetworkInterface, err error) { + return me.describeEnis(ctx, nil, vpcId, subnetId, nil, cvmId, sgId, name, desc, ipv4, tags) +} + +func (me *VpcService) DescribeHaVipByFilter(ctx context.Context, filters map[string]string) (instances []*vpc.HaVip, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeHaVipsRequest() + ) + request.Filters = make([]*vpc.Filter, 0, len(filters)) + for k, v := range filters { + filter := vpc.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset uint64 = 0 + var pageSize uint64 = 100 + instances = make([]*vpc.HaVip, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeHaVips(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.HaVipSet) < 1 { + break + } + instances = append(instances, response.Response.HaVipSet...) + if len(response.Response.HaVipSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *VpcService) DescribeHaVipEipById(ctx context.Context, haVipEipAttachmentId string) (eip string, haVip string, has bool, errRet error) { + logId := tccommon.GetLogId(ctx) + client := me.client.UseVpcClient() + + items := strings.Split(haVipEipAttachmentId, "#") + if len(items) != 2 { + errRet = fmt.Errorf("decode HA VIP EIP attachment ID error %s", haVipEipAttachmentId) + return + } + haVipId := items[0] + addressIp := items[1] + + request := vpc.NewDescribeHaVipsRequest() + request.HaVipIds = []*string{&haVipId} + eip = "" + haVip = "" + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if result, err := client.DescribeHaVips(request); err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } else { + length := len(result.Response.HaVipSet) + if length != 1 { + if length == 0 { + return nil + } else { + err = fmt.Errorf("query havip %s eip %s failed, the SDK returns %d HaVips", haVipId, addressIp, length) + return resource.NonRetryableError(err) + } + } else { + eip = *result.Response.HaVipSet[0].AddressIp + if addressIp != eip { + return nil + } + has = true + haVip = haVipId + } + } + return nil + }); err != nil { + log.Printf("[CRITAL]%s describe HA VIP attachment failed, reason: %v", logId, err) + errRet = err + } + return eip, haVip, has, errRet +} + +func (me *VpcService) DeleteHaVip(ctx context.Context, haVipId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteHaVipRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.HaVipId = &haVipId + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, errRet = me.client.UseVpcClient().DeleteHaVip(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + return +} + +func waitEniReady(ctx context.Context, id string, client *vpc.Client, wantIpv4s []string, dropIpv4s []string) error { + logId := tccommon.GetLogId(ctx) + + wantCheckMap := make(map[string]bool, len(wantIpv4s)) + for _, ipv4 := range wantIpv4s { + wantCheckMap[ipv4] = false + } + + dropCheckMap := make(map[string]struct{}, len(dropIpv4s)) + for _, ipv4 := range dropIpv4s { + dropCheckMap[ipv4] = struct{}{} + } + + request := vpc.NewDescribeNetworkInterfacesRequest() + request.NetworkInterfaceIds = []*string{helper.String(id)} + + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := client.DescribeNetworkInterfaces(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + var eni *vpc.NetworkInterface + for _, networkInterface := range response.Response.NetworkInterfaceSet { + if networkInterface.NetworkInterfaceId == nil { + err := fmt.Errorf("api[%s] eni id is nil", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *networkInterface.NetworkInterfaceId == id { + eni = networkInterface + break + } + } + + if eni == nil { + err := fmt.Errorf("api[%s] eni not exist", request.GetAction()) + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + + if eni.State == nil { + err := fmt.Errorf("api[%s] eni state is nil", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *eni.State != ENI_STATE_AVAILABLE { + err := errors.New("eni is not available") + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + + for _, ipv4 := range eni.PrivateIpAddressSet { + if ipv4.PrivateIpAddress == nil { + err := fmt.Errorf("api[%s] eni ipv4 ip is nil", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + // check drop + if _, ok := dropCheckMap[*ipv4.PrivateIpAddress]; ok { + err := fmt.Errorf("api[%s] drop ip %s still exists", request.GetAction(), *ipv4.PrivateIpAddress) + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + + // check want + if _, ok := wantCheckMap[*ipv4.PrivateIpAddress]; ok { + wantCheckMap[*ipv4.PrivateIpAddress] = true + } + + if ipv4.State == nil { + err := fmt.Errorf("api[%s] eni ipv4 state is nil", request.GetAction()) + log.Printf("[CRITAL]%s %v", logId, err) + return resource.NonRetryableError(err) + } + + if *ipv4.State != ENI_IP_AVAILABLE { + err := errors.New("eni ipv4 is not available") + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + } + + for ipv4, checked := range wantCheckMap { + if !checked { + err := fmt.Errorf("api[%s] ipv4 %s is no ready", request.GetAction(), ipv4) + log.Printf("[DEBUG]%s %v", logId, err) + return resource.RetryableError(err) + } + } + + return nil + }); err != nil { + log.Printf("[CRITAL]%s eni is not available failed, reason: %v", logId, err) + return err + } + + return nil +} + +func flattenVpnSPDList(spd []*vpc.SecurityPolicyDatabase) (mapping []*map[string]interface{}) { + mapping = make([]*map[string]interface{}, 0, len(spd)) + for _, spg := range spd { + item := make(map[string]interface{}) + item["local_cidr_block"] = spg.LocalCidrBlock + item["remote_cidr_block"] = spg.RemoteCidrBlock + mapping = append(mapping, &item) + } + return +} + +func waitEniDetach(ctx context.Context, id string, client *vpc.Client) error { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeNetworkInterfacesRequest() + request.NetworkInterfaceIds = []*string{helper.String(id)} + + return resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := client.DescribeNetworkInterfaces(request) + if err != nil { + if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok && sdkError.Code == "ResourceNotFound" { + return nil + } + + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return tccommon.RetryError(err) + } + + enis := response.Response.NetworkInterfaceSet + + if len(enis) == 0 { + return nil + } + + eni := enis[0] + + if eni.Attachment == nil { + return nil + } + + if eni.Attachment.InstanceId != nil && *eni.Attachment.InstanceId != "" { + return resource.RetryableError(fmt.Errorf("eni %s still bind in cvm %s", id, *eni.Attachment.InstanceId)) + } + + if eni.State == nil { + return resource.NonRetryableError(fmt.Errorf("eni %s state is nil", id)) + } + + if *eni.State != ENI_STATE_AVAILABLE { + return resource.RetryableError(errors.New("eni is not available")) + } + + return nil + }) +} + +// deal acl +func parseACLRule(str string) (liteRule VpcACLRule, err error) { + split := strings.Split(str, "#") + if len(split) != 4 { + err = fmt.Errorf("invalid acl rule %s", str) + return + } + + liteRule.action, liteRule.cidrIp, liteRule.port, liteRule.protocol = split[0], split[1], split[2], split[3] + + switch liteRule.action { + default: + err = fmt.Errorf("invalid action %s, allow action is `ACCEPT` or `DROP`", liteRule.action) + return + case "ACCEPT", "DROP": + } + + if net.ParseIP(liteRule.cidrIp) == nil { + if _, _, err = net.ParseCIDR(liteRule.cidrIp); err != nil { + err = fmt.Errorf("invalid cidr_ip %s, allow cidr_ip format is `8.8.8.8` or `10.0.1.0/24`", liteRule.cidrIp) + return + } + } + + if liteRule.port != "ALL" && !regexp.MustCompile(`^(\d{1,5},)*\d{1,5}$|^\d{1,5}-\d{1,5}$`).MatchString(liteRule.port) { + err = fmt.Errorf("invalid port %s, allow port format is `ALL`, `53`, `80,443` or `80-90`", liteRule.port) + return + } + + switch liteRule.protocol { + default: + err = fmt.Errorf("invalid protocol %s, allow protocol is `ALL`, `TCP`, `UDP` or `ICMP`", liteRule.protocol) + return + + case "ALL", "ICMP": + if liteRule.port != "ALL" { + err = fmt.Errorf("when protocol is %s, port must be ALL", liteRule.protocol) + return + } + + // when protocol is ALL or ICMP, port should be "" to avoid sdk error + liteRule.port = "" + + case "TCP", "UDP": + } + + return +} + +func (me *VpcService) CreateVpcNetworkAcl(ctx context.Context, vpcID string, name string, tags map[string]string) (aclID string, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewCreateNetworkAclRequest() + response *vpc.CreateNetworkAclResponse + err error + ) + + request.VpcId = &vpcID + request.NetworkAclName = &name + + if len(tags) > 0 { + for tagKey, tagValue := range tags { + tag := vpc.Tag{ + Key: helper.String(tagKey), + Value: helper.String(tagValue), + } + request.Tags = append(request.Tags, &tag) + } + } + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err = me.client.UseVpcClient().CreateNetworkAcl(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + + aclID = *response.Response.NetworkAcl.NetworkAclId + return +} + +func (me *VpcService) AttachRulesToACL(ctx context.Context, aclID string, ingressParm, egressParm []VpcACLRule) (errRet error) { + logId := tccommon.GetLogId(ctx) + + if len(ingressParm) == 0 && len(egressParm) == 0 { + return + } + if errRet = me.ModifyNetWorkAclRules(ctx, aclID, ingressParm, egressParm); errRet != nil { + log.Printf("[CRITAL]%s attach rules to acl failed, reason: %v", logId, errRet) + } + return +} + +func (me *VpcService) ModifyNetWorkAclRules(ctx context.Context, aclID string, ingressParm, egressParm []VpcACLRule) (errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewModifyNetworkAclEntriesRequest() + err error + ingress []*vpc.NetworkAclEntry + egress []*vpc.NetworkAclEntry + ) + + for i := range ingressParm { + policy := &vpc.NetworkAclEntry{ + Protocol: &ingressParm[i].protocol, + CidrBlock: &ingressParm[i].cidrIp, + Action: &ingressParm[i].action, + } + + if ingressParm[i].port != "" { + policy.Port = &ingressParm[i].port + } + + ingress = append(ingress, policy) + } + + for i := range egressParm { + policy := &vpc.NetworkAclEntry{ + Protocol: &egressParm[i].protocol, + CidrBlock: &egressParm[i].cidrIp, + Action: &egressParm[i].action, + } + + if egressParm[i].port != "" { + policy.Port = &egressParm[i].port + } + + egress = append(egress, policy) + } + + request.NetworkAclId = &aclID + request.NetworkAclEntrySet = &vpc.NetworkAclEntrySet{ + Ingress: ingress, + Egress: egress, + } + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err = me.client.UseVpcClient().ModifyNetworkAclEntries(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + + return +} + +func (me *VpcService) DescribeNetWorkByACLID(ctx context.Context, aclID string) (info *vpc.NetworkAcl, has int, errRet error) { + results, err := me.DescribeNetWorkAcls(ctx, aclID, "", "") + if err != nil { + errRet = err + return + } + + has = len(results) + if has == 0 { + return + } + + info = results[0] + return +} + +func (me *VpcService) DeleteAcl(ctx context.Context, aclID string) (errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + err error + networkAcls []*vpc.NetworkAcl + request = vpc.NewDeleteNetworkAclRequest() + ) + + // Disassociate Network Acl Subnets + networkAcls, err = me.DescribeNetWorkAcls(ctx, aclID, "", "") + if err != nil { + errRet = err + return + } + + if len(networkAcls) > 0 { + subnets := networkAcls[0].SubnetSet + if len(subnets) > 0 { + requestSubnet := vpc.NewDisassociateNetworkAclSubnetsRequest() + requestSubnet.NetworkAclId = &aclID + + for i := range subnets { + requestSubnet.SubnetIds = append(requestSubnet.SubnetIds, subnets[i].SubnetId) + } + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err = me.client.UseVpcClient().DisassociateNetworkAclSubnets(requestSubnet) + if err != nil { + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if ee.Code == VPCNotFound { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return nil + } + } + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + if err != nil { + errRet = err + return + } + } + } + + // delete acl + request.NetworkAclId = &aclID + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err = me.client.UseVpcClient().DeleteNetworkAcl(request) + + if err != nil { + ee, ok := err.(*sdkErrors.TencentCloudSDKError) + if !ok { + return tccommon.RetryError(err, tccommon.InternalError) + } + if ee.Code == VPCNotFound { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return nil + } + return tccommon.RetryError(err, tccommon.InternalError) + } + + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + + return +} + +func (me *VpcService) ModifyVpcNetworkAcl(ctx context.Context, id *string, name *string) (errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + err error + request = vpc.NewModifyNetworkAclAttributeRequest() + ) + + request.NetworkAclId = id + request.NetworkAclName = name + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err = me.client.UseVpcClient().ModifyNetworkAclAttribute(request) + if err != nil { + ee, ok := err.(*sdkErrors.TencentCloudSDKError) + if !ok { + return tccommon.RetryError(err, tccommon.InternalError) + } + if ee.Code == VPCNotFound { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + return resource.NonRetryableError(err) + } + return tccommon.RetryError(err, tccommon.InternalError) + } + + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + + return +} + +func (me *VpcService) AssociateAclSubnets(ctx context.Context, aclId string, subnetIds []string) (errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewAssociateNetworkAclSubnetsRequest() + err error + subIds []*string + ) + + for _, i := range subnetIds { + subIds = append(subIds, &i) + } + + request.NetworkAclId = &aclId + request.SubnetIds = subIds + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err = me.client.UseVpcClient().AssociateNetworkAclSubnets(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + return +} + +func (me *VpcService) DescribeNetWorkAcls(ctx context.Context, aclID, vpcID, name string) (info []*vpc.NetworkAcl, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeNetworkAclsRequest() + response *vpc.DescribeNetworkAclsResponse + err error + filters []*vpc.Filter + offset, pageSize uint64 = 0, 100 + ) + + if vpcID != "" { + filters = me.fillFilter(filters, "vpc-id", vpcID) + } + if aclID != "" { + filters = me.fillFilter(filters, "network-acl-id", aclID) + } + if name != "" { + filters = me.fillFilter(filters, "network-acl-name", name) + } + + if len(filters) > 0 { + request.Filters = filters + } + + request.Offset = &offset + request.Limit = &pageSize + for { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err = me.client.UseVpcClient().DescribeNetworkAcls(request) + if err != nil { + if ee, ok := err.(*sdkErrors.TencentCloudSDKError); ok { + if ee.Code == VPCNotFound { + return nil + } + } + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + if response.Response == nil { + return + } + + info = append(info, response.Response.NetworkAclSet...) + if len(response.Response.NetworkAclSet) < int(pageSize) { + break + } + + offset += pageSize + } + + return +} + +func (me *VpcService) DescribeByAclId(ctx context.Context, attachmentAcl string) (has bool, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDisassociateNetworkAclSubnetsRequest() + aclId string + ) + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + if attachmentAcl == "" { + errRet = fmt.Errorf("DisassociateNetworkAclSubnets can not invoke by empty routeTableId.") + return + } + + aclId = strings.Split(attachmentAcl, "#")[0] + + results, err := me.DescribeNetWorkAcls(ctx, aclId, "", "") + if err != nil { + errRet = err + return + } + if len(results) < 1 || len(results[0].SubnetSet) < 1 { + return + } + + has = true + return +} + +func (me *VpcService) DeleteAclAttachment(ctx context.Context, attachmentAcl string) (errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDisassociateNetworkAclSubnetsRequest() + err error + ) + + if attachmentAcl == "" { + errRet = fmt.Errorf("DeleteRouteTable can not invoke by empty NetworkAclId.") + return + } + + items := strings.Split(attachmentAcl, "#") + request.NetworkAclId = &items[0] + request.SubnetIds = helper.Strings(items[1:]) + + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, err = me.client.UseVpcClient().DisassociateNetworkAclSubnets(request) + if err != nil { + return tccommon.RetryError(err, tccommon.InternalError) + } + return nil + }) + + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), err) + errRet = err + return + } + return +} + +func (me *VpcService) DescribeVpngwById(ctx context.Context, vpngwId string) (has bool, gateway *vpc.VpnGateway, err error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpnGatewaysRequest() + response *vpc.DescribeVpnGatewaysResponse + ) + request.VpnGatewayIds = []*string{&vpngwId} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + response, err = me.client.UseVpcClient().DescribeVpnGateways(request) + if err != nil { + ee, ok := err.(*sdkErrors.TencentCloudSDKError) + if !ok { + return tccommon.RetryError(err) + } + if ee.Code == VPCNotFound { + return nil + } else { + return tccommon.RetryError(err) + } + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", logId, request.GetAction(), request.ToJsonString(), err) + return + } + if response == nil || response.Response == nil || len(response.Response.VpnGatewaySet) < 1 { + has = false + return + } + + gateway = response.Response.VpnGatewaySet[0] + has = true + return +} + +func (me *VpcService) DescribeVpnGwByFilter(ctx context.Context, filters map[string]string) (instances []*vpc.VpnGateway, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpnGatewaysRequest() + ) + request.Filters = make([]*vpc.FilterObject, 0, len(filters)) + for k, v := range filters { + filter := vpc.FilterObject{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset uint64 = 0 + var pageSize uint64 = 100 + instances = make([]*vpc.VpnGateway, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeVpnGateways(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.VpnGatewaySet) < 1 { + break + } + instances = append(instances, response.Response.VpnGatewaySet...) + if len(response.Response.VpnGatewaySet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *VpcService) DeleteVpnGateway(ctx context.Context, vpnGatewayId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteVpnGatewayRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.VpnGatewayId = &vpnGatewayId + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, errRet = me.client.UseVpcClient().DeleteVpnGateway(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + return +} + +func (me *VpcService) DescribeCustomerGatewayByFilter(ctx context.Context, filters map[string]string) (instances []*vpc.CustomerGateway, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeCustomerGatewaysRequest() + ) + request.Filters = make([]*vpc.Filter, 0, len(filters)) + for k, v := range filters { + filter := vpc.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset uint64 = 0 + var pageSize uint64 = 100 + instances = make([]*vpc.CustomerGateway, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeCustomerGateways(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.CustomerGatewaySet) < 1 { + break + } + instances = append(instances, response.Response.CustomerGatewaySet...) + if len(response.Response.CustomerGatewaySet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *VpcService) DeleteCustomerGateway(ctx context.Context, customerGatewayId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteCustomerGatewayRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.CustomerGatewayId = &customerGatewayId + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, errRet = me.client.UseVpcClient().DeleteCustomerGateway(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + return +} + +func (me *VpcService) CreateAddressTemplate(ctx context.Context, name string, addresses []interface{}) (templateId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateAddressTemplateRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.AddressTemplateName = &name + request.Addresses = make([]*string, len(addresses)) + for i, v := range addresses { + request.Addresses[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().CreateAddressTemplate(request) + if err != nil { + errRet = err + return + } + + if response == nil || response.Response == nil || response.Response.AddressTemplate == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + + templateId = *response.Response.AddressTemplate.AddressTemplateId + return +} + +func (me *VpcService) DescribeAddressTemplateById(ctx context.Context, templateId string) (template *vpc.AddressTemplate, has bool, errRet error) { + filter := vpc.Filter{Name: helper.String("address-template-id"), Values: []*string{&templateId}} + templates, err := me.DescribeAddressTemplates(ctx, []*vpc.Filter{&filter}) + if err != nil { + errRet = err + return + } + + if len(templates) == 0 { + return + } + if len(templates) > 1 { + errRet = fmt.Errorf("TencentCloud SDK return more than one templates, instanceId %s", templateId) + } + + has = true + template = templates[0] + return +} + +func (me *VpcService) DescribeAddressTemplates(ctx context.Context, filter []*vpc.Filter) (templateList []*vpc.AddressTemplate, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeAddressTemplatesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + var offset, limit = 0, 100 + request.Filters = filter + + for { + request.Offset = helper.String(strconv.Itoa(offset)) + request.Limit = helper.String(strconv.Itoa(limit)) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeAddressTemplates(request) + if err != nil { + errRet = err + return + } + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + templateList = append(templateList, response.Response.AddressTemplateSet...) + if len(response.Response.AddressTemplateSet) < limit { + return + } + offset += limit + } +} + +func (me *VpcService) ModifyAddressTemplate(ctx context.Context, templateId string, name string, addresses []interface{}) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyAddressTemplateAttributeRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.AddressTemplateId = &templateId + request.AddressTemplateName = &name + request.Addresses = make([]*string, len(addresses)) + for i, v := range addresses { + request.Addresses[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().ModifyAddressTemplateAttribute(request) + return err +} + +func (me *VpcService) DeleteAddressTemplate(ctx context.Context, templateId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteAddressTemplateRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.AddressTemplateId = &templateId + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().DeleteAddressTemplate(request) + return err +} + +func (me *VpcService) CreateAddressTemplateGroup(ctx context.Context, name string, addressTemplate []interface{}) (templateId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateAddressTemplateGroupRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.AddressTemplateGroupName = &name + request.AddressTemplateIds = make([]*string, len(addressTemplate)) + for i, v := range addressTemplate { + request.AddressTemplateIds[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().CreateAddressTemplateGroup(request) + if err != nil { + errRet = err + return + } + + if response == nil || response.Response == nil || response.Response.AddressTemplateGroup == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + + templateId = *response.Response.AddressTemplateGroup.AddressTemplateGroupId + return +} + +func (me *VpcService) ModifyAddressTemplateGroup(ctx context.Context, templateGroupId string, name string, templateIds []interface{}) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyAddressTemplateGroupAttributeRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.AddressTemplateGroupId = &templateGroupId + request.AddressTemplateGroupName = &name + request.AddressTemplateIds = make([]*string, len(templateIds)) + for i, v := range templateIds { + request.AddressTemplateIds[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().ModifyAddressTemplateGroupAttribute(request) + return err +} + +func (me *VpcService) DescribeAddressTemplateGroupById(ctx context.Context, templateGroupId string) (templateGroup *vpc.AddressTemplateGroup, has bool, errRet error) { + filter := vpc.Filter{Name: helper.String("address-template-group-id"), Values: []*string{&templateGroupId}} + templateGroups, err := me.DescribeAddressTemplateGroups(ctx, []*vpc.Filter{&filter}) + if err != nil { + errRet = err + return + } + + if len(templateGroups) == 0 { + return + } + if len(templateGroups) > 1 { + errRet = fmt.Errorf("TencentCloud SDK return more than one template group, instanceId %s", templateGroupId) + } + + has = true + templateGroup = templateGroups[0] + return +} + +func (me *VpcService) DescribeAddressTemplateGroups(ctx context.Context, filter []*vpc.Filter) (templateList []*vpc.AddressTemplateGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeAddressTemplateGroupsRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + var offset, limit = 0, 100 + request.Filters = filter + + for { + request.Offset = helper.String(strconv.Itoa(offset)) + request.Limit = helper.String(strconv.Itoa(limit)) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeAddressTemplateGroups(request) + if err != nil { + errRet = err + return + } + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + templateList = append(templateList, response.Response.AddressTemplateGroupSet...) + if len(response.Response.AddressTemplateGroupSet) < limit { + return + } + offset += limit + } +} + +func (me *VpcService) DeleteAddressTemplateGroup(ctx context.Context, templateGroupId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteAddressTemplateGroupRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.AddressTemplateGroupId = &templateGroupId + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().DeleteAddressTemplateGroup(request) + return err +} + +func (me *VpcService) CreateServiceTemplate(ctx context.Context, name string, services []interface{}) (templateId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateServiceTemplateRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.ServiceTemplateName = &name + request.Services = make([]*string, len(services)) + for i, v := range services { + request.Services[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().CreateServiceTemplate(request) + if err != nil { + errRet = err + return + } + + if response == nil || response.Response == nil || response.Response.ServiceTemplate == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + + templateId = *response.Response.ServiceTemplate.ServiceTemplateId + return +} + +func (me *VpcService) ModifyServiceTemplate(ctx context.Context, templateId string, name string, services []interface{}) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyServiceTemplateAttributeRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.ServiceTemplateId = &templateId + request.ServiceTemplateName = &name + request.Services = make([]*string, len(services)) + for i, v := range services { + request.Services[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().ModifyServiceTemplateAttribute(request) + return err +} + +func (me *VpcService) DescribeServiceTemplateById(ctx context.Context, templateId string) (template *vpc.ServiceTemplate, has bool, errRet error) { + filter := vpc.Filter{Name: helper.String("service-template-id"), Values: []*string{&templateId}} + templates, err := me.DescribeServiceTemplates(ctx, []*vpc.Filter{&filter}) + if err != nil { + errRet = err + return + } + + if len(templates) == 0 { + return + } + if len(templates) > 1 { + errRet = fmt.Errorf("TencentCloud SDK return more than one templates, instanceId %s", templateId) + } + + has = true + template = templates[0] + return +} + +func (me *VpcService) DescribeServiceTemplates(ctx context.Context, filter []*vpc.Filter) (templateList []*vpc.ServiceTemplate, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeServiceTemplatesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + var offset, limit = 0, 100 + request.Filters = filter + + for { + request.Offset = helper.String(strconv.Itoa(offset)) + request.Limit = helper.String(strconv.Itoa(limit)) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeServiceTemplates(request) + if err != nil { + errRet = err + return + } + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + templateList = append(templateList, response.Response.ServiceTemplateSet...) + if len(response.Response.ServiceTemplateSet) < limit { + return + } + offset += limit + } +} + +func (me *VpcService) DeleteServiceTemplate(ctx context.Context, templateId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteServiceTemplateRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.ServiceTemplateId = &templateId + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().DeleteServiceTemplate(request) + return err +} + +func (me *VpcService) CreateServiceTemplateGroup(ctx context.Context, name string, serviceTemplate []interface{}) (templateId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateServiceTemplateGroupRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.ServiceTemplateGroupName = &name + request.ServiceTemplateIds = make([]*string, len(serviceTemplate)) + for i, v := range serviceTemplate { + request.ServiceTemplateIds[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().CreateServiceTemplateGroup(request) + if err != nil { + errRet = err + return + } + + if response == nil || response.Response == nil || response.Response.ServiceTemplateGroup == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + + templateId = *response.Response.ServiceTemplateGroup.ServiceTemplateGroupId + return +} + +func (me *VpcService) DescribeServiceTemplateGroupById(ctx context.Context, templateGroupId string) (template *vpc.ServiceTemplateGroup, has bool, errRet error) { + filter := vpc.Filter{Name: helper.String("service-template-group-id"), Values: []*string{&templateGroupId}} + templates, err := me.DescribeServiceTemplateGroups(ctx, []*vpc.Filter{&filter}) + if err != nil { + errRet = err + return + } + + if len(templates) == 0 { + return + } + if len(templates) > 1 { + errRet = fmt.Errorf("TencentCloud SDK return more than one templates, instanceId %s", templateGroupId) + } + + has = true + template = templates[0] + return +} + +func (me *VpcService) DescribeServiceTemplateGroups(ctx context.Context, filter []*vpc.Filter) (templateList []*vpc.ServiceTemplateGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeServiceTemplateGroupsRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + + var offset, limit = 0, 100 + request.Filters = filter + + for { + request.Offset = helper.String(strconv.Itoa(offset)) + request.Limit = helper.String(strconv.Itoa(limit)) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeServiceTemplateGroups(request) + if err != nil { + errRet = err + return + } + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + templateList = append(templateList, response.Response.ServiceTemplateGroupSet...) + if len(response.Response.ServiceTemplateGroupSet) < limit { + return + } + offset += limit + } +} + +func (me *VpcService) ModifyServiceTemplateGroup(ctx context.Context, serviceGroupId string, name string, templateIds []interface{}) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyServiceTemplateGroupAttributeRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", + logId, request.GetAction(), request.ToJsonString(), errRet) + } + }() + + request.ServiceTemplateGroupId = &serviceGroupId + request.ServiceTemplateGroupName = &name + request.ServiceTemplateIds = make([]*string, len(templateIds)) + for i, v := range templateIds { + request.ServiceTemplateIds[i] = helper.String(v.(string)) + } + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().ModifyServiceTemplateGroupAttribute(request) + return err +} + +func (me *VpcService) DeleteServiceTemplateGroup(ctx context.Context, templateGroupId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteServiceTemplateGroupRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.ServiceTemplateGroupId = &templateGroupId + + ratelimit.Check(request.GetAction()) + _, err := me.client.UseVpcClient().DeleteServiceTemplateGroup(request) + return err +} + +func (me *VpcService) CreateVpnGatewayRoute(ctx context.Context, vpnGatewayId string, vpnGwRoutes []*vpc.VpnGatewayRoute) (errRet error, routes []*vpc.VpnGatewayRoute) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateVpnGatewayRoutesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.VpnGatewayId = &vpnGatewayId + request.Routes = vpnGwRoutes + + var response *vpc.CreateVpnGatewayRoutesResponse + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet = me.client.UseVpcClient().CreateVpnGatewayRoutes(request) + if errRet != nil { + log.Printf("[CRITAL]%s create vpn gateway route failed, reason: %v", logId, errRet) + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + if errRet != nil { + return errRet, nil + } + + if response == nil || response.Response == nil || response.Response.Routes == nil || len(response.Response.Routes) == 0 { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %+v, %s", response, request.GetAction()) + } else { + routes = response.Response.Routes + } + return +} + +func (me *VpcService) ModifyVpnGatewayRoute(ctx context.Context, vpnGatewayId, routeId, status string) (errRet error, routes *vpc.VpnGatewayRoute) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyVpnGatewayRoutesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.VpnGatewayId = &vpnGatewayId + request.Routes = []*vpc.VpnGatewayRouteModify{{ + RouteId: &routeId, + Status: &status, + }} + + var response *vpc.ModifyVpnGatewayRoutesResponse + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet = me.client.UseVpcClient().ModifyVpnGatewayRoutes(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + if errRet != nil { + return errRet, nil + } + + if response == nil || response.Response == nil || response.Response.Routes == nil || len(response.Response.Routes) == 0 { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } else { + routes = response.Response.Routes[0] + } + return +} + +func (me *VpcService) DeleteVpnGatewayRoutes(ctx context.Context, vpnGatewayId string, routeIds []*string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteVpnGatewayRoutesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.VpnGatewayId = &vpnGatewayId + request.RouteIds = routeIds + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, errRet = me.client.UseVpcClient().DeleteVpnGatewayRoutes(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + return +} + +func (me *VpcService) DescribeVpnGatewayRoutes(ctx context.Context, vpnGatewayId string, filters []*vpc.Filter) (errRet error, result []*vpc.VpnGatewayRoute) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeVpnGatewayRoutesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.VpnGatewayId = &vpnGatewayId + if len(filters) > 0 { + request.Filters = filters + } + + offset := int64(0) + limit := int64(VPN_DESCRIBE_LIMIT) + for { + request.Offset = &offset + request.Limit = &limit + var response *vpc.DescribeVpnGatewayRoutesResponse + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet = me.client.UseVpcClient().DescribeVpnGatewayRoutes(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + if errRet != nil { + return errRet, nil + } + + if response == nil || response.Response == nil { + return fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()), nil + } else if len(response.Response.Routes) > 0 { + result = append(result, response.Response.Routes...) + } else { + return + } + offset = offset + limit + } +} + +func (me *VpcService) DescribeVpcTaskResult(ctx context.Context, taskId *string) (err error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeVpcTaskResultRequest() + defer func() { + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), err.Error()) + } + }() + request.TaskId = taskId + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeVpcTaskResult(request) + if err != nil { + return tccommon.RetryError(err) + } + if response.Response.Status != nil && *response.Response.Status == VPN_TASK_STATUS_RUNNING { + return resource.RetryableError(errors.New("VPN task is running")) + } + return nil + }) + if err != nil { + return err + } + return +} + +func (me *VpcService) DescribeTaskResult(ctx context.Context, taskId *uint64) (result *vpc.DescribeTaskResultResponse, err error) { + + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeTaskResultRequest() + defer func() { + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), err.Error()) + } + }() + request.TaskId = taskId + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeTaskResult(request) + if err != nil { + return tccommon.RetryError(err) + } + result = response + return nil + }) + if err != nil { + return nil, err + } + return +} + +func (me *VpcService) DescribeVpnSslServerById(ctx context.Context, sslId string) (has bool, gateway *vpc.SslVpnSever, err error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpnGatewaySslServersRequest() + response *vpc.DescribeVpnGatewaySslServersResponse + ) + request.SslVpnServerIds = []*string{&sslId} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + response, err = me.client.UseVpcClient().DescribeVpnGatewaySslServers(request) + if err != nil { + ee, ok := err.(*sdkErrors.TencentCloudSDKError) + if !ok { + return tccommon.RetryError(err) + } + if ee.Code == VPCNotFound { + return nil + } else { + return tccommon.RetryError(err) + } + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", logId, request.GetAction(), request.ToJsonString(), err) + return + } + if response == nil || response.Response == nil || len(response.Response.SslVpnSeverSet) < 1 { + has = false + return + } + + gateway = response.Response.SslVpnSeverSet[0] + has = true + return +} + +func (me *VpcService) DescribeVpnGwSslServerByFilter(ctx context.Context, filters map[string]string) (instances []*vpc.SslVpnSever, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpnGatewaySslServersRequest() + ) + request.Filters = make([]*vpc.FilterObject, 0, len(filters)) + for k, v := range filters { + filter := vpc.FilterObject{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset uint64 = 0 + var pageSize uint64 = 100 + instances = make([]*vpc.SslVpnSever, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeVpnGatewaySslServers(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.SslVpnSeverSet) < 1 { + break + } + instances = append(instances, response.Response.SslVpnSeverSet...) + if len(response.Response.SslVpnSeverSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *VpcService) DeleteVpnGatewaySslServer(ctx context.Context, SslServerId string) (taskId uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteVpnGatewaySslServerRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.SslVpnServerId = &SslServerId + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet := me.client.UseVpcClient().DeleteVpnGatewaySslServer(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + taskId = *response.Response.TaskId + return nil + }) + return +} + +func (me *VpcService) DescribeVpnSslClientById(ctx context.Context, sslId string) (has bool, gateway *vpc.SslVpnClient, err error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpnGatewaySslClientsRequest() + response *vpc.DescribeVpnGatewaySslClientsResponse + ) + request.SslVpnClientIds = []*string{&sslId} + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + response, err = me.client.UseVpcClient().DescribeVpnGatewaySslClients(request) + if err != nil { + ee, ok := err.(*sdkErrors.TencentCloudSDKError) + if !ok { + return tccommon.RetryError(err) + } + if ee.Code == VPCNotFound { + return nil + } else { + return tccommon.RetryError(err) + } + } + return nil + }) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", logId, request.GetAction(), request.ToJsonString(), err) + return + } + if response == nil || response.Response == nil || len(response.Response.SslVpnClientSet) < 1 { + has = false + return + } + + gateway = response.Response.SslVpnClientSet[0] + has = true + return +} + +func (me *VpcService) DescribeVpnGwSslClientByFilter(ctx context.Context, filters map[string]string) (instances []*vpc.SslVpnClient, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpnGatewaySslClientsRequest() + ) + request.Filters = make([]*vpc.Filter, 0, len(filters)) + for k, v := range filters { + filter := vpc.Filter{ + Name: helper.String(k), + Values: []*string{helper.String(v)}, + } + request.Filters = append(request.Filters, &filter) + } + + var offset uint64 = 0 + var pageSize uint64 = 100 + instances = make([]*vpc.SslVpnClient, 0) + + for { + request.Offset = &offset + request.Limit = &pageSize + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeVpnGatewaySslClients(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response == nil || len(response.Response.SslVpnClientSet) < 1 { + break + } + instances = append(instances, response.Response.SslVpnClientSet...) + if len(response.Response.SslVpnClientSet) < int(pageSize) { + break + } + offset += pageSize + } + return +} + +func (me *VpcService) DeleteVpnGatewaySslClient(ctx context.Context, SslClientId string) (taskId *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteVpnGatewaySslClientRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.SslVpnClientId = &SslClientId + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet := me.client.UseVpcClient().DeleteVpnGatewaySslClient(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + taskId = response.Response.TaskId + return nil + }) + return +} + +func (me *VpcService) CreateNatGatewaySnat(ctx context.Context, natGatewayId string, snat *vpc.SourceIpTranslationNatRule) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewCreateNatGatewaySourceIpTranslationNatRuleRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.NatGatewayId = &natGatewayId + request.SourceIpTranslationNatRules = []*vpc.SourceIpTranslationNatRule{snat} + + var response *vpc.CreateNatGatewaySourceIpTranslationNatRuleResponse + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet = me.client.UseVpcClient().CreateNatGatewaySourceIpTranslationNatRule(request) + if errRet != nil { + log.Printf("[CRITAL]%s create nat gateway source ip translation nat rule failed, reason: %v", logId, errRet) + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + if errRet != nil { + return errRet + } + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %+v, %s", response, request.GetAction()) + } + return +} + +func (me *VpcService) ModifyNatGatewaySnat(ctx context.Context, natGatewayId string, snat *vpc.SourceIpTranslationNatRule) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewModifyNatGatewaySourceIpTranslationNatRuleRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.NatGatewayId = &natGatewayId + request.SourceIpTranslationNatRule = snat + + var response *vpc.ModifyNatGatewaySourceIpTranslationNatRuleResponse + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet = me.client.UseVpcClient().ModifyNatGatewaySourceIpTranslationNatRule(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + if errRet != nil { + return errRet + } + + if response == nil || response.Response == nil { + errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()) + } + return +} + +func (me *VpcService) DeleteNatGatewaySnat(ctx context.Context, natGatewayId string, snatId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDeleteNatGatewaySourceIpTranslationNatRuleRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.NatGatewayId = &natGatewayId + request.NatGatewaySnatIds = []*string{&snatId} + + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + _, errRet = me.client.UseVpcClient().DeleteNatGatewaySourceIpTranslationNatRule(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + return +} + +func (me *VpcService) DescribeNatGatewaySnats(ctx context.Context, natGatewayId string, filters []*vpc.Filter) (errRet error, result []*vpc.SourceIpTranslationNatRule) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeNatGatewaySourceIpTranslationNatRulesRequest() + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail,reason[%s]", logId, request.GetAction(), errRet.Error()) + } + }() + request.NatGatewayId = &natGatewayId + if len(filters) > 0 { + request.Filters = filters + } + + offset := int64(0) + limit := int64(VPN_DESCRIBE_LIMIT) + for { + request.Offset = &offset + request.Limit = &limit + var response *vpc.DescribeNatGatewaySourceIpTranslationNatRulesResponse + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + response, errRet = me.client.UseVpcClient().DescribeNatGatewaySourceIpTranslationNatRules(request) + if errRet != nil { + return tccommon.RetryError(errRet, tccommon.InternalError) + } + return nil + }) + if errRet != nil { + return errRet, nil + } + + if response == nil || response.Response == nil { + return fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction()), nil + } else if len(response.Response.SourceIpTranslationNatRuleSet) > 0 { + result = append(result, response.Response.SourceIpTranslationNatRuleSet...) + } else { + return + } + offset = offset + limit + } +} + +func (me *VpcService) DescribeAssistantCidr(ctx context.Context, vpcId string) (info []*vpc.AssistantCidr, errRet error) { + logId := tccommon.GetLogId(ctx) + request := vpc.NewDescribeAssistantCidrRequest() + + 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()) + } + }() + + request.VpcIds = []*string{&vpcId} + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeAssistantCidr(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()) + + info = response.Response.AssistantCidrSet + + return +} + +// CheckAssistantCidr used for check if cidr conflict +func (me *VpcService) CheckAssistantCidr(ctx context.Context, request *vpc.CheckAssistantCidrRequest) (info []*vpc.ConflictSource, errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().CheckAssistantCidr(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()) + + info = response.Response.ConflictSourceSet + + return +} + +func (me *VpcService) CreateAssistantCidr(ctx context.Context, request *vpc.CreateAssistantCidrRequest) (info []*vpc.AssistantCidr, errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().CreateAssistantCidr(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()) + + info = response.Response.AssistantCidrSet + + return +} + +func (me *VpcService) ModifyAssistantCidr(ctx context.Context, request *vpc.ModifyAssistantCidrRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().ModifyAssistantCidr(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 +} + +func (me *VpcService) DeleteAssistantCidr(ctx context.Context, request *vpc.DeleteAssistantCidrRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().DeleteAssistantCidr(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 +} + +func (me *VpcService) DescribeVpcBandwidthPackage(ctx context.Context, bandwidthPackageId string) (resource *vpc.BandwidthPackage, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeBandwidthPackagesRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.BandwidthPackageIds = []*string{&bandwidthPackageId} + //request.Filters = append( + // request.Filters, + // &bwp.Filter{ + // Name: helper.String("bandwidth-package_id"), + // Values: []*string{&bandwidthPackageId}, + // }, + //) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeBandwidthPackages(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response != nil && len(response.Response.BandwidthPackageSet) > 0 { + resource = response.Response.BandwidthPackageSet[0] + } + + return +} + +func (me *VpcService) DeleteVpcBandwidthPackageById(ctx context.Context, bandwidthPackageId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteBandwidthPackageRequest() + + request.BandwidthPackageId = &bandwidthPackageId + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DeleteBandwidthPackage(request) + if err != nil { + errRet = err + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *VpcService) DescribeVpcBandwidthPackageAttachment(ctx context.Context, bandwidthPackageId, resourceId string) (bandwidthPackageResources *vpc.Resource, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeBandwidthPackageResourcesRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.BandwidthPackageId = &bandwidthPackageId + request.Filters = append( + request.Filters, + &vpc.Filter{ + Name: helper.String("resource-id"), + Values: []*string{&resourceId}, + }, + ) + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeBandwidthPackageResources(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if len(response.Response.ResourceSet) < 1 { + return + } + bandwidthPackageResources = response.Response.ResourceSet[0] + + return + +} + +func (me *VpcService) DeleteVpcBandwidthPackageAttachmentById(ctx context.Context, bandwidthPackageId, resourceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewRemoveBandwidthPackageResourcesRequest() + + if strings.HasPrefix(resourceId, "eip") { + request.ResourceType = helper.String("Address") + } else { + request.ResourceType = helper.String("LoadBalance") + } + + request.BandwidthPackageId = &bandwidthPackageId + request.ResourceIds = []*string{&resourceId} + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "delete object", request.ToJsonString(), errRet.Error()) + } + }() + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().RemoveBandwidthPackageResources(request) + if err != nil { + errRet = err + return err + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *VpcService) DescribeFlowLogs(ctx context.Context, request *vpc.DescribeFlowLogsRequest) (result []*vpc.FlowLog, errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseVpcClient().DescribeFlowLogs(request) + + if err != nil { + errRet = err + return + } + + result = response.Response.FlowLog + + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *VpcService) DescribeVpcFlowLogById(ctx context.Context, flowLogId, vpcId string) (FlowLog *vpc.FlowLog, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeFlowLogRequest() + request.FlowLogId = &flowLogId + + if vpcId != "" { + request.VpcId = &vpcId + } + + 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.UseVpcClient().DescribeFlowLog(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()) + + if len(response.Response.FlowLog) < 1 { + return + } + + FlowLog = response.Response.FlowLog[0] + return +} + +func (me *VpcService) DeleteVpcFlowLogById(ctx context.Context, flowLogId, vpcId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteFlowLogRequest() + request.FlowLogId = &flowLogId + if vpcId != "" { + request.VpcId = &vpcId + } + + 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.UseVpcClient().DeleteFlowLog(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 +} + +func (me *VpcService) DescribeVpcEndPointServiceById(ctx context.Context, endPointServiceId string) (endPointService *vpc.EndPointService, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeVpcEndPointServiceRequest() + request.EndPointServiceIds = []*string{&endPointServiceId} + + 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()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*vpc.EndPointService, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeVpcEndPointService(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()) + + if response == nil || len(response.Response.EndPointServiceSet) < 1 { + break + } + instances = append(instances, response.Response.EndPointServiceSet...) + if len(response.Response.EndPointServiceSet) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + endPointService = instances[0] + return +} + +func (me *VpcService) DeleteVpcEndPointServiceById(ctx context.Context, endPointServiceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteVpcEndPointServiceRequest() + request.EndPointServiceId = &endPointServiceId + + 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.UseVpcClient().DeleteVpcEndPointService(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 +} + +func (me *VpcService) DescribeVpcEndPointById(ctx context.Context, endPointId string) (endPoint *vpc.EndPoint, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeVpcEndPointRequest() + request.EndPointId = []*string{&endPointId} + + 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()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*vpc.EndPoint, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeVpcEndPoint(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()) + + if response == nil || len(response.Response.EndPointSet) < 1 { + break + } + instances = append(instances, response.Response.EndPointSet...) + if len(response.Response.EndPointSet) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + endPoint = instances[0] + return +} + +func (me *VpcService) DeleteVpcEndPointById(ctx context.Context, endPointId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteVpcEndPointRequest() + request.EndPointId = &endPointId + + 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.UseVpcClient().DeleteVpcEndPoint(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 +} + +func (me *VpcService) DescribeVpcEndPointServiceWhiteListById(ctx context.Context, userUin string, endPointServiceId string) (endPointServiceWhiteList *vpc.VpcEndPointServiceUser, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeVpcEndPointServiceWhiteListRequest() + + request.Filters = make([]*vpc.Filter, 0) + if userUin != "" { + filter := &vpc.Filter{ + Name: helper.String("user-uin"), + Values: []*string{&userUin}, + } + request.Filters = append(request.Filters, filter) + } + if endPointServiceId != "" { + filter := &vpc.Filter{ + Name: helper.String("end-point-service-id"), + Values: []*string{&endPointServiceId}, + } + request.Filters = append(request.Filters, filter) + } + + 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()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*vpc.VpcEndPointServiceUser, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeVpcEndPointServiceWhiteList(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()) + + if response == nil || len(response.Response.VpcEndpointServiceUserSet) < 1 { + break + } + instances = append(instances, response.Response.VpcEndpointServiceUserSet...) + if len(response.Response.VpcEndpointServiceUserSet) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + endPointServiceWhiteList = instances[0] + return +} + +func (me *VpcService) DeleteVpcEndPointServiceWhiteListById(ctx context.Context, userUin string, endPointServiceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteVpcEndPointServiceWhiteListRequest() + request.UserUin = []*string{&userUin} + request.EndPointServiceId = &endPointServiceId + + 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.UseVpcClient().DeleteVpcEndPointServiceWhiteList(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 +} + +func (me *VpcService) DescribeVpcBandwidthPackageByEip(ctx context.Context, eipId string) (resource *vpc.BandwidthPackage, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeBandwidthPackagesRequest() + ) + + defer func() { + if errRet != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, "query object", request.ToJsonString(), errRet.Error()) + } + }() + + request.Filters = append( + request.Filters, + &vpc.Filter{ + Name: helper.String("resource.resource-id"), + Values: []*string{&eipId}, + }, + ) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseVpcClient().DescribeBandwidthPackages(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + if response != nil && len(response.Response.BandwidthPackageSet) > 0 { + resource = response.Response.BandwidthPackageSet[0] + } + + return +} + +func (me *VpcService) DescribeVpcCcnRoutesById(ctx context.Context, ccnId string, routeId string) (ccnRoutes *vpc.CcnRoute, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeCcnRoutesRequest() + request.CcnId = &ccnId + + 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.UseVpcClient().DescribeCcnRoutes(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()) + + for _, route := range response.Response.RouteSet { + if *route.RouteId == routeId { + ccnRoutes = route + return + } + } + + return +} + +func (me *VpcService) DescribeCcnCrossBorderComplianceByFilter(ctx context.Context, param map[string]interface{}) (crossBorderCompliance []*vpc.CrossBorderCompliance, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeCrossBorderComplianceRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "service_provider" { + request.ServiceProvider = v.(*string) + } + if k == "compliance_id" { + if *v.(*uint64) != 0 { + request.ComplianceId = v.(*uint64) + } + } + if k == "company" { + request.Company = v.(*string) + } + if k == "uniform_social_credit_code" { + request.UniformSocialCreditCode = v.(*string) + } + if k == "legal_person" { + request.LegalPerson = v.(*string) + } + if k == "issuing_authority" { + request.IssuingAuthority = v.(*string) + } + if k == "business_address" { + request.BusinessAddress = v.(*string) + } + if k == "post_code" { + if *v.(*uint64) != 0 { + request.PostCode = v.(*uint64) + } + } + if k == "manager" { + request.Manager = v.(*string) + } + if k == "manager_id" { + request.ManagerId = v.(*string) + } + if k == "manager_address" { + request.ManagerAddress = v.(*string) + } + if k == "manager_telephone" { + request.ManagerTelephone = v.(*string) + } + if k == "email" { + request.Email = v.(*string) + } + if k == "service_start_date" { + request.ServiceStartDate = v.(*string) + } + if k == "service_end_date" { + request.ServiceEndDate = v.(*string) + } + if k == "state" { + request.State = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeCrossBorderCompliance(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()) + + if response == nil || len(response.Response.CrossBorderComplianceSet) < 1 { + break + } + crossBorderCompliance = append(crossBorderCompliance, response.Response.CrossBorderComplianceSet...) + if len(response.Response.CrossBorderComplianceSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeTenantCcnByFilter(ctx context.Context, param map[string]interface{}) (tenantCcn []*vpc.CcnInstanceInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeTenantCcnsRequest() + ) + + 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()) + } + }() + + request.Filters = make([]*vpc.Filter, 0, len(param)) + for k, v := range param { + filter := &vpc.Filter{ + Name: helper.String(k), + Values: v.([]*string), + } + request.Filters = append(request.Filters, filter) + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeTenantCcns(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()) + + if response == nil || len(response.Response.CcnSet) < 1 { + break + } + tenantCcn = append(tenantCcn, response.Response.CcnSet...) + if len(response.Response.CcnSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeCcnCrossBorderFlowMonitorByFilter(ctx context.Context, param map[string]interface{}) (crossBorderFlowMonitor []*vpc.CrossBorderFlowMonitorData, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeCrossBorderFlowMonitorRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "source_region" { + request.SourceRegion = v.(*string) + } + if k == "destination_region" { + request.DestinationRegion = v.(*string) + } + if k == "ccn_id" { + request.CcnId = v.(*string) + } + if k == "ccn_uin" { + request.CcnUin = v.(*string) + } + if k == "period" { + if *v.(*int64) != 0 { + request.Period = v.(*int64) + } + } + if k == "start_time" { + request.StartTime = v.(*string) + } + if k == "end_time" { + request.EndTime = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeCrossBorderFlowMonitor(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()) + + if response == nil || len(response.Response.CrossBorderFlowMonitorData) < 1 { + return + } + + crossBorderFlowMonitor = response.Response.CrossBorderFlowMonitorData + + return +} + +func (me *VpcService) DescribeVpnCustomerGatewayVendors(ctx context.Context) (vpnCustomerGatewayVendors []*vpc.CustomerGatewayVendor, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeCustomerGatewayVendorsRequest() + ) + + 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.UseVpcClient().DescribeCustomerGatewayVendors(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()) + + if response == nil || len(response.Response.CustomerGatewayVendorSet) < 1 { + return + } + + vpnCustomerGatewayVendors = response.Response.CustomerGatewayVendorSet + return +} + +func (me *VpcService) DescribeVpcVpnGatewayCcnRoutesById(ctx context.Context, vpnGatewayId string, routeId string) (vpnGatewayCcnRoutes *vpc.VpngwCcnRoutes, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeVpnGatewayCcnRoutesRequest() + request.VpnGatewayId = &vpnGatewayId + + 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.UseVpcClient().DescribeVpnGatewayCcnRoutes(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()) + + if len(response.Response.RouteSet) < 1 { + return + } + + for _, route := range response.Response.RouteSet { + if *route.RouteId == routeId { + vpnGatewayCcnRoutes = route + break + } + } + return +} + +func (me *VpcService) DescribeVpcIpv6AddressById(ctx context.Context, ip6AddressId string) (ipv6Address *vpc.Address, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeIp6AddressesRequest() + request.Ip6AddressIds = []*string{&ip6AddressId} + + 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.UseVpcClient().DescribeIp6Addresses(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()) + + if len(response.Response.AddressSet) < 1 { + return + } + + ipv6Address = response.Response.AddressSet[0] + return +} + +func (me *VpcService) DeleteVpcIpv6AddressById(ctx context.Context, ip6AddressId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewReleaseIp6AddressesBandwidthRequest() + request.Ip6AddressIds = []*string{&ip6AddressId} + + 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.UseVpcClient().ReleaseIp6AddressesBandwidth(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 +} + +func (me *VpcService) VpcIpv6AddressStateRefreshFunc(taskId string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + ctx := tccommon.ContextNil + + taskId := helper.StrToUint64Point(taskId) + + object, err := me.DescribeTaskResult(ctx, taskId) + + if err != nil { + return nil, "", err + } + + return object, helper.PString(object.Response.Result), nil + } +} + +func (me *VpcService) DescribeVpcCcnRegionBandwidthLimitsByFilter(ctx context.Context, param map[string]interface{}) (CcnRegionBandwidthLimits []*vpc.CcnBandwidth, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeCrossBorderCcnRegionBandwidthLimitsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "filters" { + request.Filters = v.([]*vpc.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeCrossBorderCcnRegionBandwidthLimits(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()) + + if response == nil || len(response.Response.CcnBandwidthSet) < 1 { + break + } + CcnRegionBandwidthLimits = append(CcnRegionBandwidthLimits, response.Response.CcnBandwidthSet...) + if len(response.Response.CcnBandwidthSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeNatDcRouteByFilter(ctx context.Context, param map[string]interface{}) (natDcRoute []*vpc.NatDirectConnectGatewayRoute, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeNatGatewayDirectConnectGatewayRouteRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "NatGatewayId" { + request.NatGatewayId = v.(*string) + } + if k == "VpcId" { + request.VpcId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeNatGatewayDirectConnectGatewayRoute(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()) + + if response == nil || len(response.Response.NatDirectConnectGatewayRouteSet) < 1 { + break + } + natDcRoute = append(natDcRoute, response.Response.NatDirectConnectGatewayRouteSet...) + if len(response.Response.NatDirectConnectGatewayRouteSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeEipAddressQuota(ctx context.Context) (addressQuota []*vpc.Quota, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeAddressQuotaRequest() + ) + + 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.UseVpcClient().DescribeAddressQuota(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()) + + addressQuota = append(addressQuota, response.Response.QuotaSet...) + + return +} + +func (me *VpcService) DescribeEipNetworkAccountType(ctx context.Context) (networkAccountType *string, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeNetworkAccountTypeRequest() + ) + + 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.UseVpcClient().DescribeNetworkAccountType(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()) + + networkAccountType = response.Response.NetworkAccountType + + return +} + +func (me *VpcService) DescribeVpcBandwidthPackageQuota(ctx context.Context) (bandwidthPackageQuota []*vpc.Quota, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeBandwidthPackageQuotaRequest() + ) + + 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.UseVpcClient().DescribeBandwidthPackageQuota(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()) + + bandwidthPackageQuota = append(bandwidthPackageQuota, response.Response.QuotaSet...) + + return +} + +func (me *VpcService) DescribeVpcBandwidthPackageBillUsageByFilter(ctx context.Context, param map[string]interface{}) (bandwidthPackageBillUsage []*vpc.BandwidthPackageBillBandwidth, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeBandwidthPackageBillUsageRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "BandwidthPackageId" { + request.BandwidthPackageId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeBandwidthPackageBillUsage(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()) + + bandwidthPackageBillUsage = append(bandwidthPackageBillUsage, response.Response.BandwidthPackageBillBandwidthSet...) + + return +} + +func (me *VpcService) DescribeVpcTrafficPackageById(ctx context.Context, trafficPackageId string) (TrafficPackage *vpc.TrafficPackage, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeTrafficPackagesRequest() + request.TrafficPackageIds = []*string{&trafficPackageId} + + 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.UseVpcClient().DescribeTrafficPackages(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()) + + if len(response.Response.TrafficPackageSet) < 1 { + return + } + + TrafficPackage = response.Response.TrafficPackageSet[0] + return +} + +func (me *VpcService) DeleteVpcTrafficPackageById(ctx context.Context, trafficPackageId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteTrafficPackagesRequest() + request.TrafficPackageIds = []*string{&trafficPackageId} + + 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.UseVpcClient().DeleteTrafficPackages(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 +} + +func (me *VpcService) DescribeVpcSnapshotPoliciesById(ctx context.Context, snapshotPolicyId string) (snapshotPolices []*vpc.SnapshotPolicy, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeSnapshotPoliciesRequest() + request.SnapshotPolicyIds = []*string{&snapshotPolicyId} + + 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.UseVpcClient().DescribeSnapshotPolicies(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()) + + snapshotPolices = response.Response.SnapshotPolicySet + return +} + +func (me *VpcService) DeleteVpcSnapshotPoliciesById(ctx context.Context, snapshotPolicyId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteSnapshotPoliciesRequest() + request.SnapshotPolicyIds = []*string{&snapshotPolicyId} + + 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.UseVpcClient().DeleteSnapshotPolicies(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 +} + +func (me *VpcService) DescribeVpcSnapshotPolicyAttachmentById(ctx context.Context, snapshotPolicyId string) (snapshotPolicyAttachment []*vpc.SnapshotInstance, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeSnapshotAttachedInstancesRequest() + request.SnapshotPolicyId = &snapshotPolicyId + + 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.UseVpcClient().DescribeSnapshotAttachedInstances(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()) + + if len(response.Response.InstanceSet) < 1 { + return + } + + snapshotPolicyAttachment = response.Response.InstanceSet + return +} + +func (me *VpcService) DeleteVpcSnapshotPolicyAttachmentById(ctx context.Context, snapshotPolicyId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDetachSnapshotInstancesRequest() + request.SnapshotPolicyId = &snapshotPolicyId + + snapshotInstace, err := me.DescribeVpcSnapshotPolicyAttachmentById(ctx, snapshotPolicyId) + if err != nil { + errRet = err + return + } + request.Instances = snapshotInstace + + 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.UseVpcClient().DetachSnapshotInstances(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 +} + +func (me *VpcService) DescribeVpcNetDetectById(ctx context.Context, netDetectId string) (netDetect *vpc.NetDetect, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeNetDetectsRequest() + request.NetDetectIds = []*string{&netDetectId} + + 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.UseVpcClient().DescribeNetDetects(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()) + + if len(response.Response.NetDetectSet) < 1 { + return + } + + netDetect = response.Response.NetDetectSet[0] + return +} + +func (me *VpcService) DeleteVpcNetDetectById(ctx context.Context, netDetectId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteNetDetectRequest() + request.NetDetectId = &netDetectId + + 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.UseVpcClient().DeleteNetDetect(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 +} + +func (me *VpcService) DescribeVpcClassicLinkAttachmentById(ctx context.Context, vpcId string, instanceId string) (classicLinkAttachment *vpc.ClassicLinkInstance, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeClassicLinkInstancesRequest() + filter := vpc.FilterObject{ + Name: helper.String("vpc-id"), + Values: []*string{&vpcId}, + } + request.Filters = append(request.Filters, &filter) + + 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()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + instances := make([]*vpc.ClassicLinkInstance, 0) + for { + request.Offset = helper.Int64ToStrPoint(offset) + request.Limit = helper.Int64ToStrPoint(limit) + response, err := me.client.UseVpcClient().DescribeClassicLinkInstances(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()) + + if response == nil || len(response.Response.ClassicLinkInstanceSet) < 1 { + break + } + instances = append(instances, response.Response.ClassicLinkInstanceSet...) + if len(response.Response.ClassicLinkInstanceSet) < int(limit) { + break + } + offset += limit + } + + if len(instances) < 1 { + return + } + + for _, instance := range instances { + if *instance.InstanceId == instanceId { + classicLinkAttachment = instance + } + } + + return +} + +func (me *VpcService) DeleteVpcClassicLinkAttachmentById(ctx context.Context, vpcId string, instanceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDetachClassicLinkVpcRequest() + request.VpcId = &vpcId + request.InstanceIds = []*string{&instanceId} + + 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.UseVpcClient().DetachClassicLinkVpc(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 +} + +func (me *VpcService) DescribeVpcDhcpIpById(ctx context.Context, dhcpIpId string) (dhcpIp *vpc.DhcpIp, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeDhcpIpsRequest() + request.DhcpIpIds = []*string{&dhcpIpId} + + 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.UseVpcClient().DescribeDhcpIps(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()) + + if len(response.Response.DhcpIpSet) < 1 { + return + } + + dhcpIp = response.Response.DhcpIpSet[0] + return +} + +func (me *VpcService) DeleteVpcDhcpIpById(ctx context.Context, dhcpIpId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteDhcpIpRequest() + request.DhcpIpId = &dhcpIpId + + 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.UseVpcClient().DeleteDhcpIp(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 +} + +func (me *VpcService) DescribeVpcDhcpAssociateAddressById(ctx context.Context, dhcpIpId string, addressIp string) (dhcpAssociateAddress *vpc.DhcpIp, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeDhcpIpsRequest() + request.DhcpIpIds = []*string{&dhcpIpId} + + 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.UseVpcClient().DescribeDhcpIps(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()) + + if len(response.Response.DhcpIpSet) < 1 { + return + } + + dhcpIp := response.Response.DhcpIpSet[0] + if *dhcpIp.AddressIp != addressIp { + return + } + dhcpAssociateAddress = dhcpIp + + return +} + +func (me *VpcService) DeleteVpcDhcpAssociateAddressById(ctx context.Context, dhcpIpId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDisassociateDhcpIpWithAddressIpRequest() + request.DhcpIpId = &dhcpIpId + + 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.UseVpcClient().DisassociateDhcpIpWithAddressIp(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 +} + +func (me *VpcService) DescribeVpcById(ctx context.Context, vpcId string) (instance *vpc.Vpc, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeVpcsRequest() + request.VpcIds = []*string{&vpcId} + + 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()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + instances := make([]*vpc.Vpc, 0) + for { + request.Offset = helper.Int64ToStrPoint(offset) + request.Limit = helper.Int64ToStrPoint(limit) + response, err := me.client.UseVpcClient().DescribeVpcs(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()) + + if response == nil || len(response.Response.VpcSet) < 1 { + break + } + instances = append(instances, response.Response.VpcSet...) + if len(response.Response.VpcSet) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + instance = instances[0] + return +} + +func (me *VpcService) DeleteVpcIpv6CidrBlockById(ctx context.Context, vpcId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewUnassignIpv6CidrBlockRequest() + request.VpcId = &vpcId + + 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.UseVpcClient().UnassignIpv6CidrBlock(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 +} + +func (me *VpcService) DescribeSubnetById(ctx context.Context, subnetId string) (instance *vpc.Subnet, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeSubnetsRequest() + request.SubnetIds = []*string{&subnetId} + + 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()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + instances := make([]*vpc.Subnet, 0) + for { + request.Offset = helper.Int64ToStrPoint(offset) + request.Limit = helper.Int64ToStrPoint(limit) + response, err := me.client.UseVpcClient().DescribeSubnets(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()) + + if response == nil || len(response.Response.SubnetSet) < 1 { + break + } + instances = append(instances, response.Response.SubnetSet...) + if len(response.Response.SubnetSet) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + instance = instances[0] + return +} + +func (me *VpcService) DeleteVpcIpv6SubnetCidrBlockById(ctx context.Context, vpcId string, subnetId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewUnassignIpv6SubnetCidrBlockRequest() + request.VpcId = &vpcId + + ipv6SubnetCidrBlock := vpc.Ipv6SubnetCidrBlock{} + ipv6SubnetCidrBlock.SubnetId = &subnetId + request.Ipv6SubnetCidrBlocks = append(request.Ipv6SubnetCidrBlocks, &ipv6SubnetCidrBlock) + + 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.UseVpcClient().UnassignIpv6SubnetCidrBlock(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 +} + +func (me *VpcService) DescribeVpcIpv6EniAddressById(ctx context.Context, vpcId string, ipv6Address string) (ipv6EniAddress *vpc.VpcIpv6Address, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeVpcIpv6AddressesRequest() + request.VpcId = &vpcId + request.Ipv6Addresses = []*string{&ipv6Address} + + 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.UseVpcClient().DescribeVpcIpv6Addresses(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()) + + if len(response.Response.Ipv6AddressSet) < 1 { + return + } + + ipv6EniAddress = response.Response.Ipv6AddressSet[0] + return +} + +func (me *VpcService) DeleteVpcIpv6EniAddressById(ctx context.Context, networkInterfaceId string, ipv6Address string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewUnassignIpv6AddressesRequest() + request.NetworkInterfaceId = &networkInterfaceId + address := vpc.Ipv6Address{} + address.Address = &ipv6Address + request.Ipv6Addresses = append(request.Ipv6Addresses, &address) + + 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.UseVpcClient().UnassignIpv6Addresses(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 +} + +func (me *VpcService) DescribeVpcLocalGatewayById(ctx context.Context, localGatewayId string) (localGateway *vpc.LocalGateway, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeLocalGatewayRequest() + + filter := vpc.Filter{ + Name: helper.String("local-gateway-id"), + Values: []*string{&localGatewayId}, + } + + request.Filters = append(request.Filters, &filter) + + 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.UseVpcClient().DescribeLocalGateway(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()) + + if len(response.Response.LocalGatewaySet) < 1 { + return + } + + localGateway = response.Response.LocalGatewaySet[0] + return +} + +func (me *VpcService) DeleteVpcLocalGatewayById(ctx context.Context, cdcId string, localGatewayId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteLocalGatewayRequest() + request.CdcId = &cdcId + request.LocalGatewayId = &localGatewayId + + 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.UseVpcClient().DeleteLocalGateway(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 +} + +func (me *VpcService) DescribeVpcAccountAttributes(ctx context.Context) (accountAttributes []*vpc.AccountAttribute, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeAccountAttributesRequest() + ) + + 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.UseVpcClient().DescribeAccountAttributes(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()) + + accountAttributes = response.Response.AccountAttributeSet + + return +} + +func (me *VpcService) DescribeVpcClassicLinkInstancesByFilter(ctx context.Context, param map[string]interface{}) (classicLinkInstances []*vpc.ClassicLinkInstance, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeClassicLinkInstancesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Filters" { + request.Filters = v.([]*vpc.FilterObject) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = helper.Int64ToStrPoint(offset) + request.Limit = helper.Int64ToStrPoint(limit) + response, err := me.client.UseVpcClient().DescribeClassicLinkInstances(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()) + + if response == nil || len(response.Response.ClassicLinkInstanceSet) < 1 { + break + } + classicLinkInstances = append(classicLinkInstances, response.Response.ClassicLinkInstanceSet...) + if len(response.Response.ClassicLinkInstanceSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeVpcGatewayFlowMonitorDetailByFilter(ctx context.Context, param map[string]interface{}) (GatewayFlowMonitorDetail []*vpc.GatewayFlowMonitorDetail, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeGatewayFlowMonitorDetailRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "TimePoint" { + request.TimePoint = v.(*string) + } + if k == "VpnId" { + request.VpnId = v.(*string) + } + if k == "DirectConnectGatewayId" { + request.DirectConnectGatewayId = v.(*string) + } + if k == "PeeringConnectionId" { + request.PeeringConnectionId = v.(*string) + } + if k == "NatId" { + request.NatId = v.(*string) + } + if k == "OrderField" { + request.OrderField = v.(*string) + } + if k == "OrderDirection" { + request.OrderDirection = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeGatewayFlowMonitorDetail(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()) + + if response == nil || len(response.Response.GatewayFlowMonitorDetailSet) < 1 { + break + } + GatewayFlowMonitorDetail = append(GatewayFlowMonitorDetail, response.Response.GatewayFlowMonitorDetailSet...) + if len(response.Response.GatewayFlowMonitorDetailSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeVpcGatewayFlowQosByFilter(ctx context.Context, param map[string]interface{}) (GatewayFlowQos []*vpc.GatewayQos, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeGatewayFlowQosRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "GatewayId" { + request.GatewayId = v.(*string) + } + if k == "IpAddresses" { + request.IpAddresses = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeGatewayFlowQos(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()) + + if response == nil || len(response.Response.GatewayQosSet) < 1 { + break + } + GatewayFlowQos = append(GatewayFlowQos, response.Response.GatewayQosSet...) + if len(response.Response.GatewayQosSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeVpcCvmInstancesByFilter(ctx context.Context, param map[string]interface{}) (CvmInstances []*vpc.CvmInstance, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpcInstancesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Filters" { + request.Filters = v.([]*vpc.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeVpcInstances(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()) + + if response == nil || len(response.Response.InstanceSet) < 1 { + break + } + CvmInstances = append(CvmInstances, response.Response.InstanceSet...) + if len(response.Response.InstanceSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeVpcNetDetectStatesByFilter(ctx context.Context, param map[string]interface{}) (NetDetectStates []*vpc.NetDetectState, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeNetDetectStatesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "NetDetectIds" { + request.NetDetectIds = v.([]*string) + } + if k == "Filters" { + request.Filters = v.([]*vpc.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeNetDetectStates(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()) + + if response == nil || len(response.Response.NetDetectStateSet) < 1 { + break + } + NetDetectStates = append(NetDetectStates, response.Response.NetDetectStateSet...) + if len(response.Response.NetDetectStateSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeVpcNetworkInterfaceLimit(ctx context.Context, param map[string]interface{}) (networkInterfaceLimit *vpc.DescribeNetworkInterfaceLimitResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeNetworkInterfaceLimitRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeNetworkInterfaceLimit(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()) + + networkInterfaceLimit = response.Response + + return +} + +func (me *VpcService) DescribeVpcPrivateIpAddresses(ctx context.Context, param map[string]interface{}) (PrivateIpAddresses []*vpc.VpcPrivateIpAddress, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpcPrivateIpAddressesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "VpcId" { + request.VpcId = v.(*string) + } + if k == "PrivateIpAddresses" { + request.PrivateIpAddresses = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeVpcPrivateIpAddresses(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()) + + PrivateIpAddresses = response.Response.VpcPrivateIpAddressSet + + return +} + +func (me *VpcService) DescribeVpcProductQuota(ctx context.Context, param map[string]interface{}) (ProductQuota []*vpc.ProductQuota, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeProductQuotaRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Product" { + request.Product = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeProductQuota(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()) + + ProductQuota = response.Response.ProductQuotaSet + + return +} + +func (me *VpcService) DescribeVpcResourceDashboard(ctx context.Context, param map[string]interface{}) (ResourceDashboard []*vpc.ResourceDashboard, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpcResourceDashboardRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "VpcIds" { + request.VpcIds = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeVpcResourceDashboard(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()) + + ResourceDashboard = response.Response.ResourceDashboardSet + + return +} + +func (me *VpcService) DescribeVpcRouteConflicts(ctx context.Context, param map[string]interface{}) (routeConflicts []*vpc.RouteConflict, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeRouteConflictsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "RouteTableId" { + request.RouteTableId = v.(*string) + } + if k == "DestinationCidrBlocks" { + request.DestinationCidrBlocks = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeRouteConflicts(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()) + + routeConflicts = response.Response.RouteConflictSet + + return +} + +func (me *VpcService) DescribeVpcSecurityGroupLimits(ctx context.Context, param map[string]interface{}) (securityGroupLimit *vpc.SecurityGroupLimitSet, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeSecurityGroupLimitsRequest() + ) + + 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.UseVpcClient().DescribeSecurityGroupLimits(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()) + + securityGroupLimit = response.Response.SecurityGroupLimitSet + + return +} + +func (me *VpcService) DescribeVpcSecurityGroupReferences(ctx context.Context, param map[string]interface{}) (securityGroupReferences []*vpc.ReferredSecurityGroup, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeSecurityGroupReferencesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "SecurityGroupIds" { + request.SecurityGroupIds = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeSecurityGroupReferences(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()) + + securityGroupReferences = response.Response.ReferredSecurityGroupSet + + return +} + +func (me *VpcService) DescribeVpcSgSnapshotFileContent(ctx context.Context, param map[string]interface{}) (sgSnapshotFileContent *vpc.DescribeSgSnapshotFileContentResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeSgSnapshotFileContentRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "SnapshotPolicyId" { + request.SnapshotPolicyId = v.(*string) + } + if k == "SnapshotFileId" { + request.SnapshotFileId = v.(*string) + } + if k == "SecurityGroupId" { + request.SecurityGroupId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeSgSnapshotFileContent(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()) + + sgSnapshotFileContent = response.Response + + return +} + +func (me *VpcService) DescribeVpcSnapshotFilesByFilter(ctx context.Context, param map[string]interface{}) (SnapshotFiles []*vpc.SnapshotFileInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeSnapshotFilesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "BusinessType" { + request.BusinessType = v.(*string) + } + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + if k == "StartDate" { + request.StartDate = v.(*string) + } + if k == "EndDate" { + request.EndDate = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeSnapshotFiles(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()) + + if response == nil || len(response.Response.SnapshotFileSet) < 1 { + break + } + SnapshotFiles = append(SnapshotFiles, response.Response.SnapshotFileSet...) + if len(response.Response.SnapshotFileSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeVpcSubnetResourceDashboardByFilter(ctx context.Context, param map[string]interface{}) (subnetResourceDashboard []*vpc.ResourceStatistics, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeSubnetResourceDashboardRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "SubnetIds" { + request.SubnetIds = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeSubnetResourceDashboard(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()) + + subnetResourceDashboard = response.Response.ResourceStatisticsSet + + return +} + +func (me *VpcService) DescribeVpcTemplateLimits(ctx context.Context) (templateLimit *vpc.TemplateLimit, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeTemplateLimitsRequest() + ) + + 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.UseVpcClient().DescribeTemplateLimits(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()) + + templateLimit = response.Response.TemplateLimit + + return +} + +func (me *VpcService) DescribeVpcUsedIpAddressByFilter(ctx context.Context, param map[string]interface{}) (UsedIpAddress []*vpc.IpAddressStates, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeUsedIpAddressRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "VpcId" { + request.VpcId = v.(*string) + } + if k == "SubnetId" { + request.SubnetId = v.(*string) + } + if k == "IpAddresses" { + request.IpAddresses = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseVpcClient().DescribeUsedIpAddress(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()) + + if response == nil || len(response.Response.IpAddressStates) < 1 { + break + } + UsedIpAddress = append(UsedIpAddress, response.Response.IpAddressStates...) + if len(response.Response.IpAddressStates) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *VpcService) DescribeVpcLimitsByFilter(ctx context.Context, param map[string]interface{}) (limits []*vpc.VpcLimit, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewDescribeVpcLimitsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "LimitTypes" { + request.LimitTypes = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().DescribeVpcLimits(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()) + + limits = response.Response.VpcLimitSet + + return +} + +func (me *VpcService) DescribeVpcNetworkAclQuintupleById(ctx context.Context, networkAclId string) (networkAclQuintuples []*vpc.NetworkAclQuintupleEntry, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeNetworkAclQuintupleEntriesRequest() + request.NetworkAclId = &networkAclId + + 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.UseVpcClient().DescribeNetworkAclQuintupleEntries(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()) + + if len(response.Response.NetworkAclQuintupleSet) < 1 { + return + } + + networkAclQuintuples = response.Response.NetworkAclQuintupleSet + return +} + +func (me *VpcService) DeleteVpcNetworkAclQuintupleById(ctx context.Context, networkAclId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDeleteNetworkAclQuintupleEntriesRequest() + request.NetworkAclId = &networkAclId + + 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.UseVpcClient().DeleteNetworkAclQuintupleEntries(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 +} + +func (me *VpcService) DeleteVpcEniSgAttachmentById(ctx context.Context, networkInterfaceId string, securityGroupIds []string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDisassociateNetworkInterfaceSecurityGroupsRequest() + request.NetworkInterfaceIds = []*string{&networkInterfaceId} + request.SecurityGroupIds = common.StringPtrs(securityGroupIds) + + 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.UseVpcClient().DisassociateNetworkInterfaceSecurityGroups(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 +} + +func (me *VpcService) DescribeVpcNetDetectStateCheck(ctx context.Context, param map[string]interface{}) (netDetectStateCheck []*vpc.NetDetectIpState, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewCheckNetDetectStateRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "DetectDestinationIp" { + request.DetectDestinationIp = v.([]*string) + } + if k == "NextHopType" { + request.NextHopType = v.(*string) + } + if k == "NextHopDestination" { + request.NextHopDestination = v.(*string) + } + if k == "NetDetectId" { + request.NetDetectId = v.(*string) + } + if k == "VpcId" { + request.VpcId = v.(*string) + } + if k == "SubnetId" { + request.SubnetId = v.(*string) + } + if k == "NetDetectName" { + request.NetDetectName = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().CheckNetDetectState(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()) + + netDetectStateCheck = response.Response.NetDetectIpStateSet + + return +} + +func (me *VpcService) DescribeVpcNotifyRoutesById(ctx context.Context, routeTableId string, routeItemId string) (notifyRoute *vpc.Route, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewDescribeRouteTablesRequest() + request.RouteTableIds = []*string{&routeTableId} + + 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.UseVpcClient().DescribeRouteTables(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()) + + if len(response.Response.RouteTableSet) < 1 { + return + } + + for _, routeTable := range response.Response.RouteTableSet { + for _, route := range routeTable.RouteSet { + if *route.RouteItemId == routeItemId { + notifyRoute = route + break + } + } + } + return +} + +func (me *VpcService) DeleteVpcNotifyRoutesById(ctx context.Context, routeTableId string, routeItemId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := vpc.NewWithdrawNotifyRoutesRequest() + request.RouteTableId = &routeTableId + request.RouteItemIds = []*string{&routeItemId} + + 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.UseVpcClient().WithdrawNotifyRoutes(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 +} + +func (me *VpcService) DescribeVpnDefaultHealthCheckIp(ctx context.Context, param map[string]interface{}) (defaultHealthCheck *vpc.GenerateVpnConnectionDefaultHealthCheckIpResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = vpc.NewGenerateVpnConnectionDefaultHealthCheckIpRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "VpnGatewayId" { + request.VpnGatewayId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseVpcClient().GenerateVpnConnectionDefaultHealthCheckIp(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()) + + defaultHealthCheck = response.Response + + return +} From 40f166b11c6000f25a47e608c1c8c5d20c31cee7 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 16:12:41 +0800 Subject: [PATCH 26/31] refactor: migrate package tencentcloud/services/cynosdb --- tencentcloud/provider.go | 100 +- ...tc_cynosdb_account_all_grant_privileges.go | 23 +- ...nosdb_account_all_grant_privileges_test.go | 10 +- .../data_source_tc_cynosdb_accounts.go | 23 +- .../data_source_tc_cynosdb_accounts_test.go | 12 +- .../data_source_tc_cynosdb_audit_logs.go | 23 +- .../data_source_tc_cynosdb_audit_logs_test.go | 10 +- ...a_source_tc_cynosdb_backup_download_url.go | 34 +- ...a_source_tc_cynosdb_backup_download_url.md | 10 + ...rce_tc_cynosdb_backup_download_url_test.go | 10 +- ...a_source_tc_cynosdb_binlog_download_url.go | 23 +- ...rce_tc_cynosdb_binlog_download_url_test.go | 12 +- .../data_source_tc_cynosdb_cluster.go | 23 +- ...rce_tc_cynosdb_cluster_detail_databases.go | 23 +- ...c_cynosdb_cluster_detail_databases_test.go | 10 +- ...urce_tc_cynosdb_cluster_instance_groups.go | 23 +- ...tc_cynosdb_cluster_instance_groups_test.go | 12 +- ...ta_source_tc_cynosdb_cluster_param_logs.go | 23 +- ...urce_tc_cynosdb_cluster_param_logs_test.go | 10 +- .../data_source_tc_cynosdb_cluster_params.go | 23 +- ...a_source_tc_cynosdb_cluster_params_test.go | 12 +- .../data_source_tc_cynosdb_cluster_test.go | 10 +- .../data_source_tc_cynosdb_clusters.go | 21 +- .../data_source_tc_cynosdb_clusters_test.go | 10 +- ...tc_cynosdb_describe_instance_error_logs.go | 23 +- ...nosdb_describe_instance_error_logs_test.go | 10 +- ..._cynosdb_describe_instance_slow_queries.go | 23 +- ...sdb_describe_instance_slow_queries_test.go | 12 +- ...source_tc_cynosdb_instance_slow_queries.go | 23 +- ...e_tc_cynosdb_instance_slow_queries_test.go | 12 +- .../data_source_tc_cynosdb_instances.go | 21 +- .../data_source_tc_cynosdb_instances_test.go | 10 +- .../data_source_tc_cynosdb_param_templates.go | 23 +- ..._source_tc_cynosdb_param_templates_test.go | 10 +- ...urce_tc_cynosdb_project_security_groups.go | 23 +- ...tc_cynosdb_project_security_groups_test.go | 10 +- .../data_source_tc_cynosdb_proxy_node.go | 23 +- .../data_source_tc_cynosdb_proxy_node_test.go | 10 +- .../data_source_tc_cynosdb_proxy_version.go | 23 +- ...ta_source_tc_cynosdb_proxy_version_test.go | 10 +- ...source_tc_cynosdb_resource_package_list.go | 23 +- ...e_tc_cynosdb_resource_package_list_test.go | 12 +- ..._tc_cynosdb_resource_package_sale_specs.go | 23 +- ...ynosdb_resource_package_sale_specs_test.go | 10 +- ...a_source_tc_cynosdb_rollback_time_range.go | 23 +- ...rce_tc_cynosdb_rollback_time_range_test.go | 10 +- .../cynosdb}/data_source_tc_cynosdb_zone.go | 23 +- .../data_source_tc_cynosdb_zone_config.go | 18 +- ...data_source_tc_cynosdb_zone_config_test.go | 10 +- .../data_source_tc_cynosdb_zone_test.go | 10 +- .../cynosdb}/extension_cynosdb.go | 10 +- .../services/cynosdb/extension_mysql.go | 129 + .../services/cynosdb/extension_postgresql.go | 57 + .../services/cynosdb/extension_tags.go | 3 + .../cynosdb}/resource_tc_cynosdb_account.go | 79 +- .../resource_tc_cynosdb_account_privileges.go | 43 +- ...urce_tc_cynosdb_account_privileges_test.go | 10 +- .../resource_tc_cynosdb_account_test.go | 38 +- .../resource_tc_cynosdb_audit_log_file.go | 51 +- ...resource_tc_cynosdb_audit_log_file_test.go | 32 +- .../resource_tc_cynosdb_binlog_save_days.go | 37 +- ...source_tc_cynosdb_binlog_save_days_test.go | 12 +- .../cynosdb}/resource_tc_cynosdb_cluster.go | 67 +- .../resource_tc_cynosdb_cluster_databases.go | 59 +- ...ource_tc_cynosdb_cluster_databases_test.go | 38 +- ..._tc_cynosdb_cluster_password_complexity.go | 65 +- ...ynosdb_cluster_password_complexity_test.go | 34 +- ...db_cluster_resource_packages_attachment.go | 39 +- ...uster_resource_packages_attachment_test.go | 8 +- .../resource_tc_cynosdb_cluster_slave_zone.go | 67 +- ...urce_tc_cynosdb_cluster_slave_zone_test.go | 10 +- .../resource_tc_cynosdb_cluster_test.go | 45 +- ...e_tc_cynosdb_export_instance_error_logs.go | 27 +- ...cynosdb_export_instance_error_logs_test.go | 10 +- ...tc_cynosdb_export_instance_slow_queries.go | 27 +- ...nosdb_export_instance_slow_queries_test.go | 10 +- .../resource_tc_cynosdb_instance_param.go | 49 +- ...resource_tc_cynosdb_instance_param_test.go | 12 +- .../resource_tc_cynosdb_isolate_instance.go | 46 +- ...source_tc_cynosdb_isolate_instance_test.go | 12 +- .../resource_tc_cynosdb_param_template.go | 51 +- ...resource_tc_cynosdb_param_template_test.go | 30 +- .../cynosdb}/resource_tc_cynosdb_proxy.go | 87 +- .../resource_tc_cynosdb_proxy_end_point.go | 103 +- ...esource_tc_cynosdb_proxy_end_point_test.go | 30 +- .../resource_tc_cynosdb_proxy_test.go | 26 +- ...sdb_read_only_instance_exclusive_access.go | 33 +- ...ead_only_instance_exclusive_access_test.go | 10 +- .../resource_tc_cynosdb_readonly_instance.go | 49 +- ...ource_tc_cynosdb_readonly_instance_test.go | 30 +- .../resource_tc_cynosdb_reload_proxy_node.go | 33 +- ...ource_tc_cynosdb_reload_proxy_node_test.go | 8 +- .../resource_tc_cynosdb_resource_package.go | 76 +- .../resource_tc_cynosdb_resource_package.md | 24 + ...source_tc_cynosdb_resource_package_test.go | 8 +- .../resource_tc_cynosdb_restart_instance.go | 39 +- ...source_tc_cynosdb_restart_instance_test.go | 10 +- .../resource_tc_cynosdb_roll_back_cluster.go | 33 +- ...ource_tc_cynosdb_roll_back_cluster_test.go | 10 +- .../resource_tc_cynosdb_security_group.go | 73 +- ...resource_tc_cynosdb_security_group_test.go | 32 +- ...source_tc_cynosdb_upgrade_proxy_version.go | 55 +- ...e_tc_cynosdb_upgrade_proxy_version_test.go | 8 +- .../cynosdb}/resource_tc_cynosdb_wan.go | 57 +- .../cynosdb}/resource_tc_cynosdb_wan_test.go | 34 +- .../cynosdb}/service_tencentcloud_cynosdb.go | 287 +- .../cynosdb/service_tencentcloud_mysql.go | 3318 +++++++++++++++++ .../cynosdb/service_tencentcloud_tag.go | 415 +++ 108 files changed, 5586 insertions(+), 1427 deletions(-) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_account_all_grant_privileges.go (89%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_account_all_grant_privileges_test.go (81%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_accounts.go (84%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_accounts_test.go (63%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_audit_logs.go (93%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_audit_logs_test.go (76%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_backup_download_url.go (70%) create mode 100644 tencentcloud/services/cynosdb/data_source_tc_cynosdb_backup_download_url.md rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_backup_download_url_test.go (70%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_binlog_download_url.go (72%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_binlog_download_url_test.go (75%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_cluster.go (82%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_cluster_detail_databases.go (90%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_cluster_detail_databases_test.go (69%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_cluster_instance_groups.go (96%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_cluster_instance_groups_test.go (63%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_cluster_param_logs.go (87%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_cluster_param_logs_test.go (72%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_cluster_params.go (88%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_cluster_params_test.go (64%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_cluster_test.go (71%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_clusters.go (90%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_clusters_test.go (88%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_describe_instance_error_logs.go (86%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_describe_instance_error_logs_test.go (74%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_describe_instance_slow_queries.go (83%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_describe_instance_slow_queries_test.go (66%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_instance_slow_queries.go (90%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_instance_slow_queries_test.go (90%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_instances.go (88%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_instances_test.go (85%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_param_templates.go (93%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_param_templates_test.go (70%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_project_security_groups.go (92%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_project_security_groups_test.go (85%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_proxy_node.go (90%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_proxy_node_test.go (74%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_proxy_version.go (78%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_proxy_version_test.go (68%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_resource_package_list.go (93%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_resource_package_list_test.go (87%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_resource_package_sale_specs.go (88%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_resource_package_sale_specs_test.go (74%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_rollback_time_range.go (81%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_rollback_time_range_test.go (78%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_zone.go (91%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_zone_config.go (85%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_zone_config_test.go (84%) rename tencentcloud/{ => services/cynosdb}/data_source_tc_cynosdb_zone_test.go (90%) rename tencentcloud/{ => services/cynosdb}/extension_cynosdb.go (97%) create mode 100644 tencentcloud/services/cynosdb/extension_mysql.go create mode 100644 tencentcloud/services/cynosdb/extension_postgresql.go create mode 100644 tencentcloud/services/cynosdb/extension_tags.go rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_account.go (74%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_account_privileges.go (85%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_account_privileges_test.go (95%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_account_test.go (76%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_audit_log_file.go (86%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_audit_log_file_test.go (66%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_binlog_save_days.go (69%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_binlog_save_days_test.go (82%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_cluster.go (90%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_cluster_databases.go (81%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_cluster_databases_test.go (80%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_cluster_password_complexity.go (81%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_cluster_password_complexity_test.go (83%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_cluster_resource_packages_attachment.go (73%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_cluster_resource_packages_attachment_test.go (83%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_cluster_slave_zone.go (69%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_cluster_slave_zone_test.go (91%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_cluster_test.go (91%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_export_instance_error_logs.go (85%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_export_instance_error_logs_test.go (84%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_export_instance_slow_queries.go (80%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_export_instance_slow_queries_test.go (78%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_instance_param.go (79%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_instance_param_test.go (83%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_isolate_instance.go (70%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_isolate_instance_test.go (78%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_param_template.go (83%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_param_template_test.go (95%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_proxy.go (83%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_proxy_end_point.go (87%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_proxy_end_point_test.go (82%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_proxy_test.go (84%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_read_only_instance_exclusive_access.go (76%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_read_only_instance_exclusive_access_test.go (85%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_readonly_instance.go (82%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_readonly_instance_test.go (87%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_reload_proxy_node.go (72%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_reload_proxy_node_test.go (82%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_resource_package.go (77%) create mode 100644 tencentcloud/services/cynosdb/resource_tc_cynosdb_resource_package.md rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_resource_package_test.go (83%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_restart_instance.go (70%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_restart_instance_test.go (78%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_roll_back_cluster.go (86%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_roll_back_cluster_test.go (83%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_security_group.go (76%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_security_group_test.go (75%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_upgrade_proxy_version.go (69%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_upgrade_proxy_version_test.go (85%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_wan.go (74%) rename tencentcloud/{ => services/cynosdb}/resource_tc_cynosdb_wan_test.go (72%) rename tencentcloud/{ => services/cynosdb}/service_tencentcloud_cynosdb.go (92%) create mode 100644 tencentcloud/services/cynosdb/service_tencentcloud_mysql.go create mode 100644 tencentcloud/services/cynosdb/service_tencentcloud_tag.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 4d925dd4a8..f08871fcb2 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -10,6 +10,8 @@ import ( "strconv" "strings" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cynosdb" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cwp" @@ -532,10 +534,10 @@ func Provider() *schema.Provider { "tencentcloud_audit_cos_regions": dataSourceTencentCloudAuditCosRegions(), "tencentcloud_audit_key_alias": dataSourceTencentCloudAuditKeyAlias(), "tencentcloud_audits": dataSourceTencentCloudAudits(), - "tencentcloud_cynosdb_clusters": dataSourceTencentCloudCynosdbClusters(), - "tencentcloud_cynosdb_instances": dataSourceTencentCloudCynosdbInstances(), - "tencentcloud_cynosdb_zone_config": dataSourceTencentCynosdbZoneConfig(), - "tencentcloud_cynosdb_instance_slow_queries": dataSourceTencentCloudCynosdbInstanceSlowQueries(), + "tencentcloud_cynosdb_clusters": cynosdb.DataSourceTencentCloudCynosdbClusters(), + "tencentcloud_cynosdb_instances": cynosdb.DataSourceTencentCloudCynosdbInstances(), + "tencentcloud_cynosdb_zone_config": cynosdb.DataSourceTencentCloudCynosdbZoneConfig(), + "tencentcloud_cynosdb_instance_slow_queries": cynosdb.DataSourceTencentCloudCynosdbInstanceSlowQueries(), "tencentcloud_vod_adaptive_dynamic_streaming_templates": dataSourceTencentCloudVodAdaptiveDynamicStreamingTemplates(), "tencentcloud_vod_image_sprite_templates": dataSourceTencentCloudVodImageSpriteTemplates(), "tencentcloud_vod_procedure_templates": dataSourceTencentCloudVodProcedureTemplates(), @@ -744,27 +746,27 @@ func Provider() *schema.Provider { "tencentcloud_as_advices": dataSourceTencentCloudAsAdvices(), "tencentcloud_as_limits": dataSourceTencentCloudAsLimits(), "tencentcloud_as_last_activity": dataSourceTencentCloudAsLastActivity(), - "tencentcloud_cynosdb_accounts": dataSourceTencentCloudCynosdbAccounts(), - "tencentcloud_cynosdb_cluster_instance_groups": dataSourceTencentCloudCynosdbClusterInstanceGroups(), - "tencentcloud_cynosdb_cluster_params": dataSourceTencentCloudCynosdbClusterParams(), - "tencentcloud_cynosdb_param_templates": dataSourceTencentCloudCynosdbParamTemplates(), - "tencentcloud_cynosdb_zone": dataSourceTencentCloudCynosdbZone(), + "tencentcloud_cynosdb_accounts": cynosdb.DataSourceTencentCloudCynosdbAccounts(), + "tencentcloud_cynosdb_cluster_instance_groups": cynosdb.DataSourceTencentCloudCynosdbClusterInstanceGroups(), + "tencentcloud_cynosdb_cluster_params": cynosdb.DataSourceTencentCloudCynosdbClusterParams(), + "tencentcloud_cynosdb_param_templates": cynosdb.DataSourceTencentCloudCynosdbParamTemplates(), + "tencentcloud_cynosdb_zone": cynosdb.DataSourceTencentCloudCynosdbZone(), "tencentcloud_cvm_instances_modification": cvm.DataSourceTencentCloudCvmInstancesModification(), - "tencentcloud_cynosdb_audit_logs": dataSourceTencentCloudCynosdbAuditLogs(), - "tencentcloud_cynosdb_backup_download_url": dataSourceTencentCloudCynosdbBackupDownloadUrl(), - "tencentcloud_cynosdb_binlog_download_url": dataSourceTencentCloudCynosdbBinlogDownloadUrl(), - "tencentcloud_cynosdb_cluster_detail_databases": dataSourceTencentCloudCynosdbClusterDetailDatabases(), - "tencentcloud_cynosdb_cluster_param_logs": dataSourceTencentCloudCynosdbClusterParamLogs(), - "tencentcloud_cynosdb_cluster": dataSourceTencentCloudCynosdbCluster(), - "tencentcloud_cynosdb_describe_instance_slow_queries": dataSourceTencentCloudCynosdbDescribeInstanceSlowQueries(), - "tencentcloud_cynosdb_describe_instance_error_logs": dataSourceTencentCloudCynosdbDescribeInstanceErrorLogs(), - "tencentcloud_cynosdb_account_all_grant_privileges": dataSourceTencentCloudCynosdbAccountAllGrantPrivileges(), - "tencentcloud_cynosdb_resource_package_list": dataSourceTencentCloudCynosdbResourcePackageList(), - "tencentcloud_cynosdb_project_security_groups": dataSourceTencentCloudCynosdbProjectSecurityGroups(), - "tencentcloud_cynosdb_resource_package_sale_specs": dataSourceTencentCloudCynosdbResourcePackageSaleSpecs(), - "tencentcloud_cynosdb_rollback_time_range": dataSourceTencentCloudCynosdbRollbackTimeRange(), - "tencentcloud_cynosdb_proxy_node": dataSourceTencentCloudCynosdbProxyNode(), - "tencentcloud_cynosdb_proxy_version": dataSourceTencentCloudCynosdbProxyVersion(), + "tencentcloud_cynosdb_audit_logs": cynosdb.DataSourceTencentCloudCynosdbAuditLogs(), + "tencentcloud_cynosdb_backup_download_url": cynosdb.DataSourceTencentCloudCynosdbBackupDownloadUrl(), + "tencentcloud_cynosdb_binlog_download_url": cynosdb.DataSourceTencentCloudCynosdbBinlogDownloadUrl(), + "tencentcloud_cynosdb_cluster_detail_databases": cynosdb.DataSourceTencentCloudCynosdbClusterDetailDatabases(), + "tencentcloud_cynosdb_cluster_param_logs": cynosdb.DataSourceTencentCloudCynosdbClusterParamLogs(), + "tencentcloud_cynosdb_cluster": cynosdb.DataSourceTencentCloudCynosdbCluster(), + "tencentcloud_cynosdb_describe_instance_slow_queries": cynosdb.DataSourceTencentCloudCynosdbDescribeInstanceSlowQueries(), + "tencentcloud_cynosdb_describe_instance_error_logs": cynosdb.DataSourceTencentCloudCynosdbDescribeInstanceErrorLogs(), + "tencentcloud_cynosdb_account_all_grant_privileges": cynosdb.DataSourceTencentCloudCynosdbAccountAllGrantPrivileges(), + "tencentcloud_cynosdb_resource_package_list": cynosdb.DataSourceTencentCloudCynosdbResourcePackageList(), + "tencentcloud_cynosdb_project_security_groups": cynosdb.DataSourceTencentCloudCynosdbProjectSecurityGroups(), + "tencentcloud_cynosdb_resource_package_sale_specs": cynosdb.DataSourceTencentCloudCynosdbResourcePackageSaleSpecs(), + "tencentcloud_cynosdb_rollback_time_range": cynosdb.DataSourceTencentCloudCynosdbRollbackTimeRange(), + "tencentcloud_cynosdb_proxy_node": cynosdb.DataSourceTencentCloudCynosdbProxyNode(), + "tencentcloud_cynosdb_proxy_version": cynosdb.DataSourceTencentCloudCynosdbProxyVersion(), "tencentcloud_css_domains": css.DataSourceTencentCloudCssDomains(), "tencentcloud_css_backup_stream": css.DataSourceTencentCloudCssBackupStream(), "tencentcloud_css_deliver_log_down_list": css.DataSourceTencentCloudCssDeliverLogDownList(), @@ -1329,29 +1331,29 @@ func Provider() *schema.Provider { "tencentcloud_audit": resourceTencentCloudAudit(), "tencentcloud_audit_track": resourceTencentCloudAuditTrack(), "tencentcloud_image": cvm.ResourceTencentCloudImage(), - "tencentcloud_cynosdb_proxy": resourceTencentCloudCynosdbProxy(), - "tencentcloud_cynosdb_reload_proxy_node": resourceTencentCloudCynosdbReloadProxyNode(), - "tencentcloud_cynosdb_cluster_resource_packages_attachment": resourceTencentCloudCynosdbClusterResourcePackagesAttachment(), - "tencentcloud_cynosdb_cluster": resourceTencentCloudCynosdbCluster(), - "tencentcloud_cynosdb_readonly_instance": resourceTencentCloudCynosdbReadonlyInstance(), - "tencentcloud_cynosdb_cluster_password_complexity": resourceTencentCloudCynosdbClusterPasswordComplexity(), - "tencentcloud_cynosdb_export_instance_error_logs": resourceTencentCloudCynosdbExportInstanceErrorLogs(), - "tencentcloud_cynosdb_export_instance_slow_queries": resourceTencentCloudCynosdbExportInstanceSlowQueries(), - "tencentcloud_cynosdb_account_privileges": resourceTencentCloudCynosdbAccountPrivileges(), - "tencentcloud_cynosdb_account": resourceTencentCloudCynosdbAccount(), - "tencentcloud_cynosdb_binlog_save_days": resourceTencentCloudCynosdbBinlogSaveDays(), - "tencentcloud_cynosdb_cluster_databases": resourceTencentCloudCynosdbClusterDatabases(), - "tencentcloud_cynosdb_instance_param": resourceTencentCloudCynosdbInstanceParam(), - "tencentcloud_cynosdb_isolate_instance": resourceTencentCloudCynosdbIsolateInstance(), - "tencentcloud_cynosdb_param_template": resourceTencentCloudCynosdbParamTemplate(), - "tencentcloud_cynosdb_resource_package": resourceTencentCloudCynosdbResourcePackage(), - "tencentcloud_cynosdb_restart_instance": resourceTencentCloudCynosdbRestartInstance(), - "tencentcloud_cynosdb_roll_back_cluster": resourceTencentCloudCynosdbRollBackCluster(), - "tencentcloud_cynosdb_wan": resourceTencentCloudCynosdbWan(), - "tencentcloud_cynosdb_cluster_slave_zone": resourceTencentCloudCynosdbClusterSlaveZone(), - "tencentcloud_cynosdb_read_only_instance_exclusive_access": resourceTencentCloudCynosdbReadOnlyInstanceExclusiveAccess(), - "tencentcloud_cynosdb_proxy_end_point": resourceTencentCloudCynosdbProxyEndPoint(), - "tencentcloud_cynosdb_upgrade_proxy_version": resourceTencentCloudCynosdbUpgradeProxyVersion(), + "tencentcloud_cynosdb_proxy": cynosdb.ResourceTencentCloudCynosdbProxy(), + "tencentcloud_cynosdb_reload_proxy_node": cynosdb.ResourceTencentCloudCynosdbReloadProxyNode(), + "tencentcloud_cynosdb_cluster_resource_packages_attachment": cynosdb.ResourceTencentCloudCynosdbClusterResourcePackagesAttachment(), + "tencentcloud_cynosdb_cluster": cynosdb.ResourceTencentCloudCynosdbCluster(), + "tencentcloud_cynosdb_readonly_instance": cynosdb.ResourceTencentCloudCynosdbReadonlyInstance(), + "tencentcloud_cynosdb_cluster_password_complexity": cynosdb.ResourceTencentCloudCynosdbClusterPasswordComplexity(), + "tencentcloud_cynosdb_export_instance_error_logs": cynosdb.ResourceTencentCloudCynosdbExportInstanceErrorLogs(), + "tencentcloud_cynosdb_export_instance_slow_queries": cynosdb.ResourceTencentCloudCynosdbExportInstanceSlowQueries(), + "tencentcloud_cynosdb_account_privileges": cynosdb.ResourceTencentCloudCynosdbAccountPrivileges(), + "tencentcloud_cynosdb_account": cynosdb.ResourceTencentCloudCynosdbAccount(), + "tencentcloud_cynosdb_binlog_save_days": cynosdb.ResourceTencentCloudCynosdbBinlogSaveDays(), + "tencentcloud_cynosdb_cluster_databases": cynosdb.ResourceTencentCloudCynosdbClusterDatabases(), + "tencentcloud_cynosdb_instance_param": cynosdb.ResourceTencentCloudCynosdbInstanceParam(), + "tencentcloud_cynosdb_isolate_instance": cynosdb.ResourceTencentCloudCynosdbIsolateInstance(), + "tencentcloud_cynosdb_param_template": cynosdb.ResourceTencentCloudCynosdbParamTemplate(), + "tencentcloud_cynosdb_resource_package": cynosdb.ResourceTencentCloudCynosdbResourcePackage(), + "tencentcloud_cynosdb_restart_instance": cynosdb.ResourceTencentCloudCynosdbRestartInstance(), + "tencentcloud_cynosdb_roll_back_cluster": cynosdb.ResourceTencentCloudCynosdbRollBackCluster(), + "tencentcloud_cynosdb_wan": cynosdb.ResourceTencentCloudCynosdbWan(), + "tencentcloud_cynosdb_cluster_slave_zone": cynosdb.ResourceTencentCloudCynosdbClusterSlaveZone(), + "tencentcloud_cynosdb_read_only_instance_exclusive_access": cynosdb.ResourceTencentCloudCynosdbReadOnlyInstanceExclusiveAccess(), + "tencentcloud_cynosdb_proxy_end_point": cynosdb.ResourceTencentCloudCynosdbProxyEndPoint(), + "tencentcloud_cynosdb_upgrade_proxy_version": cynosdb.ResourceTencentCloudCynosdbUpgradeProxyVersion(), "tencentcloud_vod_adaptive_dynamic_streaming_template": resourceTencentCloudVodAdaptiveDynamicStreamingTemplate(), "tencentcloud_vod_image_sprite_template": resourceTencentCloudVodImageSpriteTemplate(), "tencentcloud_vod_procedure_template": resourceTencentCloudVodProcedureTemplate(), @@ -1640,8 +1642,8 @@ func Provider() *schema.Provider { "tencentcloud_ci_media_speech_recognition_template": ci.ResourceTencentCloudCiMediaSpeechRecognitionTemplate(), "tencentcloud_ci_guetzli": ci.ResourceTencentCloudCIGuetzli(), "tencentcloud_ci_original_image_protection": ci.ResourceTencentCloudCIOriginalImageProtection(), - "tencentcloud_cynosdb_audit_log_file": resourceTencentCloudCynosdbAuditLogFile(), - "tencentcloud_cynosdb_security_group": resourceTencentCloudCynosdbSecurityGroup(), + "tencentcloud_cynosdb_audit_log_file": cynosdb.ResourceTencentCloudCynosdbAuditLogFile(), + "tencentcloud_cynosdb_security_group": cynosdb.ResourceTencentCloudCynosdbSecurityGroup(), "tencentcloud_dayu_ddos_ip_attachment_v2": resourceTencentCloudDayuDDosIpAttachmentV2(), "tencentcloud_antiddos_ddos_black_white_ip": resourceTencentCloudAntiddosDdosBlackWhiteIp(), "tencentcloud_antiddos_ddos_geo_ip_block_config": resourceTencentCloudAntiddosDdosGeoIpBlockConfig(), diff --git a/tencentcloud/data_source_tc_cynosdb_account_all_grant_privileges.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_account_all_grant_privileges.go similarity index 89% rename from tencentcloud/data_source_tc_cynosdb_account_all_grant_privileges.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_account_all_grant_privileges.go index edd336c569..221995c3f0 100644 --- a/tencentcloud/data_source_tc_cynosdb_account_all_grant_privileges.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_account_all_grant_privileges.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbAccountAllGrantPrivileges() *schema.Resource { +func DataSourceTencentCloudCynosdbAccountAllGrantPrivileges() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbAccountAllGrantPrivilegesRead, Schema: map[string]*schema.Schema{ @@ -107,13 +110,13 @@ func dataSourceTencentCloudCynosdbAccountAllGrantPrivileges() *schema.Resource { } func dataSourceTencentCloudCynosdbAccountAllGrantPrivilegesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_account_all_grant_privileges.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_account_all_grant_privileges.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} accountAllGrantPrivileges *cynosdb.DescribeAccountAllGrantPrivilegesResponseParams clusterId string ) @@ -135,10 +138,10 @@ func dataSourceTencentCloudCynosdbAccountAllGrantPrivilegesRead(d *schema.Resour paramMap["Account"] = &inputAccount } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbAccountAllGrantPrivilegesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } accountAllGrantPrivileges = result @@ -202,7 +205,7 @@ func dataSourceTencentCloudCynosdbAccountAllGrantPrivilegesRead(d *schema.Resour d.SetId(clusterId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_account_all_grant_privileges_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_account_all_grant_privileges_test.go similarity index 81% rename from tencentcloud/data_source_tc_cynosdb_account_all_grant_privileges_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_account_all_grant_privileges_test.go index 1a7d19fcfa..43defa4f45 100644 --- a/tencentcloud/data_source_tc_cynosdb_account_all_grant_privileges_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_account_all_grant_privileges_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCynosdbAccountAllGrantPrivilegesDataSource_basic(t *test t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbAccountAllGrantPrivilegesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_account_all_grant_privileges.account_all_grant_privileges"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_account_all_grant_privileges.account_all_grant_privileges"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_account_all_grant_privileges.account_all_grant_privileges", "database_privileges.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_account_all_grant_privileges.account_all_grant_privileges", "global_privileges.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_account_all_grant_privileges.account_all_grant_privileges", "privilege_statements.#"), diff --git a/tencentcloud/data_source_tc_cynosdb_accounts.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_accounts.go similarity index 84% rename from tencentcloud/data_source_tc_cynosdb_accounts.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_accounts.go index d44403317d..4a4611fa44 100644 --- a/tencentcloud/data_source_tc_cynosdb_accounts.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_accounts.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbAccounts() *schema.Resource { +func DataSourceTencentCloudCynosdbAccounts() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbAccountsRead, Schema: map[string]*schema.Schema{ @@ -87,11 +90,11 @@ func dataSourceTencentCloudCynosdbAccounts() *schema.Resource { } func dataSourceTencentCloudCynosdbAccountsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_accounts.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_accounts.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var clusterId string @@ -110,14 +113,14 @@ func dataSourceTencentCloudCynosdbAccountsRead(d *schema.ResourceData, meta inte paramMap["Hosts"] = helper.InterfacesStringsPoint(hostsSet) } - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var accountSet []*cynosdb.Account - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeCynosdbAccountsByFilter(ctx, clusterId, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } accountSet = response.AccountSet return nil @@ -144,7 +147,7 @@ func dataSourceTencentCloudCynosdbAccountsRead(d *schema.ResourceData, meta inte _ = d.Set("account_set", tmpList) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_accounts_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_accounts_test.go similarity index 63% rename from tencentcloud/data_source_tc_cynosdb_accounts_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_accounts_test.go index 49f1d1ae6b..195cd206ca 100644 --- a/tencentcloud/data_source_tc_cynosdb_accounts_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_accounts_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,14 +12,14 @@ func TestAccTencentCloudCynosdbAccountsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbAccountsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_accounts.accounts"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_accounts.accounts"), resource.TestCheckResourceAttr("data.tencentcloud_cynosdb_accounts.accounts", "account_set.#", "1"), ), }, @@ -25,7 +27,7 @@ func TestAccTencentCloudCynosdbAccountsDataSource_basic(t *testing.T) { }) } -const testAccCynosdbAccountsDataSource = CommonCynosdb + ` +const testAccCynosdbAccountsDataSource = tcacctest.CommonCynosdb + ` data "tencentcloud_cynosdb_accounts" "accounts" { cluster_id = var.cynosdb_cluster_id diff --git a/tencentcloud/data_source_tc_cynosdb_audit_logs.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_audit_logs.go similarity index 93% rename from tencentcloud/data_source_tc_cynosdb_audit_logs.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_audit_logs.go index 64cd2c0812..18e0a1a408 100644 --- a/tencentcloud/data_source_tc_cynosdb_audit_logs.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_audit_logs.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbAuditLogs() *schema.Resource { +func DataSourceTencentCloudCynosdbAuditLogs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbAuditLogsRead, Schema: map[string]*schema.Schema{ @@ -210,13 +213,13 @@ func dataSourceTencentCloudCynosdbAuditLogs() *schema.Resource { } func dataSourceTencentCloudCynosdbAuditLogsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_audit_logs.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_audit_logs.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} items []*cynosdb.AuditLog instanceId string ) @@ -295,10 +298,10 @@ func dataSourceTencentCloudCynosdbAuditLogsRead(d *schema.ResourceData, meta int paramMap["filter"] = &auditLogFilter } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbAuditLogsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } items = result @@ -380,7 +383,7 @@ func dataSourceTencentCloudCynosdbAuditLogsRead(d *schema.ResourceData, meta int d.SetId(instanceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_audit_logs_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_audit_logs_test.go similarity index 76% rename from tencentcloud/data_source_tc_cynosdb_audit_logs_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_audit_logs_test.go index 1fca37bdba..170b0c7abe 100644 --- a/tencentcloud/data_source_tc_cynosdb_audit_logs_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_audit_logs_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCynosdbAuditLogsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbAuditLogsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_audit_logs.audit_logs"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_audit_logs.audit_logs"), ), }, }, diff --git a/tencentcloud/data_source_tc_cynosdb_backup_download_url.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_backup_download_url.go similarity index 70% rename from tencentcloud/data_source_tc_cynosdb_backup_download_url.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_backup_download_url.go index a325369f97..3eb8efd5d3 100644 --- a/tencentcloud/data_source_tc_cynosdb_backup_download_url.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_backup_download_url.go @@ -1,16 +1,4 @@ -/* -Use this data source to query detailed information of cynosdb backup_download_url - -Example Usage - -```hcl -data "tencentcloud_cynosdb_backup_download_url" "backup_download_url" { - cluster_id = "cynosdbmysql-bws8h88b" - backup_id = 480782 -} -``` -*/ -package tencentcloud +package cynosdb import ( "context" @@ -18,10 +6,12 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbBackupDownloadUrl() *schema.Resource { +func DataSourceTencentCloudCynosdbBackupDownloadUrl() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbBackupDownloadUrlRead, Schema: map[string]*schema.Schema{ @@ -50,13 +40,13 @@ func dataSourceTencentCloudCynosdbBackupDownloadUrl() *schema.Resource { } func dataSourceTencentCloudCynosdbBackupDownloadUrlRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_backup_download_url.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_backup_download_url.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} downloadUrl *cynosdb.DescribeBackupDownloadUrlResponseParams clusterId string ) @@ -71,10 +61,10 @@ func dataSourceTencentCloudCynosdbBackupDownloadUrlRead(d *schema.ResourceData, paramMap["BackupId"] = helper.IntInt64(v.(int)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbBackupDownloadUrlById(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } downloadUrl = result @@ -92,7 +82,7 @@ func dataSourceTencentCloudCynosdbBackupDownloadUrlRead(d *schema.ResourceData, d.SetId(clusterId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/services/cynosdb/data_source_tc_cynosdb_backup_download_url.md b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_backup_download_url.md new file mode 100644 index 0000000000..5bea6c070a --- /dev/null +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_backup_download_url.md @@ -0,0 +1,10 @@ +Use this data source to query detailed information of cynosdb backup_download_url + +Example Usage + +```hcl +data "tencentcloud_cynosdb_backup_download_url" "backup_download_url" { + cluster_id = "cynosdbmysql-bws8h88b" + backup_id = 480782 +} +``` diff --git a/tencentcloud/data_source_tc_cynosdb_backup_download_url_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_backup_download_url_test.go similarity index 70% rename from tencentcloud/data_source_tc_cynosdb_backup_download_url_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_backup_download_url_test.go index 0327673d24..465f159571 100644 --- a/tencentcloud/data_source_tc_cynosdb_backup_download_url_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_backup_download_url_test.go @@ -1,9 +1,11 @@ -package tencentcloud +package cynosdb_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) // go test -i; go test -test.run TestAccTencentCloudNeedFixCynosdbBackupDownloadUrlDataSource_basic -v @@ -11,14 +13,14 @@ func TestAccTencentCloudNeedFixCynosdbBackupDownloadUrlDataSource_basic(t *testi t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbBackupDownloadUrlDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_backup_download_url.backup_download_url"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_backup_download_url.backup_download_url"), ), }, }, diff --git a/tencentcloud/data_source_tc_cynosdb_binlog_download_url.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_binlog_download_url.go similarity index 72% rename from tencentcloud/data_source_tc_cynosdb_binlog_download_url.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_binlog_download_url.go index a9cb980b60..13b774803d 100644 --- a/tencentcloud/data_source_tc_cynosdb_binlog_download_url.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_binlog_download_url.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbBinlogDownloadUrl() *schema.Resource { +func DataSourceTencentCloudCynosdbBinlogDownloadUrl() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbBinlogDownloadUrlRead, Schema: map[string]*schema.Schema{ @@ -38,13 +41,13 @@ func dataSourceTencentCloudCynosdbBinlogDownloadUrl() *schema.Resource { } func dataSourceTencentCloudCynosdbBinlogDownloadUrlRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_binlog_download_url.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_binlog_download_url.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} downloadUrl *cynosdb.DescribeBinlogDownloadUrlResponseParams clusterId string ) @@ -59,10 +62,10 @@ func dataSourceTencentCloudCynosdbBinlogDownloadUrlRead(d *schema.ResourceData, paramMap["BinlogId"] = helper.IntInt64(v.(int)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbBinlogDownloadUrlByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } downloadUrl = result @@ -80,7 +83,7 @@ func dataSourceTencentCloudCynosdbBinlogDownloadUrlRead(d *schema.ResourceData, d.SetId(clusterId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_binlog_download_url_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_binlog_download_url_test.go similarity index 75% rename from tencentcloud/data_source_tc_cynosdb_binlog_download_url_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_binlog_download_url_test.go index f138a456e4..729e2f6c8c 100644 --- a/tencentcloud/data_source_tc_cynosdb_binlog_download_url_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_binlog_download_url_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package cynosdb_test import ( "fmt" "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -16,21 +18,21 @@ func TestAccTencentCloudCynosdbBinlogDownloadUrlDataSource_basic(t *testing.T) { endTime := time.Now().In(loc).Format("2006-01-02 15:04:05") resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: fmt.Sprintf(testAccCynosdbBinlogDownloadUrlDataSource, startTime, endTime), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_binlog_download_url.binlog_download_url"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_binlog_download_url.binlog_download_url"), ), }, }, }) } -const testAccCynosdbBinlogDownloadUrlDataSource = CommonCynosdb + ` +const testAccCynosdbBinlogDownloadUrlDataSource = tcacctest.CommonCynosdb + ` data "tencentcloud_cynosdb_describe_instance_slow_queries" "describe_instance_slow_queries" { cluster_id = var.cynosdb_cluster_id start_time = "%s" diff --git a/tencentcloud/data_source_tc_cynosdb_cluster.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster.go similarity index 82% rename from tencentcloud/data_source_tc_cynosdb_cluster.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster.go index aaedf92f6d..f4a87be2b3 100644 --- a/tencentcloud/data_source_tc_cynosdb_cluster.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbCluster() *schema.Resource { +func DataSourceTencentCloudCynosdbCluster() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbClusterRead, Schema: map[string]*schema.Schema{ @@ -63,13 +66,13 @@ func dataSourceTencentCloudCynosdbCluster() *schema.Resource { } func dataSourceTencentCloudCynosdbClusterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_cluster.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_cluster.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} tables []*cynosdb.DatabaseTables clusterId string ) @@ -92,10 +95,10 @@ func dataSourceTencentCloudCynosdbClusterRead(d *schema.ResourceData, meta inter paramMap["TableType"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbClusterByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } tables = result @@ -129,7 +132,7 @@ func dataSourceTencentCloudCynosdbClusterRead(d *schema.ResourceData, meta inter d.SetId(clusterId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_cluster_detail_databases.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_detail_databases.go similarity index 90% rename from tencentcloud/data_source_tc_cynosdb_cluster_detail_databases.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_detail_databases.go index 110bfcf971..9910e9b7ed 100644 --- a/tencentcloud/data_source_tc_cynosdb_cluster_detail_databases.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_detail_databases.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbClusterDetailDatabases() *schema.Resource { +func DataSourceTencentCloudCynosdbClusterDetailDatabases() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbClusterDetailDatabasesRead, Schema: map[string]*schema.Schema{ @@ -121,13 +124,13 @@ func dataSourceTencentCloudCynosdbClusterDetailDatabases() *schema.Resource { } func dataSourceTencentCloudCynosdbClusterDetailDatabasesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_cluster_detail_databases.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_cluster_detail_databases.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} dbInfos []*cynosdb.DbInfo clusterId string ) @@ -142,10 +145,10 @@ func dataSourceTencentCloudCynosdbClusterDetailDatabasesRead(d *schema.ResourceD paramMap["DbName"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbClusterDetailDatabasesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } dbInfos = result @@ -238,7 +241,7 @@ func dataSourceTencentCloudCynosdbClusterDetailDatabasesRead(d *schema.ResourceD d.SetId(clusterId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_cluster_detail_databases_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_detail_databases_test.go similarity index 69% rename from tencentcloud/data_source_tc_cynosdb_cluster_detail_databases_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_detail_databases_test.go index 6b73aa8283..81fa6c2b72 100644 --- a/tencentcloud/data_source_tc_cynosdb_cluster_detail_databases_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_detail_databases_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCynosdbClusterDetailDatabasesDataSource_basic(t *testing t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbClusterDetailDatabasesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_cluster_detail_databases.cluster_detail_databases"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_cluster_detail_databases.cluster_detail_databases"), ), }, }, diff --git a/tencentcloud/data_source_tc_cynosdb_cluster_instance_groups.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_instance_groups.go similarity index 96% rename from tencentcloud/data_source_tc_cynosdb_cluster_instance_groups.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_instance_groups.go index ff91edbc4b..8cfe0eca9e 100644 --- a/tencentcloud/data_source_tc_cynosdb_cluster_instance_groups.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_instance_groups.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbClusterInstanceGroups() *schema.Resource { +func DataSourceTencentCloudCynosdbClusterInstanceGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbClusterInstanceGroupsRead, Schema: map[string]*schema.Schema{ @@ -396,26 +399,26 @@ func dataSourceTencentCloudCynosdbClusterInstanceGroups() *schema.Resource { } func dataSourceTencentCloudCynosdbClusterInstanceGroupsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_cluster_instance_groups.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_cluster_instance_groups.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var clusterId string if v, ok := d.GetOk("cluster_id"); ok { clusterId = v.(string) } - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceGrpInfoList []*cynosdb.CynosdbInstanceGrp - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClusterInstanceGrps(ctx, clusterId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceGrpInfoList = result.Response.InstanceGrpInfoList return nil @@ -528,7 +531,7 @@ func dataSourceTencentCloudCynosdbClusterInstanceGroupsRead(d *schema.ResourceDa _ = d.Set("instance_grp_info_list", tmpList) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_cluster_instance_groups_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_instance_groups_test.go similarity index 63% rename from tencentcloud/data_source_tc_cynosdb_cluster_instance_groups_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_instance_groups_test.go index f7207308f9..f7cd8955c9 100644 --- a/tencentcloud/data_source_tc_cynosdb_cluster_instance_groups_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_instance_groups_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,14 +12,14 @@ func TestAccTencentCloudCynosdbClusterInstanceGroupsDataSource_basic(t *testing. t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbClusterInstanceGroupsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_cluster_instance_groups.cluster_instance_groups"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_cluster_instance_groups.cluster_instance_groups"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_cluster_instance_groups.cluster_instance_groups", "instance_grp_info_list.#"), ), }, @@ -25,7 +27,7 @@ func TestAccTencentCloudCynosdbClusterInstanceGroupsDataSource_basic(t *testing. }) } -const testAccCynosdbClusterInstanceGroupsDataSource = CommonCynosdb + ` +const testAccCynosdbClusterInstanceGroupsDataSource = tcacctest.CommonCynosdb + ` data "tencentcloud_cynosdb_cluster_instance_groups" "cluster_instance_groups" { cluster_id = var.cynosdb_cluster_id diff --git a/tencentcloud/data_source_tc_cynosdb_cluster_param_logs.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_param_logs.go similarity index 87% rename from tencentcloud/data_source_tc_cynosdb_cluster_param_logs.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_param_logs.go index 19e5de484b..e130b343aa 100644 --- a/tencentcloud/data_source_tc_cynosdb_cluster_param_logs.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_param_logs.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbClusterParamLogs() *schema.Resource { +func DataSourceTencentCloudCynosdbClusterParamLogs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbClusterParamLogsRead, Schema: map[string]*schema.Schema{ @@ -95,13 +98,13 @@ func dataSourceTencentCloudCynosdbClusterParamLogs() *schema.Resource { } func dataSourceTencentCloudCynosdbClusterParamLogsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_cluster_param_logs.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_cluster_param_logs.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterParamLogs []*cynosdb.ClusterParamModifyLog clusterId string ) @@ -125,10 +128,10 @@ func dataSourceTencentCloudCynosdbClusterParamLogsRead(d *schema.ResourceData, m paramMap["OrderByType"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbClusterParamLogsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } clusterParamLogs = result @@ -186,7 +189,7 @@ func dataSourceTencentCloudCynosdbClusterParamLogsRead(d *schema.ResourceData, m d.SetId(clusterId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_cluster_param_logs_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_param_logs_test.go similarity index 72% rename from tencentcloud/data_source_tc_cynosdb_cluster_param_logs_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_param_logs_test.go index 1eaf8cb6cc..960513e005 100644 --- a/tencentcloud/data_source_tc_cynosdb_cluster_param_logs_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_param_logs_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCynosdbClusterParamLogsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbClusterParamLogsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_cluster_param_logs.cluster_param_logs"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_cluster_param_logs.cluster_param_logs"), ), }, }, diff --git a/tencentcloud/data_source_tc_cynosdb_cluster_params.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_params.go similarity index 88% rename from tencentcloud/data_source_tc_cynosdb_cluster_params.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_params.go index 03de083000..106bbc811c 100644 --- a/tencentcloud/data_source_tc_cynosdb_cluster_params.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_params.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbClusterParams() *schema.Resource { +func DataSourceTencentCloudCynosdbClusterParams() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbClusterParamsRead, Schema: map[string]*schema.Schema{ @@ -118,12 +121,12 @@ func dataSourceTencentCloudCynosdbClusterParams() *schema.Resource { } func dataSourceTencentCloudCynosdbClusterParamsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_cluster_params.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_cluster_params.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var clusterId string paramMap := make(map[string]interface{}) @@ -135,14 +138,14 @@ func dataSourceTencentCloudCynosdbClusterParamsRead(d *schema.ResourceData, meta paramMap["param_name"] = v.(string) } - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var items []*cynosdb.ParamInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeClusterParamsByFilter(ctx, clusterId, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } items = result return nil @@ -182,7 +185,7 @@ func dataSourceTencentCloudCynosdbClusterParamsRead(d *schema.ResourceData, meta _ = d.Set("items", tmpList) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_cluster_params_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_params_test.go similarity index 64% rename from tencentcloud/data_source_tc_cynosdb_cluster_params_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_params_test.go index f1e915ecd8..fd697b5164 100644 --- a/tencentcloud/data_source_tc_cynosdb_cluster_params_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_params_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,14 +12,14 @@ func TestAccTencentCloudCynosdbClusterParamsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbClusterParamsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_cluster_params.cluster_params"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_cluster_params.cluster_params"), resource.TestCheckResourceAttr("data.tencentcloud_cynosdb_cluster_params.cluster_params", "items.#", "1"), ), }, @@ -25,7 +27,7 @@ func TestAccTencentCloudCynosdbClusterParamsDataSource_basic(t *testing.T) { }) } -const testAccCynosdbClusterParamsDataSource = CommonCynosdb + ` +const testAccCynosdbClusterParamsDataSource = tcacctest.CommonCynosdb + ` data "tencentcloud_cynosdb_cluster_params" "cluster_params" { cluster_id = var.cynosdb_cluster_id param_name = "innodb_checksum_algorithm" diff --git a/tencentcloud/data_source_tc_cynosdb_cluster_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_test.go similarity index 71% rename from tencentcloud/data_source_tc_cynosdb_cluster_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_test.go index fcf8da40de..e81eb36d52 100644 --- a/tencentcloud/data_source_tc_cynosdb_cluster_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_cluster_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCynosdbClusterDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbClusterDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_cluster.cluster"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_cluster.cluster"), ), }, }, diff --git a/tencentcloud/data_source_tc_cynosdb_clusters.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_clusters.go similarity index 90% rename from tencentcloud/data_source_tc_cynosdb_clusters.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_clusters.go index bd9426af8e..1343122069 100644 --- a/tencentcloud/data_source_tc_cynosdb_clusters.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_clusters.go @@ -1,17 +1,20 @@ -package tencentcloud +package cynosdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbClusters() *schema.Resource { +func DataSourceTencentCloudCynosdbClusters() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbClustersRead, @@ -126,10 +129,10 @@ func dataSourceTencentCloudCynosdbClusters() *schema.Resource { } func dataSourceTencentCloudCynosdbClustersRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_clusters.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_clusters.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]string) if v, ok := d.GetOk("cluster_id"); ok { @@ -147,15 +150,15 @@ func dataSourceTencentCloudCynosdbClustersRead(d *schema.ResourceData, meta inte } cynosdbService := CynosdbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var clusters []*cynosdb.CynosdbCluster var err error - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { clusters, err = cynosdbService.DescribeClusters(ctx, params) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -196,7 +199,7 @@ func dataSourceTencentCloudCynosdbClustersRead(d *schema.ResourceData, meta inte output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err = writeToFile(output.(string), clusterList); err != nil { + if err = tccommon.WriteToFile(output.(string), clusterList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_cynosdb_clusters_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_clusters_test.go similarity index 88% rename from tencentcloud/data_source_tc_cynosdb_clusters_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_clusters_test.go index be9cdcd08b..9a1cdf416c 100644 --- a/tencentcloud/data_source_tc_cynosdb_clusters_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_clusters_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCynosdbClustersDataSource_full(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbClusterstDataSource_full(), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckTencentCloudDataSourceID("tencentcloud_cynosdb_cluster.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("tencentcloud_cynosdb_cluster.foo"), resource.TestCheckResourceAttr("data.tencentcloud_cynosdb_clusters.cluster_full", "cluster_list.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_cynosdb_clusters.cluster_full", "cluster_list.0.cluster_name", "tf-cynosdb"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_clusters.cluster_full", "cluster_list.0.cluster_id"), diff --git a/tencentcloud/data_source_tc_cynosdb_describe_instance_error_logs.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_describe_instance_error_logs.go similarity index 86% rename from tencentcloud/data_source_tc_cynosdb_describe_instance_error_logs.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_describe_instance_error_logs.go index 1f6e9e4630..af4e39ab7b 100644 --- a/tencentcloud/data_source_tc_cynosdb_describe_instance_error_logs.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_describe_instance_error_logs.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbDescribeInstanceErrorLogs() *schema.Resource { +func DataSourceTencentCloudCynosdbDescribeInstanceErrorLogs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbDescribeInstanceErrorLogsRead, Schema: map[string]*schema.Schema{ @@ -84,13 +87,13 @@ func dataSourceTencentCloudCynosdbDescribeInstanceErrorLogs() *schema.Resource { } func dataSourceTencentCloudCynosdbDescribeInstanceErrorLogsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_describe_instance_error_logs.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_describe_instance_error_logs.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} errorLogs []*cynosdb.CynosdbErrorLogItem instanceId string ) @@ -127,10 +130,10 @@ func dataSourceTencentCloudCynosdbDescribeInstanceErrorLogsRead(d *schema.Resour paramMap["KeyWords"] = helper.InterfacesStringsPoint(keyWordsSet) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbDescribeInstanceErrorLogsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } errorLogs = result @@ -168,7 +171,7 @@ func dataSourceTencentCloudCynosdbDescribeInstanceErrorLogsRead(d *schema.Resour d.SetId(instanceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_describe_instance_error_logs_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_describe_instance_error_logs_test.go similarity index 74% rename from tencentcloud/data_source_tc_cynosdb_describe_instance_error_logs_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_describe_instance_error_logs_test.go index 98bea6b1a2..673fd97c7a 100644 --- a/tencentcloud/data_source_tc_cynosdb_describe_instance_error_logs_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_describe_instance_error_logs_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCynosdbDescribeInstanceErrorLogsDataSource_basic(t *test t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbDescribeInstanceErrorLogsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_describe_instance_error_logs.describe_instance_error_logs"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_describe_instance_error_logs.describe_instance_error_logs"), ), }, }, diff --git a/tencentcloud/data_source_tc_cynosdb_describe_instance_slow_queries.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_describe_instance_slow_queries.go similarity index 83% rename from tencentcloud/data_source_tc_cynosdb_describe_instance_slow_queries.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_describe_instance_slow_queries.go index a7741d2044..5ca9d7ab24 100644 --- a/tencentcloud/data_source_tc_cynosdb_describe_instance_slow_queries.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_describe_instance_slow_queries.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbDescribeInstanceSlowQueries() *schema.Resource { +func DataSourceTencentCloudCynosdbDescribeInstanceSlowQueries() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbDescribeInstanceSlowQueriesRead, Schema: map[string]*schema.Schema{ @@ -72,13 +75,13 @@ func dataSourceTencentCloudCynosdbDescribeInstanceSlowQueries() *schema.Resource } func dataSourceTencentCloudCynosdbDescribeInstanceSlowQueriesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_describe_instance_slow_queries.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_describe_instance_slow_queries.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} binlogs []*cynosdb.BinlogItem clusterId string ) @@ -97,10 +100,10 @@ func dataSourceTencentCloudCynosdbDescribeInstanceSlowQueriesRead(d *schema.Reso paramMap["EndTime"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbDescribeInstanceSlowQueriesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } binlogs = result @@ -146,7 +149,7 @@ func dataSourceTencentCloudCynosdbDescribeInstanceSlowQueriesRead(d *schema.Reso d.SetId(clusterId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_describe_instance_slow_queries_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_describe_instance_slow_queries_test.go similarity index 66% rename from tencentcloud/data_source_tc_cynosdb_describe_instance_slow_queries_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_describe_instance_slow_queries_test.go index 87b90b0485..3a2e535d27 100644 --- a/tencentcloud/data_source_tc_cynosdb_describe_instance_slow_queries_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_describe_instance_slow_queries_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package cynosdb_test import ( "fmt" "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -16,19 +18,19 @@ func TestAccTencentCloudCynosdbDescribeInstanceSlowQueriesDataSource_basic(t *te endTime := time.Now().In(loc).Format("2006-01-02 15:04:05") resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: fmt.Sprintf(testAccCynosdbDescribeInstanceSlowQueriesDataSource, startTime, endTime), - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_describe_instance_slow_queries.describe_instance_slow_queries")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_describe_instance_slow_queries.describe_instance_slow_queries")), }, }, }) } -const testAccCynosdbDescribeInstanceSlowQueriesDataSource = CommonCynosdb + ` +const testAccCynosdbDescribeInstanceSlowQueriesDataSource = tcacctest.CommonCynosdb + ` data "tencentcloud_cynosdb_describe_instance_slow_queries" "describe_instance_slow_queries" { cluster_id = var.cynosdb_cluster_id start_time = "%s" diff --git a/tencentcloud/data_source_tc_cynosdb_instance_slow_queries.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_instance_slow_queries.go similarity index 90% rename from tencentcloud/data_source_tc_cynosdb_instance_slow_queries.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_instance_slow_queries.go index 304f2b9e43..5babd2b391 100644 --- a/tencentcloud/data_source_tc_cynosdb_instance_slow_queries.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_instance_slow_queries.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbInstanceSlowQueries() *schema.Resource { +func DataSourceTencentCloudCynosdbInstanceSlowQueries() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbInstanceSlowQueriesRead, Schema: map[string]*schema.Schema{ @@ -136,12 +139,12 @@ func dataSourceTencentCloudCynosdbInstanceSlowQueries() *schema.Resource { } func dataSourceTencentCloudCynosdbInstanceSlowQueriesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_instance_slow_queries.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_instance_slow_queries.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_id"); ok { @@ -176,14 +179,14 @@ func dataSourceTencentCloudCynosdbInstanceSlowQueriesRead(d *schema.ResourceData paramMap["OrderByType"] = helper.String(v.(string)) } - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var slowQueries []*cynosdb.SlowQueriesItem - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbInstanceSlowQueriesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } slowQueries = result return nil @@ -253,7 +256,7 @@ func dataSourceTencentCloudCynosdbInstanceSlowQueriesRead(d *schema.ResourceData d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_instance_slow_queries_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_instance_slow_queries_test.go similarity index 90% rename from tencentcloud/data_source_tc_cynosdb_instance_slow_queries_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_instance_slow_queries_test.go index 4ec12b7275..7bae9196a4 100644 --- a/tencentcloud/data_source_tc_cynosdb_instance_slow_queries_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_instance_slow_queries_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package cynosdb_test import ( "fmt" "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -15,14 +17,14 @@ func TestAccTencentCloudCynosdbInstanceSlowQueriesDataSource_basic(t *testing.T) endTime := time.Now().In(loc).Format("2006-01-02 15:04:05") resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: fmt.Sprintf(testAccCynosdbInstanceSlowQueriesDataSource, startTime, endTime), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_instance_slow_queries.instance_slow_queries"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_instance_slow_queries.instance_slow_queries"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_instance_slow_queries.instance_slow_queries", "id"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_instance_slow_queries.instance_slow_queries", "instance_id"), // resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_instance_slow_queries.instance_slow_queries", "start_time"), @@ -50,7 +52,7 @@ func TestAccTencentCloudCynosdbInstanceSlowQueriesDataSource_basic(t *testing.T) }) } -const testAccCynosdbInstanceSlowQueriesDataSource = CommonCynosdb + ` +const testAccCynosdbInstanceSlowQueriesDataSource = tcacctest.CommonCynosdb + ` data "tencentcloud_cynosdb_instance_slow_queries" "instance_slow_queries" { instance_id = var.cynosdb_cluster_instance_id diff --git a/tencentcloud/data_source_tc_cynosdb_instances.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_instances.go similarity index 88% rename from tencentcloud/data_source_tc_cynosdb_instances.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_instances.go index 3860f6f54a..da9bcaede8 100644 --- a/tencentcloud/data_source_tc_cynosdb_instances.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_instances.go @@ -1,16 +1,19 @@ -package tencentcloud +package cynosdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbInstances() *schema.Resource { +func DataSourceTencentCloudCynosdbInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbInstancesRead, @@ -104,10 +107,10 @@ func dataSourceTencentCloudCynosdbInstances() *schema.Resource { } func dataSourceTencentCloudCynosdbInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_instances.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_instances.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) params := make(map[string]string) if v, ok := d.GetOk("instance_id"); ok { @@ -125,13 +128,13 @@ func dataSourceTencentCloudCynosdbInstancesRead(d *schema.ResourceData, meta int } cynosdbService := CynosdbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { instances, e := cynosdbService.DescribeInstances(ctx, params) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } ids := make([]string, 0, len(instances)) instanceList := make([]map[string]interface{}, 0, len(instances)) @@ -164,7 +167,7 @@ func dataSourceTencentCloudCynosdbInstancesRead(d *schema.ResourceData, meta int output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), instanceList); e != nil { + if e := tccommon.WriteToFile(output.(string), instanceList); e != nil { return resource.NonRetryableError(e) } } diff --git a/tencentcloud/data_source_tc_cynosdb_instances_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_instances_test.go similarity index 85% rename from tencentcloud/data_source_tc_cynosdb_instances_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_instances_test.go index fbe2cb6dd2..dd7b0eddde 100644 --- a/tencentcloud/data_source_tc_cynosdb_instances_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_instances_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudCynosdbInstancesDataSource_full(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbInstancestDataSource_full(), Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckTencentCloudDataSourceID("tencentcloud_cynosdb_readonly_instance.foo"), + tcacctest.AccCheckTencentCloudDataSourceID("tencentcloud_cynosdb_readonly_instance.foo"), resource.TestCheckResourceAttr("data.tencentcloud_cynosdb_instances.instances", "instance_list.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_cynosdb_instances.instances", "instance_list.0.instance_name", "tf-cynosdb-readonly-instance"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_instances.instances", "instance_list.0.cluster_id"), diff --git a/tencentcloud/data_source_tc_cynosdb_param_templates.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_param_templates.go similarity index 93% rename from tencentcloud/data_source_tc_cynosdb_param_templates.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_param_templates.go index dcc68708f5..3d74507c1c 100644 --- a/tencentcloud/data_source_tc_cynosdb_param_templates.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_param_templates.go @@ -1,16 +1,19 @@ -package tencentcloud +package cynosdb import ( "context" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbParamTemplates() *schema.Resource { +func DataSourceTencentCloudCynosdbParamTemplates() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbParamTemplatesRead, Schema: map[string]*schema.Schema{ @@ -205,12 +208,12 @@ func dataSourceTencentCloudCynosdbParamTemplates() *schema.Resource { } func dataSourceTencentCloudCynosdbParamTemplatesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_param_templates.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_param_templates.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("engine_versions"); ok { @@ -268,14 +271,14 @@ func dataSourceTencentCloudCynosdbParamTemplatesRead(d *schema.ResourceData, met paramMap["order_direction"] = helper.String(v.(string)) } - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var items []*cynosdb.ParamTemplateListInfo - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbParamTemplatesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } items = result return nil @@ -325,7 +328,7 @@ func dataSourceTencentCloudCynosdbParamTemplatesRead(d *schema.ResourceData, met _ = d.Set("items", tmpList) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_param_templates_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_param_templates_test.go similarity index 70% rename from tencentcloud/data_source_tc_cynosdb_param_templates_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_param_templates_test.go index ac43c60484..423cc5ff69 100644 --- a/tencentcloud/data_source_tc_cynosdb_param_templates_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_param_templates_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,14 +12,14 @@ func TestAccTencentCloudCynosdbParamTemplatesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbParamTemplatesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_param_templates.param_templates"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_param_templates.param_templates"), resource.TestCheckResourceAttr("data.tencentcloud_cynosdb_param_templates.param_templates", "items.#", "1"), ), }, diff --git a/tencentcloud/data_source_tc_cynosdb_project_security_groups.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_project_security_groups.go similarity index 92% rename from tencentcloud/data_source_tc_cynosdb_project_security_groups.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_project_security_groups.go index 7384c52035..f9526f4d72 100644 --- a/tencentcloud/data_source_tc_cynosdb_project_security_groups.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_project_security_groups.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbProjectSecurityGroups() *schema.Resource { +func DataSourceTencentCloudCynosdbProjectSecurityGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbProjectSecurityGroupsRead, Schema: map[string]*schema.Schema{ @@ -165,13 +168,13 @@ func dataSourceTencentCloudCynosdbProjectSecurityGroups() *schema.Resource { } func dataSourceTencentCloudCynosdbProjectSecurityGroupsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_project_security_groups.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_project_security_groups.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} groups []*cynosdb.SecurityGroup ) @@ -184,10 +187,10 @@ func dataSourceTencentCloudCynosdbProjectSecurityGroupsRead(d *schema.ResourceDa paramMap["SearchKey"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbProjectSecurityGroupsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } groups = result @@ -321,7 +324,7 @@ func dataSourceTencentCloudCynosdbProjectSecurityGroupsRead(d *schema.ResourceDa d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_project_security_groups_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_project_security_groups_test.go similarity index 85% rename from tencentcloud/data_source_tc_cynosdb_project_security_groups_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_project_security_groups_test.go index 4b68c9006c..a3e16495df 100644 --- a/tencentcloud/data_source_tc_cynosdb_project_security_groups_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_project_security_groups_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCynosdbProjectSecurityGroupsDataSource_basic(t *testing. t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbProjectSecurityGroupsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_project_security_groups.project_security_groups"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_project_security_groups.project_security_groups"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_project_security_groups.project_security_groups", "groups.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_project_security_groups.project_security_groups", "groups.0.project_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_project_security_groups.project_security_groups", "groups.0.create_time"), diff --git a/tencentcloud/data_source_tc_cynosdb_proxy_node.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_proxy_node.go similarity index 90% rename from tencentcloud/data_source_tc_cynosdb_proxy_node.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_proxy_node.go index 952134d456..fa125beb00 100644 --- a/tencentcloud/data_source_tc_cynosdb_proxy_node.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_proxy_node.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbProxyNode() *schema.Resource { +func DataSourceTencentCloudCynosdbProxyNode() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbProxyNodeRead, Schema: map[string]*schema.Schema{ @@ -128,13 +131,13 @@ func dataSourceTencentCloudCynosdbProxyNode() *schema.Resource { } func dataSourceTencentCloudCynosdbProxyNodeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_proxy_node.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_proxy_node.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} proxyNodeInfos []*cynosdb.ProxyNodeInfo ) @@ -177,10 +180,10 @@ func dataSourceTencentCloudCynosdbProxyNodeRead(d *schema.ResourceData, meta int paramMap["filters"] = tmpSet } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbProxyNodeByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } proxyNodeInfos = result @@ -248,7 +251,7 @@ func dataSourceTencentCloudCynosdbProxyNodeRead(d *schema.ResourceData, meta int d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_proxy_node_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_proxy_node_test.go similarity index 74% rename from tencentcloud/data_source_tc_cynosdb_proxy_node_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_proxy_node_test.go index 511b19a77e..8f7e01e496 100644 --- a/tencentcloud/data_source_tc_cynosdb_proxy_node_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_proxy_node_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,15 +12,15 @@ import ( func TestAccTencentCloudCynosdbProxyNodeDataSource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckCynosdbProxyDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbProxyNodeDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_proxy_node.proxy_node"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_proxy_node.proxy_node"), ), }, }, diff --git a/tencentcloud/data_source_tc_cynosdb_proxy_version.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_proxy_version.go similarity index 78% rename from tencentcloud/data_source_tc_cynosdb_proxy_version.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_proxy_version.go index ec6a682791..c4fb45a012 100644 --- a/tencentcloud/data_source_tc_cynosdb_proxy_version.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_proxy_version.go @@ -1,16 +1,19 @@ -package tencentcloud +package cynosdb import ( "context" "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbProxyVersion() *schema.Resource { +func DataSourceTencentCloudCynosdbProxyVersion() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbProxyVersionRead, Schema: map[string]*schema.Schema{ @@ -45,13 +48,13 @@ func dataSourceTencentCloudCynosdbProxyVersion() *schema.Resource { } func dataSourceTencentCloudCynosdbProxyVersionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_proxy_version.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_proxy_version.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} proxyVersion *cynosdb.DescribeSupportProxyVersionResponseParams clusterId string ) @@ -66,10 +69,10 @@ func dataSourceTencentCloudCynosdbProxyVersionRead(d *schema.ResourceData, meta paramMap["ProxyGroupId"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbProxyVersionByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if result == nil { @@ -96,7 +99,7 @@ func dataSourceTencentCloudCynosdbProxyVersionRead(d *schema.ResourceData, meta d.SetId(clusterId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_proxy_version_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_proxy_version_test.go similarity index 68% rename from tencentcloud/data_source_tc_cynosdb_proxy_version_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_proxy_version_test.go index 224b6ddd0b..e93b0ca3f5 100644 --- a/tencentcloud/data_source_tc_cynosdb_proxy_version_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_proxy_version_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCynosdbProxyVersionDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbProxyVersionDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_proxy_version.proxy_version"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_proxy_version.proxy_version"), ), }, }, diff --git a/tencentcloud/data_source_tc_cynosdb_resource_package_list.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_resource_package_list.go similarity index 93% rename from tencentcloud/data_source_tc_cynosdb_resource_package_list.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_resource_package_list.go index 62445323a2..fb50127c92 100644 --- a/tencentcloud/data_source_tc_cynosdb_resource_package_list.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_resource_package_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbResourcePackageList() *schema.Resource { +func DataSourceTencentCloudCynosdbResourcePackageList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbResourcePackageListRead, Schema: map[string]*schema.Schema{ @@ -152,13 +155,13 @@ func dataSourceTencentCloudCynosdbResourcePackageList() *schema.Resource { } func dataSourceTencentCloudCynosdbResourcePackageListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_resource_package_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_resource_package_list.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} detailList []*cynosdb.Package ) @@ -197,10 +200,10 @@ func dataSourceTencentCloudCynosdbResourcePackageListRead(d *schema.ResourceData paramMap["OrderDirection"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbResourcePackageListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } detailList = result @@ -291,7 +294,7 @@ func dataSourceTencentCloudCynosdbResourcePackageListRead(d *schema.ResourceData d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_resource_package_list_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_resource_package_list_test.go similarity index 87% rename from tencentcloud/data_source_tc_cynosdb_resource_package_list_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_resource_package_list_test.go index c536b3f038..869747d9fb 100644 --- a/tencentcloud/data_source_tc_cynosdb_resource_package_list_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_resource_package_list_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,15 +13,15 @@ func TestAccTencentCloudCynosdbResourcePackageListDataSource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { - PreConfig: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, + PreConfig: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, Config: testAccCynosdbResourcePackageListDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_resource_package_list.resource_package_list"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_resource_package_list.resource_package_list"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_resource_package_list.resource_package_list", "resource_package_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_resource_package_list.resource_package_list", "resource_package_list.0.app_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_resource_package_list.resource_package_list", "resource_package_list.0.package_id"), diff --git a/tencentcloud/data_source_tc_cynosdb_resource_package_sale_specs.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_resource_package_sale_specs.go similarity index 88% rename from tencentcloud/data_source_tc_cynosdb_resource_package_sale_specs.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_resource_package_sale_specs.go index fd96d61ac3..6369dc4dfe 100644 --- a/tencentcloud/data_source_tc_cynosdb_resource_package_sale_specs.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_resource_package_sale_specs.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbResourcePackageSaleSpecs() *schema.Resource { +func DataSourceTencentCloudCynosdbResourcePackageSaleSpecs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbResourcePackageSaleSpecsRead, Schema: map[string]*schema.Schema{ @@ -77,13 +80,13 @@ func dataSourceTencentCloudCynosdbResourcePackageSaleSpecs() *schema.Resource { } func dataSourceTencentCloudCynosdbResourcePackageSaleSpecsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_resource_package_sale_specs.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_resource_package_sale_specs.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} detail []*cynosdb.SalePackageSpec instanceType string packageRegion string @@ -106,10 +109,10 @@ func dataSourceTencentCloudCynosdbResourcePackageSaleSpecsRead(d *schema.Resourc packageType = v.(string) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbResourcePackageSaleSpecsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } detail = result @@ -161,7 +164,7 @@ func dataSourceTencentCloudCynosdbResourcePackageSaleSpecsRead(d *schema.Resourc d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_resource_package_sale_specs_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_resource_package_sale_specs_test.go similarity index 74% rename from tencentcloud/data_source_tc_cynosdb_resource_package_sale_specs_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_resource_package_sale_specs_test.go index 0f1f791e6b..bd25fc4cd9 100644 --- a/tencentcloud/data_source_tc_cynosdb_resource_package_sale_specs_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_resource_package_sale_specs_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCynosdbResourcePackageSaleSpecsDataSource_basic(t *testi t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbResourcePackageSaleSpecsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_resource_package_sale_specs.resource_package_sale_specs"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_resource_package_sale_specs.resource_package_sale_specs"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_resource_package_sale_specs.resource_package_sale_specs", "detail.#"), ), }, diff --git a/tencentcloud/data_source_tc_cynosdb_rollback_time_range.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_rollback_time_range.go similarity index 81% rename from tencentcloud/data_source_tc_cynosdb_rollback_time_range.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_rollback_time_range.go index e6b5f5b50c..2589cc9fb3 100644 --- a/tencentcloud/data_source_tc_cynosdb_rollback_time_range.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_rollback_time_range.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbRollbackTimeRange() *schema.Resource { +func DataSourceTencentCloudCynosdbRollbackTimeRange() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbRollbackTimeRangeRead, Schema: map[string]*schema.Schema{ @@ -57,13 +60,13 @@ func dataSourceTencentCloudCynosdbRollbackTimeRange() *schema.Resource { } func dataSourceTencentCloudCynosdbRollbackTimeRangeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_rollback_time_range.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_rollback_time_range.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} rollbackTimeRange *cynosdb.DescribeRollbackTimeRangeResponseParams clusterId string ) @@ -74,10 +77,10 @@ func dataSourceTencentCloudCynosdbRollbackTimeRangeRead(d *schema.ResourceData, clusterId = v.(string) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbRollbackTimeRangeByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } rollbackTimeRange = result @@ -118,7 +121,7 @@ func dataSourceTencentCloudCynosdbRollbackTimeRangeRead(d *schema.ResourceData, d.SetId(clusterId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_rollback_time_range_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_rollback_time_range_test.go similarity index 78% rename from tencentcloud/data_source_tc_cynosdb_rollback_time_range_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_rollback_time_range_test.go index b5533d9d65..d2156dec92 100644 --- a/tencentcloud/data_source_tc_cynosdb_rollback_time_range_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_rollback_time_range_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCynosdbRollbackTimeRangeDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbRollbackTimeRangeDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_rollback_time_range.rollback_time_range"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_rollback_time_range.rollback_time_range"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_rollback_time_range.rollback_time_range", "rollback_time_ranges.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_rollback_time_range.rollback_time_range", "rollback_time_ranges.0.time_range_start"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_rollback_time_range.rollback_time_range", "rollback_time_ranges.0.time_range_end"), diff --git a/tencentcloud/data_source_tc_cynosdb_zone.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_zone.go similarity index 91% rename from tencentcloud/data_source_tc_cynosdb_zone.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_zone.go index 784a1ad87d..2adb8161e0 100644 --- a/tencentcloud/data_source_tc_cynosdb_zone.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_zone.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudCynosdbZone() *schema.Resource { +func DataSourceTencentCloudCynosdbZone() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudCynosdbZoneRead, Schema: map[string]*schema.Schema{ @@ -133,11 +136,11 @@ func dataSourceTencentCloudCynosdbZone() *schema.Resource { } func dataSourceTencentCloudCynosdbZoneRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_zone.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_zone.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, _ := d.GetOk("include_virtual_zones"); v != nil { @@ -148,13 +151,13 @@ func dataSourceTencentCloudCynosdbZoneRead(d *schema.ResourceData, meta interfac paramMap["ShowPermission"] = helper.Bool(v.(bool)) } - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var regionSet []*cynosdb.SaleRegion - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeCynosdbZoneByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } regionSet = result return nil @@ -257,7 +260,7 @@ func dataSourceTencentCloudCynosdbZoneRead(d *schema.ResourceData, meta interfac d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_cynosdb_zone_config.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_zone_config.go similarity index 85% rename from tencentcloud/data_source_tc_cynosdb_zone_config.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_zone_config.go index 7a3942e699..e6594d11a2 100644 --- a/tencentcloud/data_source_tc_cynosdb_zone_config.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_zone_config.go @@ -1,14 +1,16 @@ -package tencentcloud +package cynosdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func dataSourceTencentCynosdbZoneConfig() *schema.Resource { +func DataSourceTencentCloudCynosdbZoneConfig() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCynosdbZoneConfigRead, Schema: map[string]*schema.Schema{ @@ -82,13 +84,13 @@ func dataSourceTencentCynosdbZoneConfig() *schema.Resource { } func dataSourceTencentCynosdbZoneConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_cynosdb_zone_config.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_cynosdb_zone_config.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region instanceSpecSet, err := service.DescribeRedisZoneConfig(ctx) if err != nil { @@ -123,7 +125,7 @@ func dataSourceTencentCynosdbZoneConfigRead(d *schema.ResourceData, meta interfa if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - if err := writeToFile(output.(string), result); err != nil { + if err := tccommon.WriteToFile(output.(string), result); err != nil { log.Printf("[CRITAL]%s output file[%s] fail, reason[%s]\n", logId, output.(string), err.Error()) return err diff --git a/tencentcloud/data_source_tc_cynosdb_zone_config_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_zone_config_test.go similarity index 84% rename from tencentcloud/data_source_tc_cynosdb_zone_config_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_zone_config_test.go index 0761051d12..2189683309 100644 --- a/tencentcloud/data_source_tc_cynosdb_zone_config_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_zone_config_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccDataSourceCynosdbZoneConfig_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccDataSourceCynosdbZoneConfig(), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_zone_config.test"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_zone_config.test"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_zone_config.test", "list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_zone_config.test", "list.0.cpu"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_zone_config.test", "list.0.memory"), diff --git a/tencentcloud/data_source_tc_cynosdb_zone_test.go b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_zone_test.go similarity index 90% rename from tencentcloud/data_source_tc_cynosdb_zone_test.go rename to tencentcloud/services/cynosdb/data_source_tc_cynosdb_zone_test.go index 6c3bc605c8..a46d8e5766 100644 --- a/tencentcloud/data_source_tc_cynosdb_zone_test.go +++ b/tencentcloud/services/cynosdb/data_source_tc_cynosdb_zone_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudCynosdbZoneDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbZoneDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_zone.zone"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_cynosdb_zone.zone"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_zone.zone", "region_set.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_zone.zone", "region_set.0.db_type"), resource.TestCheckResourceAttrSet("data.tencentcloud_cynosdb_zone.zone", "region_set.0.modules.#"), diff --git a/tencentcloud/extension_cynosdb.go b/tencentcloud/services/cynosdb/extension_cynosdb.go similarity index 97% rename from tencentcloud/extension_cynosdb.go rename to tencentcloud/services/cynosdb/extension_cynosdb.go index e4c2851ee6..de60ad6776 100644 --- a/tencentcloud/extension_cynosdb.go +++ b/tencentcloud/services/cynosdb/extension_cynosdb.go @@ -1,7 +1,9 @@ -package tencentcloud +package cynosdb import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) @@ -188,14 +190,14 @@ func TencentCynosdbClusterBaseInfo() map[string]*schema.Schema { Optional: true, ForceNew: true, Default: CYNOSDB_CHARGE_TYPE_POSTPAID, - ValidateFunc: validateAllowedStringValue([]string{CYNOSDB_CHARGE_TYPE_POSTPAID, CYNOSDB_CHARGE_TYPE_PREPAID}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{CYNOSDB_CHARGE_TYPE_POSTPAID, CYNOSDB_CHARGE_TYPE_PREPAID}), Description: "The charge type of instance. Valid values are `PREPAID` and `POSTPAID_BY_HOUR`. Default value is `POSTPAID_BY_HOUR`.", }, "prepaid_period": { Type: schema.TypeInt, Optional: true, ForceNew: true, - ValidateFunc: validateAllowedIntValue(CYNOSDB_PREPAID_PERIOD), + ValidateFunc: tccommon.ValidateAllowedIntValue(CYNOSDB_PREPAID_PERIOD), Description: "The tenancy (time unit is month) of the prepaid instance. Valid values are `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12`, `24`, `36`. NOTE: it only works when charge_type is set to `PREPAID`.", }, "auto_renew_flag": { @@ -394,7 +396,7 @@ func TencentCynosdbClusterBaseInfo() map[string]*schema.Schema { "serverless_status_flag": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue([]string{"resume", "pause"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"resume", "pause"}), Description: "Specify whether to pause or resume serverless cluster. values: `resume`, `pause`.", }, "serverless_status": { diff --git a/tencentcloud/services/cynosdb/extension_mysql.go b/tencentcloud/services/cynosdb/extension_mysql.go new file mode 100644 index 0000000000..1a6d5cf4e9 --- /dev/null +++ b/tencentcloud/services/cynosdb/extension_mysql.go @@ -0,0 +1,129 @@ +package cynosdb + +const ( + ZONE_SELL_STATUS_ONLINE = 0 +) + +var MYSQL_ALLOW_BACKUP_TIME = []string{"02:00-06:00", "06:00-10:00", "10:00-14:00", "14:00-18:00", "18:00-22:00", "22:00-02:00"} + +var MYSQL_ALLOW_BACKUP_MODEL = []string{"logical", "physical"} + +// mysql Status https://cloud.tencent.com/document/api/236/15872 +const ( + MYSQL_STATUS_DELIVING = 0 + MYSQL_STATUS_RUNNING = 1 + MYSQL_STATUS_ISOLATING = 4 + MYSQL_STATUS_ISOLATED = 5 + //https://cloud.tencent.com/document/api/236/36197 + //Internal business state , not public + MYSQL_STATUS_ISOLATED_1 = 6 + MYSQL_STATUS_ISOLATED_2 = 7 +) + +// Async task status, from https://cloud.tencent.com/document/api/236/20410 +const ( + MYSQL_TASK_STATUS_INITIAL = "INITIAL" + MYSQL_TASK_STATUS_RUNNING = "RUNNING" + MYSQL_TASK_STATUS_SUCCESS = "SUCCESS" + MYSQL_TASK_STATUS_FAILED = "FAILED" + MYSQL_TASK_STATUS_REMOVED = "REMOVED" + MYSQL_TASK_STATUS_PAUSED = "PAUSED " +) + +// default to all host +var MYSQL_DEFAULT_ACCOUNT_HOST = "%" + +var MYSQL_GlOBAL_PRIVILEGE = []string{ + "ALTER", "ALTER ROUTINE", "CREATE", "CREATE ROUTINE", "CREATE TEMPORARY TABLES", + "CREATE USER", "CREATE VIEW", "DELETE", "DROP", "EVENT", "EXECUTE", "INDEX", "INSERT", + "LOCK TABLES", "PROCESS", "REFERENCES", "RELOAD", "REPLICATION CLIENT", + "REPLICATION SLAVE", "SELECT", "SHOW DATABASES", "SHOW VIEW", "TRIGGER", "UPDATE", +} +var MYSQL_DATABASE_PRIVILEGE = []string{"SELECT", "INSERT", "UPDATE", "DELETE", + "CREATE", "DROP", "REFERENCES", "INDEX", + "ALTER", "CREATE TEMPORARY TABLES", "LOCK TABLES", + "EXECUTE", "CREATE VIEW", "SHOW VIEW", + "CREATE ROUTINE", "ALTER ROUTINE", "EVENT", "TRIGGER"} + +var MYSQL_TABLE_PRIVILEGE = []string{ + "SELECT", "INSERT", "UPDATE", "DELETE", "CREATE", "DROP", "REFERENCES", "INDEX", + "ALTER", "CREATE VIEW", "SHOW VIEW", "TRIGGER", +} +var MYSQL_COLUMN_PRIVILEGE = []string{ + "SELECT", "INSERT", "UPDATE", "REFERENCES", +} + +var MYSQL_DATABASE_MUST_PRIVILEGE = "SHOW VIEW" + +var MYSQL_ROLE_MAP = map[int64]string{ + 1: "master", + 2: "ro", + 3: "dr", +} + +var MysqlDelStates = map[int64]bool{ + MYSQL_STATUS_ISOLATING: true, + MYSQL_STATUS_ISOLATED: true, + MYSQL_STATUS_ISOLATED_1: true, + MYSQL_STATUS_ISOLATED_2: true, +} + +// mysql available period value +var MYSQL_AVAILABLE_PERIOD = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36} + +var MYSQL_SUPPORTS_ENGINE = []string{"5.5", "5.6", "5.7", "8.0"} + +// automatic renewal status code +const ( + MYSQL_RENEW_NOUSE = 0 + MYSQL_RENEW_OPEN = 1 + MYSQL_RENEW_CLOSE = 2 +) + +// type of pay +var ( + MysqlPayByMonth = 0 + MysqlPayByUse = 1 +) + +const ( + MYSQL_CHARGE_TYPE_PREPAID = "PREPAID" + MYSQL_CHARGE_TYPE_POSTPAID = "POSTPAID" +) + +var MYSQL_CHARGE_TYPE = map[int]string{ + MysqlPayByMonth: MYSQL_CHARGE_TYPE_PREPAID, + MysqlPayByUse: MYSQL_CHARGE_TYPE_POSTPAID, +} + +const ( + MysqlInstanceIdNotFound = "InvalidParameter.InstanceNotFound" + MysqlInstanceIdNotFound2 = "InvalidParameter" + MysqlInstanceIdNotFound3 = "InternalError.DatabaseAccessError" +) + +var MYSQL_TASK_STATUS = map[string]int64{ + "UNDEFINED": -1, + "INITIAL": 0, + "RUNNING": 1, + "SUCCEED": 2, + "FAILED": 3, + "KILLED": 4, + "REMOVED": 5, + "PAUSED": 6, +} + +var MYSQL_TASK_TYPES = map[string]int64{ + "ROLLBACK": 1, + "SQL OPERATION": 2, + "IMPORT DATA": 3, + "MODIFY PARAM": 5, + "INITIAL": 6, + "REBOOT": 7, + "OPEN GTID": 8, + "UPGRADE RO": 9, + "BATCH ROLLBACK": 10, + "UPGRADE MASTER": 11, + "DROP TABLES": 12, + "SWITCH DR TO MASTER": 13, +} diff --git a/tencentcloud/services/cynosdb/extension_postgresql.go b/tencentcloud/services/cynosdb/extension_postgresql.go new file mode 100644 index 0000000000..afeb38a72f --- /dev/null +++ b/tencentcloud/services/cynosdb/extension_postgresql.go @@ -0,0 +1,57 @@ +package cynosdb + +const ( + POSTGRESQL_PAYTYPE_PREPAID = "prepaid" + POSTGRESQL_PAYTYPE_POSTPAID = "postpaid" +) + +const ( + COMMON_PAYTYPE_PREPAID = "PREPAID" + COMMON_PAYTYPE_POSTPAID = "POSTPAID_BY_HOUR" +) + +var POSTGRESQL_PAYTYPE = []string{COMMON_PAYTYPE_POSTPAID} + +const ( + POSTGRESQL_DB_VERSION_9_3_5 = "9.3.5" + POSTGRESQL_DB_VERSION_9_5_4 = "9.5.4" + POSTGRESQL_DB_VERSION_10_4 = "10.4" +) + +const ( + POSTGRESQL_KERNEL_UPGRADE_IMMEDIATELY = 0 + POSTGRESQL_KERNEL_UPGRADE_SPECIFIED_TIME = 1 + POSTGRESQL_KERNEL_UPGRADE_MAINTAIN_WINDOW = 2 +) + +var POSTSQL_DB_VERSION = []string{POSTGRESQL_DB_VERSION_9_3_5, POSTGRESQL_DB_VERSION_9_5_4, POSTGRESQL_DB_VERSION_10_4} + +const ( + POSTGRESQL_DB_CHARSET_UTF8 = "UTF8" + POSTGRESQL_DB_CHARSET_LATIN1 = "LATIN1" +) + +var POSTGRESQL_DB_CHARSET = []string{POSTGRESQL_DB_CHARSET_UTF8, POSTGRESQL_DB_CHARSET_LATIN1} + +const ( + POSTGRESQL_STAUTS_RUNNING = "running" + POSTGRESQL_STAUTS_ISOLATED = "isolated" +) + +var POSTGRESQL_RETRYABLE_STATUS = []string{ + "initing", + "expanding", + "switching", + // deployment changing not exposed at response struct but actually exists + "deployment changing", +} + +const ( + SYNC_MODE_SEMI = "Semi-sync" + SYNC_MODE_ASYNC = "Async" +) + +var SYNC_MODE = []string{ + SYNC_MODE_SEMI, + SYNC_MODE_ASYNC, +} diff --git a/tencentcloud/services/cynosdb/extension_tags.go b/tencentcloud/services/cynosdb/extension_tags.go new file mode 100644 index 0000000000..b05111a218 --- /dev/null +++ b/tencentcloud/services/cynosdb/extension_tags.go @@ -0,0 +1,3 @@ +package cynosdb + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/resource_tc_cynosdb_account.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_account.go similarity index 74% rename from tencentcloud/resource_tc_cynosdb_account.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_account.go index 02900d0bf9..419d06ed9d 100644 --- a/tencentcloud/resource_tc_cynosdb_account.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_account.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbAccount() *schema.Resource { +func ResourceTencentCloudCynosdbAccount() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbAccountCreate, Read: resourceTencentCloudCynosdbAccountRead, @@ -59,10 +62,10 @@ func resourceTencentCloudCynosdbAccount() *schema.Resource { } func resourceTencentCloudCynosdbAccountCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_account.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_account.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cynosdb.NewCreateAccountsRequest() @@ -95,10 +98,10 @@ func resourceTencentCloudCynosdbAccountCreate(d *schema.ResourceData, meta inter } request.Accounts = append(request.Accounts, &newAccount) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().CreateAccounts(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().CreateAccounts(request) if e != nil { - return retryError(e) + 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()) } @@ -109,22 +112,22 @@ func resourceTencentCloudCynosdbAccountCreate(d *schema.ResourceData, meta inter return err } - d.SetId(clusterId + FILED_SP + accountName + FILED_SP + host) + d.SetId(clusterId + tccommon.FILED_SP + accountName + tccommon.FILED_SP + host) return resourceTencentCloudCynosdbAccountRead(d, meta) } func resourceTencentCloudCynosdbAccountRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_account.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_account.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -169,12 +172,12 @@ func resourceTencentCloudCynosdbAccountRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudCynosdbAccountUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_account.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_account.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -198,10 +201,10 @@ func resourceTencentCloudCynosdbAccountUpdate(d *schema.ResourceData, meta inter request.AccountPassword = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ResetAccountPassword(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ResetAccountPassword(request) if e != nil { - return retryError(e) + 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()) } @@ -222,10 +225,10 @@ func resourceTencentCloudCynosdbAccountUpdate(d *schema.ResourceData, meta inter request.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyAccountDescription(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyAccountDescription(request) if e != nil { - return retryError(e) + 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()) } @@ -251,10 +254,10 @@ func resourceTencentCloudCynosdbAccountUpdate(d *schema.ResourceData, meta inter request.NewHost = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyAccountHost(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyAccountHost(request) if e != nil { - return retryError(e) + 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()) } @@ -265,7 +268,7 @@ func resourceTencentCloudCynosdbAccountUpdate(d *schema.ResourceData, meta inter return err } - d.SetId(clusterId + FILED_SP + accountName + FILED_SP + newHost) + d.SetId(clusterId + tccommon.FILED_SP + accountName + tccommon.FILED_SP + newHost) } if d.HasChange("max_user_connections") { @@ -285,10 +288,10 @@ func resourceTencentCloudCynosdbAccountUpdate(d *schema.ResourceData, meta inter } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyAccountParams(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyAccountParams(request) if e != nil { - return retryError(e) + 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()) } @@ -304,14 +307,14 @@ func resourceTencentCloudCynosdbAccountUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudCynosdbAccountDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_account.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_account.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_cynosdb_account_privileges.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_account_privileges.go similarity index 85% rename from tencentcloud/resource_tc_cynosdb_account_privileges.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_account_privileges.go index 8a7e5eaa5d..d38f968190 100644 --- a/tencentcloud/resource_tc_cynosdb_account_privileges.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_account_privileges.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbAccountPrivileges() *schema.Resource { +func ResourceTencentCloudCynosdbAccountPrivileges() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbAccountPrivilegesCreate, Read: resourceTencentCloudCynosdbAccountPrivilegesRead, @@ -106,8 +109,8 @@ func resourceTencentCloudCynosdbAccountPrivileges() *schema.Resource { } func resourceTencentCloudCynosdbAccountPrivilegesCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_account_privileges.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_account_privileges.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( clusterId string @@ -124,21 +127,21 @@ func resourceTencentCloudCynosdbAccountPrivilegesCreate(d *schema.ResourceData, host = v.(string) } - d.SetId(clusterId + FILED_SP + accountName + FILED_SP + host) + d.SetId(clusterId + tccommon.FILED_SP + accountName + tccommon.FILED_SP + host) return resourceTencentCloudCynosdbAccountPrivilegesUpdate(d, meta) } func resourceTencentCloudCynosdbAccountPrivilegesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_account_privileges.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_account_privileges.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -213,14 +216,14 @@ func resourceTencentCloudCynosdbAccountPrivilegesRead(d *schema.ResourceData, me } func resourceTencentCloudCynosdbAccountPrivilegesUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_account_privileges.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_account_privileges.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cynosdb.NewModifyAccountPrivilegesRequest() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -287,10 +290,10 @@ func resourceTencentCloudCynosdbAccountPrivilegesUpdate(d *schema.ResourceData, } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyAccountPrivileges(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyAccountPrivileges(request) if e != nil { - return retryError(e) + 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()) } @@ -305,8 +308,8 @@ func resourceTencentCloudCynosdbAccountPrivilegesUpdate(d *schema.ResourceData, } func resourceTencentCloudCynosdbAccountPrivilegesDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_account_privileges.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_account_privileges.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cynosdb_account_privileges_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_account_privileges_test.go similarity index 95% rename from tencentcloud/resource_tc_cynosdb_account_privileges_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_account_privileges_test.go index 5a24bdac86..037de49bb2 100644 --- a/tencentcloud/resource_tc_cynosdb_account_privileges_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_account_privileges_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCynosdbAccountPrivilegesResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbAccountPrivileges, @@ -54,7 +56,7 @@ func TestAccTencentCloudCynosdbAccountPrivilegesResource_basic(t *testing.T) { }) } -const testAccCynosdbAccountPrivilegesVar = CommonCynosdb + ` +const testAccCynosdbAccountPrivilegesVar = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_account" "account" { cluster_id = var.cynosdb_cluster_id diff --git a/tencentcloud/resource_tc_cynosdb_account_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_account_test.go similarity index 76% rename from tencentcloud/resource_tc_cynosdb_account_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_account_test.go index 5081d01059..d1993cc651 100644 --- a/tencentcloud/resource_tc_cynosdb_account_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_account_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb_test import ( "context" @@ -6,6 +6,10 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccynosdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cynosdb" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,8 +18,8 @@ import ( func TestAccTencentCloudCynosdbAccountResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCynosdbAccountDestroy, Steps: []resource.TestStep{ { @@ -23,7 +27,7 @@ func TestAccTencentCloudCynosdbAccountResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckCynosdbAccountExists("tencentcloud_cynosdb_account.account"), resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_account.account", "id"), - resource.TestCheckResourceAttr("tencentcloud_cynosdb_account.account", "cluster_id", defaultCynosdbClusterId), + resource.TestCheckResourceAttr("tencentcloud_cynosdb_account.account", "cluster_id", tcacctest.DefaultCynosdbClusterId), resource.TestCheckResourceAttr("tencentcloud_cynosdb_account.account", "account_name", "terraform_test"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_account.account", "description", "test"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_account.account", "host", "%"), @@ -41,7 +45,7 @@ func TestAccTencentCloudCynosdbAccountResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckCynosdbAccountExists("tencentcloud_cynosdb_account.account"), resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_account.account", "id"), - resource.TestCheckResourceAttr("tencentcloud_cynosdb_account.account", "cluster_id", defaultCynosdbClusterId), + resource.TestCheckResourceAttr("tencentcloud_cynosdb_account.account", "cluster_id", tcacctest.DefaultCynosdbClusterId), resource.TestCheckResourceAttr("tencentcloud_cynosdb_account.account", "account_name", "terraform_test"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_account.account", "description", "terraform test"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_account.account", "host", "%"), @@ -53,18 +57,16 @@ func TestAccTencentCloudCynosdbAccountResource_basic(t *testing.T) { } func testAccCheckCynosdbAccountDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cynosdbService := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cynosdb_account" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -86,8 +88,8 @@ func testAccCheckCynosdbAccountDestroy(s *terraform.State) error { func testAccCheckCynosdbAccountExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -96,11 +98,9 @@ func testAccCheckCynosdbAccountExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cynosdb cluster account id is not set") } - cynosdbService := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -119,7 +119,7 @@ func testAccCheckCynosdbAccountExists(n string) resource.TestCheckFunc { } } -const testAccCynosdbAccount = CommonCynosdb + ` +const testAccCynosdbAccount = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_account" "account" { cluster_id = var.cynosdb_cluster_id @@ -132,7 +132,7 @@ resource "tencentcloud_cynosdb_account" "account" { ` -const testAccCynosdbAccountUp = CommonCynosdb + ` +const testAccCynosdbAccountUp = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_account" "account" { cluster_id = var.cynosdb_cluster_id diff --git a/tencentcloud/resource_tc_cynosdb_audit_log_file.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_audit_log_file.go similarity index 86% rename from tencentcloud/resource_tc_cynosdb_audit_log_file.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_audit_log_file.go index fabf117d1e..0a4a3d3344 100644 --- a/tencentcloud/resource_tc_cynosdb_audit_log_file.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_audit_log_file.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudCynosdbAuditLogFile() *schema.Resource { +func ResourceTencentCloudCynosdbAuditLogFile() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbAuditLogFileCreate, Read: resourceTencentCloudCynosdbAuditLogFileRead, @@ -185,10 +188,10 @@ func resourceTencentCloudCynosdbAuditLogFile() *schema.Resource { } func resourceTencentCloudCynosdbAuditLogFileCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_audit_log_file.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_audit_log_file.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cynosdb.NewCreateAuditLogFileRequest() @@ -292,10 +295,10 @@ func resourceTencentCloudCynosdbAuditLogFileCreate(d *schema.ResourceData, meta request.Filter = &auditLogFilter } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().CreateAuditLogFile(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().CreateAuditLogFile(request) if e != nil { - return retryError(e) + 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()) } @@ -307,14 +310,14 @@ func resourceTencentCloudCynosdbAuditLogFileCreate(d *schema.ResourceData, meta return err } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { request := cynosdb.NewDescribeAuditLogFilesRequest() request.InstanceId = helper.String(instanceId) request.FileName = response.Response.FileName ratelimit.Check(request.GetAction()) - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().DescribeAuditLogFiles(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().DescribeAuditLogFiles(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if len(result.Response.Items) > 0 && *result.Response.Items[0].Status == "success" { return nil @@ -326,23 +329,23 @@ func resourceTencentCloudCynosdbAuditLogFileCreate(d *schema.ResourceData, meta return err } - auditLogFileId := strings.Join([]string{instanceId, *response.Response.FileName}, FILED_SP) + auditLogFileId := strings.Join([]string{instanceId, *response.Response.FileName}, tccommon.FILED_SP) d.SetId(auditLogFileId) return resourceTencentCloudCynosdbAuditLogFileRead(d, meta) } func resourceTencentCloudCynosdbAuditLogFileRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_audit_log_file.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_audit_log_file.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -369,14 +372,14 @@ func resourceTencentCloudCynosdbAuditLogFileRead(d *schema.ResourceData, meta in } func resourceTencentCloudCynosdbAuditLogFileDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_audit_log_file.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_audit_log_file.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_cynosdb_audit_log_file_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_audit_log_file_test.go similarity index 66% rename from tencentcloud/resource_tc_cynosdb_audit_log_file_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_audit_log_file_test.go index 462a0020ee..89021d5748 100644 --- a/tencentcloud/resource_tc_cynosdb_audit_log_file_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_audit_log_file_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb_test import ( "context" @@ -6,6 +6,10 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccynosdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cynosdb" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudCynosdbAuditLogFileResource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCynosdbAuditLogFileDestroy, Steps: []resource.TestStep{ { @@ -28,18 +32,16 @@ func TestAccTencentCloudCynosdbAuditLogFileResource(t *testing.T) { } func testAccCheckCynosdbAuditLogFileDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + service := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cynosdb_audit_log_file" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -60,8 +62,8 @@ func testAccCheckCynosdbAuditLogFileDestroy(s *terraform.State) error { func testAccCheckCynosdbCynosdbAuditLogFileExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -70,10 +72,8 @@ func testAccCheckCynosdbCynosdbAuditLogFileExists(n string) resource.TestCheckFu if rs.Primary.ID == "" { return fmt.Errorf("cynosdb audit log file id is not set") } - service := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + service := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -91,7 +91,7 @@ func testAccCheckCynosdbCynosdbAuditLogFileExists(n string) resource.TestCheckFu } } -const testAccCynosdbAuditLogFile = CommonCynosdb + ` +const testAccCynosdbAuditLogFile = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_audit_log_file" "audit_log_file" { instance_id = var.cynosdb_cluster_instance_id start_time = "2023-01-04 16:54:20" diff --git a/tencentcloud/resource_tc_cynosdb_binlog_save_days.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_binlog_save_days.go similarity index 69% rename from tencentcloud/resource_tc_cynosdb_binlog_save_days.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_binlog_save_days.go index 4513fecef7..ac79017bf0 100644 --- a/tencentcloud/resource_tc_cynosdb_binlog_save_days.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_binlog_save_days.go @@ -1,16 +1,19 @@ -package tencentcloud +package cynosdb import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbBinlogSaveDays() *schema.Resource { +func ResourceTencentCloudCynosdbBinlogSaveDays() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbBinlogSaveDaysCreate, Read: resourceTencentCloudCynosdbBinlogSaveDaysRead, @@ -37,8 +40,8 @@ func resourceTencentCloudCynosdbBinlogSaveDays() *schema.Resource { } func resourceTencentCloudCynosdbBinlogSaveDaysCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_binlog_save_days.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_binlog_save_days.create")() + defer tccommon.InconsistentCheck(d, meta)() var clusterId string if v, ok := d.GetOk("cluster_id"); ok { @@ -51,13 +54,13 @@ func resourceTencentCloudCynosdbBinlogSaveDaysCreate(d *schema.ResourceData, met } func resourceTencentCloudCynosdbBinlogSaveDaysRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_binlog_save_days.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_binlog_save_days.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId := d.Id() binlogSaveDays, err := service.DescribeCynosdbBinlogSaveDaysById(ctx, clusterId) @@ -81,10 +84,10 @@ func resourceTencentCloudCynosdbBinlogSaveDaysRead(d *schema.ResourceData, meta } func resourceTencentCloudCynosdbBinlogSaveDaysUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_binlog_save_days.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_binlog_save_days.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cynosdb.NewModifyBinlogSaveDaysRequest() @@ -95,10 +98,10 @@ func resourceTencentCloudCynosdbBinlogSaveDaysUpdate(d *schema.ResourceData, met request.BinlogSaveDays = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyBinlogSaveDays(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyBinlogSaveDays(request) if e != nil { - return retryError(e) + 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()) } @@ -113,8 +116,8 @@ func resourceTencentCloudCynosdbBinlogSaveDaysUpdate(d *schema.ResourceData, met } func resourceTencentCloudCynosdbBinlogSaveDaysDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_binlog_save_days.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_binlog_save_days.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cynosdb_binlog_save_days_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_binlog_save_days_test.go similarity index 82% rename from tencentcloud/resource_tc_cynosdb_binlog_save_days_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_binlog_save_days_test.go index 14d372fb57..842a1914e6 100644 --- a/tencentcloud/resource_tc_cynosdb_binlog_save_days_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_binlog_save_days_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCynosdbBinlogSaveDaysResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbBinlogSaveDays, @@ -38,7 +40,7 @@ func TestAccTencentCloudCynosdbBinlogSaveDaysResource_basic(t *testing.T) { }) } -const testAccCynosdbBinlogSaveDays = CommonCynosdb + ` +const testAccCynosdbBinlogSaveDays = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_binlog_save_days" "binlog_save_days" { cluster_id = var.cynosdb_cluster_id @@ -47,7 +49,7 @@ resource "tencentcloud_cynosdb_binlog_save_days" "binlog_save_days" { ` -const testAccCynosdbBinlogSaveDaysUp = CommonCynosdb + ` +const testAccCynosdbBinlogSaveDaysUp = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_binlog_save_days" "binlog_save_days" { cluster_id = var.cynosdb_cluster_id diff --git a/tencentcloud/resource_tc_cynosdb_cluster.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster.go similarity index 90% rename from tencentcloud/resource_tc_cynosdb_cluster.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster.go index fb6ef6c174..84fdc3274f 100644 --- a/tencentcloud/resource_tc_cynosdb_cluster.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -6,15 +6,18 @@ import ( "log" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudCynosdbCluster() *schema.Resource { +func ResourceTencentCloudCynosdbCluster() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbClusterCreate, Read: resourceTencentCloudCynosdbClusterRead, @@ -29,13 +32,13 @@ func resourceTencentCloudCynosdbCluster() *schema.Resource { } func resourceTencentCloudCynosdbClusterCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - client = meta.(*TencentCloudClient).apiV3Conn + client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() cynosdbService = CynosdbService{client: client} tagService = TagService{client: client} region = client.Region @@ -139,9 +142,9 @@ func resourceTencentCloudCynosdbClusterCreate(d *schema.ResourceData, meta inter var response *cynosdb.CreateClustersResponse var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, err = meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().CreateClusters(request) + response, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().CreateClusters(request) if err != nil { if e, ok := err.(*sdkErrors.TencentCloudSDKError); ok { if e.GetCode() == "InvalidParameterValue.DealNameNotFound" { @@ -151,7 +154,7 @@ func resourceTencentCloudCynosdbClusterCreate(d *schema.ResourceData, meta inter log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), err.Error()) //internal version: replace bpass begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. //internal version: replace bpass end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -166,9 +169,9 @@ func resourceTencentCloudCynosdbClusterCreate(d *schema.ResourceData, meta inter dealReq := cynosdb.NewDescribeResourcesByDealNameRequest() dealRes := cynosdb.NewDescribeResourcesByDealNameResponse() dealReq.DealName = dealName - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - dealRes, err = meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().DescribeResourcesByDealName(dealReq) + dealRes, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().DescribeResourcesByDealName(dealReq) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), err.Error()) if sdkErr, ok := err.(*sdkErrors.TencentCloudSDKError); ok { @@ -176,7 +179,7 @@ func resourceTencentCloudCynosdbClusterCreate(d *schema.ResourceData, meta inter return resource.RetryableError(fmt.Errorf("DealName[%s] Not Found, retry... reason: %s", *dealName, err.Error())) } } - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -204,7 +207,7 @@ func resourceTencentCloudCynosdbClusterCreate(d *schema.ResourceData, meta inter // set tags if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - resourceName := BuildTagResourceName("cynosdb", "cluster", region, id) + resourceName := tccommon.BuildTagResourceName("cynosdb", "cluster", region, id) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err } @@ -297,15 +300,15 @@ func resourceTencentCloudCynosdbClusterCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudCynosdbClusterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() cynosdbService := CynosdbService{client: client} item, cluster, has, err := cynosdbService.DescribeClusterById(ctx, id) if err != nil { @@ -486,14 +489,14 @@ func resourceTencentCloudCynosdbClusterRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudCynosdbClusterUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) clusterId = d.Id() instanceId = d.Get("instance_id").(string) - client = meta.(*TencentCloudClient).apiV3Conn + client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() cynosdbService = CynosdbService{client: client} tagService = TagService{client: client} region = client.Region @@ -523,7 +526,7 @@ func resourceTencentCloudCynosdbClusterUpdate(d *schema.ResourceData, meta inter return err } - errUpdate := resource.Retry(readRetryTimeout, func() *resource.RetryError { + errUpdate := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, infos, has, e := cynosdbService.DescribeInstanceById(ctx, instanceId) if e != nil { return resource.NonRetryableError(e) @@ -600,7 +603,7 @@ func resourceTencentCloudCynosdbClusterUpdate(d *schema.ResourceData, meta inter var ( asyncRequestId string ) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { aReqId, modifyErr := cynosdbService.ModifyClusterParam(ctx, request) if modifyErr != nil { err := modifyErr.(*sdkErrors.TencentCloudSDKError) @@ -618,7 +621,7 @@ func resourceTencentCloudCynosdbClusterUpdate(d *schema.ResourceData, meta inter mysqlService := MysqlService{client: client} - _ = resource.Retry(readRetryTimeout, func() *resource.RetryError { + _ = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId) if err != nil { return resource.NonRetryableError(err) @@ -644,7 +647,7 @@ func resourceTencentCloudCynosdbClusterUpdate(d *schema.ResourceData, meta inter oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("cynosdb", "cluster", region, clusterId) + resourceName := tccommon.BuildTagResourceName("cynosdb", "cluster", region, clusterId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -733,14 +736,14 @@ func resourceTencentCloudCynosdbClusterUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudCynosdbClusterDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) clusterID := d.Id() cynosdbService := CynosdbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } forceDelete := d.Get("force_delete").(bool) @@ -753,7 +756,7 @@ func resourceTencentCloudCynosdbClusterDelete(d *schema.ResourceData, meta inter return err } - conf := BuildStateChangeConf([]string{}, []string{"isolated"}, 2*readRetryTimeout, time.Second, cynosdbService.CynosdbInstanceIsolateStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"isolated"}, 2*tccommon.ReadRetryTimeout, time.Second, cynosdbService.CynosdbInstanceIsolateStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { return e @@ -764,7 +767,7 @@ func resourceTencentCloudCynosdbClusterDelete(d *schema.ResourceData, meta inter return err } - conf := BuildStateChangeConf([]string{}, []string{"offlined"}, 2*readRetryTimeout, time.Second, cynosdbService.CynosdbInstanceOfflineStateRefreshFunc(d.Id(), []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{"offlined"}, 2*tccommon.ReadRetryTimeout, time.Second, cynosdbService.CynosdbInstanceOfflineStateRefreshFunc(d.Id(), []string{})) if _, e := conf.WaitForState(); e != nil { if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok { diff --git a/tencentcloud/resource_tc_cynosdb_cluster_databases.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_databases.go similarity index 81% rename from tencentcloud/resource_tc_cynosdb_cluster_databases.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_databases.go index 606afc4d60..9c0b55d287 100644 --- a/tencentcloud/resource_tc_cynosdb_cluster_databases.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_databases.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbClusterDatabases() *schema.Resource { +func ResourceTencentCloudCynosdbClusterDatabases() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbClusterDatabasesCreate, Read: resourceTencentCloudCynosdbClusterDatabasesRead, @@ -81,10 +84,10 @@ func resourceTencentCloudCynosdbClusterDatabases() *schema.Resource { } func resourceTencentCloudCynosdbClusterDatabasesCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster_databases.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster_databases.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cynosdb.NewCreateClusterDatabaseRequest() @@ -130,10 +133,10 @@ func resourceTencentCloudCynosdbClusterDatabasesCreate(d *schema.ResourceData, m request.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().CreateClusterDatabase(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().CreateClusterDatabase(request) if e != nil { - return retryError(e) + 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()) } @@ -144,21 +147,21 @@ func resourceTencentCloudCynosdbClusterDatabasesCreate(d *schema.ResourceData, m return err } - d.SetId(clusterId + FILED_SP + dbName) + d.SetId(clusterId + tccommon.FILED_SP + dbName) return resourceTencentCloudCynosdbClusterDatabasesRead(d, meta) } func resourceTencentCloudCynosdbClusterDatabasesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster_databases.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster_databases.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -224,14 +227,14 @@ func resourceTencentCloudCynosdbClusterDatabasesRead(d *schema.ResourceData, met } func resourceTencentCloudCynosdbClusterDatabasesUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster_databases.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster_databases.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cynosdb.NewModifyClusterDatabaseRequest() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -286,10 +289,10 @@ func resourceTencentCloudCynosdbClusterDatabasesUpdate(d *schema.ResourceData, m request.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyClusterDatabase(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyClusterDatabase(request) if e != nil { - return retryError(e) + 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()) } @@ -304,14 +307,14 @@ func resourceTencentCloudCynosdbClusterDatabasesUpdate(d *schema.ResourceData, m } func resourceTencentCloudCynosdbClusterDatabasesDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster_databases.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster_databases.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_cynosdb_cluster_databases_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_databases_test.go similarity index 80% rename from tencentcloud/resource_tc_cynosdb_cluster_databases_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_databases_test.go index 8ad81c1aac..1963686055 100644 --- a/tencentcloud/resource_tc_cynosdb_cluster_databases_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_databases_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb_test import ( "context" @@ -6,6 +6,10 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccynosdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cynosdb" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,8 +18,8 @@ import ( func TestAccTencentCloudCynosdbClusterDatabasesResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckClusterDatabasesDestroy, Steps: []resource.TestStep{ { @@ -23,7 +27,7 @@ func TestAccTencentCloudCynosdbClusterDatabasesResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckClusterDatabasesExists("tencentcloud_cynosdb_cluster_databases.cluster_databases"), resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_cluster_databases.cluster_databases", "id"), - resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_databases.cluster_databases", "cluster_id", defaultCynosdbClusterId), + resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_databases.cluster_databases", "cluster_id", tcacctest.DefaultCynosdbClusterId), resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_databases.cluster_databases", "character_set", "utf8"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_databases.cluster_databases", "collate_rule", "utf8_general_ci"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_databases.cluster_databases", "db_name", "terraform-test"), @@ -44,7 +48,7 @@ func TestAccTencentCloudCynosdbClusterDatabasesResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckClusterDatabasesExists("tencentcloud_cynosdb_cluster_databases.cluster_databases"), resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_cluster_databases.cluster_databases", "id"), - resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_databases.cluster_databases", "cluster_id", defaultCynosdbClusterId), + resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_databases.cluster_databases", "cluster_id", tcacctest.DefaultCynosdbClusterId), resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_databases.cluster_databases", "character_set", "utf8"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_databases.cluster_databases", "collate_rule", "utf8_general_ci"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_databases.cluster_databases", "db_name", "terraform-test"), @@ -60,18 +64,16 @@ func TestAccTencentCloudCynosdbClusterDatabasesResource_basic(t *testing.T) { } func testAccCheckClusterDatabasesDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cynosdbService := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cynosdb_cluster_databases" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -92,8 +94,8 @@ func testAccCheckClusterDatabasesDestroy(s *terraform.State) error { func testAccCheckClusterDatabasesExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -102,11 +104,9 @@ func testAccCheckClusterDatabasesExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cynosdb cluster databases id is not set") } - cynosdbService := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -124,7 +124,7 @@ func testAccCheckClusterDatabasesExists(n string) resource.TestCheckFunc { } } -const testAccCynosdbClusterDatabases = CommonCynosdb + ` +const testAccCynosdbClusterDatabases = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_cluster_databases" "cluster_databases" { cluster_id = var.cynosdb_cluster_id @@ -141,7 +141,7 @@ resource "tencentcloud_cynosdb_cluster_databases" "cluster_databases" { ` -const testAccCynosdbClusterDatabasesUp = CommonCynosdb + ` +const testAccCynosdbClusterDatabasesUp = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_cluster_databases" "cluster_databases" { cluster_id = var.cynosdb_cluster_id diff --git a/tencentcloud/resource_tc_cynosdb_cluster_password_complexity.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_password_complexity.go similarity index 81% rename from tencentcloud/resource_tc_cynosdb_cluster_password_complexity.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_password_complexity.go index cc7f016288..e4d404d4cf 100644 --- a/tencentcloud/resource_tc_cynosdb_cluster_password_complexity.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_password_complexity.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -7,14 +7,17 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbClusterPasswordComplexity() *schema.Resource { +func ResourceTencentCloudCynosdbClusterPasswordComplexity() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbClusterPasswordComplexityCreate, Read: resourceTencentCloudCynosdbClusterPasswordComplexityRead, @@ -74,11 +77,11 @@ func resourceTencentCloudCynosdbClusterPasswordComplexity() *schema.Resource { } func resourceTencentCloudCynosdbClusterPasswordComplexityCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster_password_complexity.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster_password_complexity.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cynosdb.NewOpenClusterPasswordComplexityRequest() @@ -118,10 +121,10 @@ func resourceTencentCloudCynosdbClusterPasswordComplexityCreate(d *schema.Resour } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().OpenClusterPasswordComplexity(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().OpenClusterPasswordComplexity(request) if e != nil { - return retryError(e) + 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()) } @@ -136,8 +139,8 @@ func resourceTencentCloudCynosdbClusterPasswordComplexityCreate(d *schema.Resour d.SetId(clusterId) flowId := *response.Response.FlowId - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -168,13 +171,13 @@ func resourceTencentCloudCynosdbClusterPasswordComplexityCreate(d *schema.Resour } func resourceTencentCloudCynosdbClusterPasswordComplexityRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster_password_complexity.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster_password_complexity.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId := d.Id() @@ -238,11 +241,11 @@ func resourceTencentCloudCynosdbClusterPasswordComplexityRead(d *schema.Resource } func resourceTencentCloudCynosdbClusterPasswordComplexityUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster_password_complexity.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster_password_complexity.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cynosdb.NewModifyClusterPasswordComplexityRequest() @@ -280,10 +283,10 @@ func resourceTencentCloudCynosdbClusterPasswordComplexityUpdate(d *schema.Resour } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyClusterPasswordComplexity(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyClusterPasswordComplexity(request) if e != nil { - return retryError(e) + 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()) } @@ -296,8 +299,8 @@ func resourceTencentCloudCynosdbClusterPasswordComplexityUpdate(d *schema.Resour } flowId := *response.Response.FlowId - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -328,13 +331,13 @@ func resourceTencentCloudCynosdbClusterPasswordComplexityUpdate(d *schema.Resour } func resourceTencentCloudCynosdbClusterPasswordComplexityDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster_password_complexity.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster_password_complexity.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId := d.Id() flowId, err := service.DeleteCynosdbClusterPasswordComplexityById(ctx, clusterId) @@ -342,7 +345,7 @@ func resourceTencentCloudCynosdbClusterPasswordComplexityDelete(d *schema.Resour return err } - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { diff --git a/tencentcloud/resource_tc_cynosdb_cluster_password_complexity_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_password_complexity_test.go similarity index 83% rename from tencentcloud/resource_tc_cynosdb_cluster_password_complexity_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_password_complexity_test.go index be65eeeeda..9432ce541c 100644 --- a/tencentcloud/resource_tc_cynosdb_cluster_password_complexity_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_password_complexity_test.go @@ -1,10 +1,14 @@ -package tencentcloud +package cynosdb_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccynosdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cynosdb" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudCynosdbClusterPasswordComplexityResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCynosdbClusterPasswordComplexityDestroy, Steps: []resource.TestStep{ { @@ -22,7 +26,7 @@ func TestAccTencentCloudCynosdbClusterPasswordComplexityResource_basic(t *testin Check: resource.ComposeTestCheckFunc( testAccCheckCynosdbClusterPasswordComplexityExists("tencentcloud_cynosdb_cluster_password_complexity.cluster_password_complexity"), resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_cluster_password_complexity.cluster_password_complexity", "id"), - resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_password_complexity.cluster_password_complexity", "cluster_id", defaultCynosdbClusterId), + resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_password_complexity.cluster_password_complexity", "cluster_id", tcacctest.DefaultCynosdbClusterId), resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_password_complexity.cluster_password_complexity", "validate_password_length", "8"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_password_complexity.cluster_password_complexity", "validate_password_mixed_case_count", "1"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_password_complexity.cluster_password_complexity", "validate_password_special_char_count", "1"), @@ -41,7 +45,7 @@ func TestAccTencentCloudCynosdbClusterPasswordComplexityResource_basic(t *testin Check: resource.ComposeTestCheckFunc( testAccCheckCynosdbClusterPasswordComplexityExists("tencentcloud_cynosdb_cluster_password_complexity.cluster_password_complexity"), resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_cluster_password_complexity.cluster_password_complexity", "id"), - resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_password_complexity.cluster_password_complexity", "cluster_id", defaultCynosdbClusterId), + resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_password_complexity.cluster_password_complexity", "cluster_id", tcacctest.DefaultCynosdbClusterId), resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_password_complexity.cluster_password_complexity", "validate_password_length", "10"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_password_complexity.cluster_password_complexity", "validate_password_mixed_case_count", "2"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster_password_complexity.cluster_password_complexity", "validate_password_special_char_count", "2"), @@ -55,12 +59,10 @@ func TestAccTencentCloudCynosdbClusterPasswordComplexityResource_basic(t *testin } func testAccCheckCynosdbClusterPasswordComplexityDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cynosdbService := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cynosdb_cluster_password_complexity" { continue @@ -80,8 +82,8 @@ func testAccCheckCynosdbClusterPasswordComplexityDestroy(s *terraform.State) err func testAccCheckCynosdbClusterPasswordComplexityExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -90,9 +92,7 @@ func testAccCheckCynosdbClusterPasswordComplexityExists(n string) resource.TestC if rs.Primary.ID == "" { return fmt.Errorf("cynosdb cluster password complexity id is not set") } - cynosdbService := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) has, err := cynosdbService.DescribeCynosdbClusterPasswordComplexityById(ctx, rs.Primary.ID) if err != nil { return err @@ -104,7 +104,7 @@ func testAccCheckCynosdbClusterPasswordComplexityExists(n string) resource.TestC } } -const testAccCynosdbClusterPasswordComplexity = CommonCynosdb + ` +const testAccCynosdbClusterPasswordComplexity = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_cluster_password_complexity" "cluster_password_complexity" { cluster_id = var.cynosdb_cluster_id @@ -122,7 +122,7 @@ resource "tencentcloud_cynosdb_cluster_password_complexity" "cluster_password_co ` -const testAccCynosdbClusterPasswordComplexityUp = CommonCynosdb + ` +const testAccCynosdbClusterPasswordComplexityUp = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_cluster_password_complexity" "cluster_password_complexity" { cluster_id = var.cynosdb_cluster_id diff --git a/tencentcloud/resource_tc_cynosdb_cluster_resource_packages_attachment.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_resource_packages_attachment.go similarity index 73% rename from tencentcloud/resource_tc_cynosdb_cluster_resource_packages_attachment.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_resource_packages_attachment.go index 4a830517c4..d9da798e15 100644 --- a/tencentcloud/resource_tc_cynosdb_cluster_resource_packages_attachment.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_resource_packages_attachment.go @@ -1,17 +1,20 @@ -package tencentcloud +package cynosdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbClusterResourcePackagesAttachment() *schema.Resource { +func ResourceTencentCloudCynosdbClusterResourcePackagesAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbClusterResourcePackagesAttachmentCreate, Read: resourceTencentCloudCynosdbClusterResourcePackagesAttachmentRead, @@ -38,11 +41,11 @@ func resourceTencentCloudCynosdbClusterResourcePackagesAttachment() *schema.Reso } func resourceTencentCloudCynosdbClusterResourcePackagesAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster_resource_packages_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster_resource_packages_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = cynosdb.NewBindClusterResourcePackagesRequest() clusterId string ) @@ -60,10 +63,10 @@ func resourceTencentCloudCynosdbClusterResourcePackagesAttachmentCreate(d *schem } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().BindClusterResourcePackages(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().BindClusterResourcePackages(request) if e != nil { - return retryError(e) + 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()) } @@ -87,13 +90,13 @@ func resourceTencentCloudCynosdbClusterResourcePackagesAttachmentCreate(d *schem } func resourceTencentCloudCynosdbClusterResourcePackagesAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster_resource_packages_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster_resource_packages_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId = d.Id() ) @@ -126,13 +129,13 @@ func resourceTencentCloudCynosdbClusterResourcePackagesAttachmentRead(d *schema. } func resourceTencentCloudCynosdbClusterResourcePackagesAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster_resource_packages_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster_resource_packages_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} clusterId = d.Id() packageIdsSet []*string ) diff --git a/tencentcloud/resource_tc_cynosdb_cluster_resource_packages_attachment_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_resource_packages_attachment_test.go similarity index 83% rename from tencentcloud/resource_tc_cynosdb_cluster_resource_packages_attachment_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_resource_packages_attachment_test.go index efd741e317..fe5a0947cf 100644 --- a/tencentcloud/resource_tc_cynosdb_cluster_resource_packages_attachment_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_resource_packages_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCynosdbClusterResourcePackagesAttachmentResource_ t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) + tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PREPAY) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbClusterResourcePackagesAttachment, diff --git a/tencentcloud/resource_tc_cynosdb_cluster_slave_zone.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_slave_zone.go similarity index 69% rename from tencentcloud/resource_tc_cynosdb_cluster_slave_zone.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_slave_zone.go index cb9c0ab45a..f234bc6eea 100644 --- a/tencentcloud/resource_tc_cynosdb_cluster_slave_zone.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_slave_zone.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -7,14 +7,17 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbClusterSlaveZone() *schema.Resource { +func ResourceTencentCloudCynosdbClusterSlaveZone() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbClusterSlaveZoneCreate, Read: resourceTencentCloudCynosdbClusterSlaveZoneRead, @@ -45,12 +48,12 @@ func resourceTencentCloudCynosdbClusterSlaveZone() *schema.Resource { } func resourceTencentCloudCynosdbClusterSlaveZoneCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster_slave_zone.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster_slave_zone.create")() + defer tccommon.InconsistentCheck(d, meta)() timeout := d.Timeout(schema.TimeoutCreate) - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cynosdb.NewAddClusterSlaveZoneRequest() @@ -70,14 +73,14 @@ func resourceTencentCloudCynosdbClusterSlaveZoneCreate(d *schema.ResourceData, m } err := resource.Retry(timeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().AddClusterSlaveZone(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().AddClusterSlaveZone(request) if e != nil { if sdkErr, ok := e.(*sdkErrors.TencentCloudSDKError); ok { if sdkErr.Code == "FailedOperation.OperationFailedError" { return resource.NonRetryableError(e) } } - return retryError(e) + 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()) } @@ -95,29 +98,29 @@ func resourceTencentCloudCynosdbClusterSlaveZoneCreate(d *schema.ResourceData, m return fmt.Errorf("delete [%s] failed, reason: FlowId is null.\n", d.Id()) } - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} - conf := BuildStateChangeConf([]string{}, []string{CYNOSDB_FLOW_STATUS_SUCCESSFUL}, timeout, 3*time.Second, service.CynosdbClusterSlaveZoneStateRefreshFunc(*flowId, []string{})) + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + conf := tccommon.BuildStateChangeConf([]string{}, []string{CYNOSDB_FLOW_STATUS_SUCCESSFUL}, timeout, 3*time.Second, service.CynosdbClusterSlaveZoneStateRefreshFunc(*flowId, []string{})) if _, e := conf.WaitForState(); e != nil { return e } - d.SetId(strings.Join([]string{clusterId, slaveZone}, FILED_SP)) + d.SetId(strings.Join([]string{clusterId, slaveZone}, tccommon.FILED_SP)) return resourceTencentCloudCynosdbClusterSlaveZoneRead(d, meta) } func resourceTencentCloudCynosdbClusterSlaveZoneRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster_slave_zone.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster_slave_zone.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -152,17 +155,17 @@ func resourceTencentCloudCynosdbClusterSlaveZoneRead(d *schema.ResourceData, met } func resourceTencentCloudCynosdbClusterSlaveZoneUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster_slave_zone.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster_slave_zone.update")() + defer tccommon.InconsistentCheck(d, meta)() timeout := d.Timeout(schema.TimeoutUpdate) - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cynosdb.NewModifyClusterSlaveZoneRequest() var newSlaveZone string - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -189,9 +192,9 @@ func resourceTencentCloudCynosdbClusterSlaveZoneUpdate(d *schema.ResourceData, m var flowId *int64 err := resource.Retry(timeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyClusterSlaveZone(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyClusterSlaveZone(request) if e != nil { - return retryError(e) + 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()) } @@ -207,32 +210,32 @@ func resourceTencentCloudCynosdbClusterSlaveZoneUpdate(d *schema.ResourceData, m return fmt.Errorf("delete [%s] failed, reason: FlowId is null.\n", d.Id()) } - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - conf := BuildStateChangeConf([]string{}, []string{CYNOSDB_FLOW_STATUS_SUCCESSFUL}, timeout, time.Second, service.CynosdbClusterSlaveZoneStateRefreshFunc(*flowId, []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{CYNOSDB_FLOW_STATUS_SUCCESSFUL}, timeout, time.Second, service.CynosdbClusterSlaveZoneStateRefreshFunc(*flowId, []string{})) if _, e := conf.WaitForState(); e != nil { return e } // update the id - d.SetId(strings.Join([]string{clusterId, newSlaveZone}, FILED_SP)) + d.SetId(strings.Join([]string{clusterId, newSlaveZone}, tccommon.FILED_SP)) return resourceTencentCloudCynosdbClusterSlaveZoneRead(d, meta) } func resourceTencentCloudCynosdbClusterSlaveZoneDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_cluster_slave_zone.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_cluster_slave_zone.delete")() + defer tccommon.InconsistentCheck(d, meta)() timeout := d.Timeout(schema.TimeoutDelete) - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -252,7 +255,7 @@ func resourceTencentCloudCynosdbClusterSlaveZoneDelete(d *schema.ResourceData, m return fmt.Errorf("delete [%s] failed, reason: FlowId is null.\n", d.Id()) } - conf := BuildStateChangeConf([]string{}, []string{CYNOSDB_FLOW_STATUS_SUCCESSFUL}, timeout, time.Second, service.CynosdbClusterSlaveZoneStateRefreshFunc(*flowId, []string{})) + conf := tccommon.BuildStateChangeConf([]string{}, []string{CYNOSDB_FLOW_STATUS_SUCCESSFUL}, timeout, time.Second, service.CynosdbClusterSlaveZoneStateRefreshFunc(*flowId, []string{})) if _, e := conf.WaitForState(); e != nil { return e diff --git a/tencentcloud/resource_tc_cynosdb_cluster_slave_zone_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_slave_zone_test.go similarity index 91% rename from tencentcloud/resource_tc_cynosdb_cluster_slave_zone_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_slave_zone_test.go index d68ad88cb4..bf5239ba0c 100644 --- a/tencentcloud/resource_tc_cynosdb_cluster_slave_zone_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_slave_zone_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCynosdbClusterSlaveZoneResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbClusterSlaveZone, @@ -39,7 +41,7 @@ func TestAccTencentCloudCynosdbClusterSlaveZoneResource_basic(t *testing.T) { }) } -const testAccCynosdbClusterSlaveZone_instance = defaultSecurityGroupData + defaultVpcSubnets + ` +const testAccCynosdbClusterSlaveZone_instance = tcacctest.DefaultSecurityGroupData + tcacctest.DefaultVpcSubnets + ` variable "availability_zone" { default = "ap-guangzhou-4" } diff --git a/tencentcloud/resource_tc_cynosdb_cluster_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_test.go similarity index 91% rename from tencentcloud/resource_tc_cynosdb_cluster_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_test.go index 245f7aeeee..d0042d2f07 100644 --- a/tencentcloud/resource_tc_cynosdb_cluster_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_cluster_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb_test import ( "context" @@ -6,20 +6,25 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + + svccynosdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cynosdb" ) func init() { resource.AddTestSweepers("tencentcloud_cynosdb", &resource.Sweeper{ Name: "tencentcloud_cynosdb", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - client := cli.(*TencentCloudClient).apiV3Conn - service := CynosdbService{client: client} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + client := cli.(tccommon.ProviderMeta).GetAPIV3Conn() + service := svccynosdb.NewCynosdbService(client) instances, err := service.DescribeClusters(ctx, nil) @@ -54,8 +59,8 @@ func init() { func TestAccTencentCloudCynosdbClusterResourceBasic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCynosdbClusterDestroy, Steps: []resource.TestStep{ { @@ -80,7 +85,7 @@ func TestAccTencentCloudCynosdbClusterResourceBasic(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster.foo", "ro_group_sg.#", "1"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster.foo", "project_id", "0"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster.foo", "port", "5432"), - resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster.foo", "charge_type", CYNOSDB_CHARGE_TYPE_POSTPAID), + resource.TestCheckResourceAttr("tencentcloud_cynosdb_cluster.foo", "charge_type", svccynosdb.CYNOSDB_CHARGE_TYPE_POSTPAID), resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_cluster.foo", "instance_id"), resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_cluster.foo", "instance_name"), resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_cluster.foo", "instance_status"), @@ -135,8 +140,8 @@ func TestAccTencentCloudCynosdbClusterResourceBasic(t *testing.T) { func TestAccTencentCloudCynosdbClusterResourceServerless(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCynosdbClusterDestroy, Steps: []resource.TestStep{ { @@ -183,12 +188,10 @@ func TestAccTencentCloudCynosdbClusterResourceServerless(t *testing.T) { } func testAccCheckCynosdbClusterDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cynosdbService := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cynosdb_cluster" { continue @@ -213,8 +216,8 @@ func testAccCheckCynosdbClusterDestroy(s *terraform.State) error { func testAccCheckCynosdbClusterExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -223,9 +226,7 @@ func testAccCheckCynosdbClusterExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cynosdb cluster id is not set") } - cynosdbService := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, _, has, err := cynosdbService.DescribeClusterById(ctx, rs.Primary.ID) if err != nil { return err @@ -237,7 +238,7 @@ func testAccCheckCynosdbClusterExists(n string) resource.TestCheckFunc { } } -const testAccCynosdbBasic = defaultSecurityGroupData + ` +const testAccCynosdbBasic = tcacctest.DefaultSecurityGroupData + ` variable "availability_zone" { default = "ap-guangzhou-4" } diff --git a/tencentcloud/resource_tc_cynosdb_export_instance_error_logs.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_export_instance_error_logs.go similarity index 85% rename from tencentcloud/resource_tc_cynosdb_export_instance_error_logs.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_export_instance_error_logs.go index 4449cba219..f17b080792 100644 --- a/tencentcloud/resource_tc_cynosdb_export_instance_error_logs.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_export_instance_error_logs.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbExportInstanceErrorLogs() *schema.Resource { +func ResourceTencentCloudCynosdbExportInstanceErrorLogs() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbExportInstanceErrorLogsCreate, Read: resourceTencentCloudCynosdbExportInstanceErrorLogsRead, @@ -107,10 +110,10 @@ func resourceTencentCloudCynosdbExportInstanceErrorLogs() *schema.Resource { } func resourceTencentCloudCynosdbExportInstanceErrorLogsCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_export_instance_error_logs.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_export_instance_error_logs.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cynosdb.NewExportInstanceErrorLogsRequest() @@ -158,10 +161,10 @@ func resourceTencentCloudCynosdbExportInstanceErrorLogsCreate(d *schema.Resource request.OrderByType = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ExportInstanceErrorLogs(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ExportInstanceErrorLogs(request) if e != nil { - return retryError(e) + 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()) } @@ -199,15 +202,15 @@ func resourceTencentCloudCynosdbExportInstanceErrorLogsCreate(d *schema.Resource } func resourceTencentCloudCynosdbExportInstanceErrorLogsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_export_instance_error_logs.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_export_instance_error_logs.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCynosdbExportInstanceErrorLogsDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_export_instance_error_logs.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_export_instance_error_logs.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cynosdb_export_instance_error_logs_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_export_instance_error_logs_test.go similarity index 84% rename from tencentcloud/resource_tc_cynosdb_export_instance_error_logs_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_export_instance_error_logs_test.go index 1620e6d2df..f06e8f80c2 100644 --- a/tencentcloud/resource_tc_cynosdb_export_instance_error_logs_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_export_instance_error_logs_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCynosdbExportInstanceErrorLogsResource_basic(t *testing. t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbExportInstanceErrorLogs, @@ -29,7 +31,7 @@ func TestAccTencentCloudCynosdbExportInstanceErrorLogsResource_basic(t *testing. }) } -const testAccCynosdbExportInstanceErrorLogs = CommonCynosdb + ` +const testAccCynosdbExportInstanceErrorLogs = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_export_instance_error_logs" "export_instance_error_logs" { instance_id = var.cynosdb_cluster_instance_id diff --git a/tencentcloud/resource_tc_cynosdb_export_instance_slow_queries.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_export_instance_slow_queries.go similarity index 80% rename from tencentcloud/resource_tc_cynosdb_export_instance_slow_queries.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_export_instance_slow_queries.go index 30d4650a0b..521adc993c 100644 --- a/tencentcloud/resource_tc_cynosdb_export_instance_slow_queries.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_export_instance_slow_queries.go @@ -1,15 +1,18 @@ -package tencentcloud +package cynosdb import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbExportInstanceSlowQueries() *schema.Resource { +func ResourceTencentCloudCynosdbExportInstanceSlowQueries() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbExportInstanceSlowQueriesCreate, Read: resourceTencentCloudCynosdbExportInstanceSlowQueriesRead, @@ -75,10 +78,10 @@ func resourceTencentCloudCynosdbExportInstanceSlowQueries() *schema.Resource { } func resourceTencentCloudCynosdbExportInstanceSlowQueriesCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_export_instance_slow_queries.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_export_instance_slow_queries.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cynosdb.NewExportInstanceSlowQueriesRequest() @@ -114,10 +117,10 @@ func resourceTencentCloudCynosdbExportInstanceSlowQueriesCreate(d *schema.Resour request.FileType = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ExportInstanceSlowQueries(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ExportInstanceSlowQueries(request) if e != nil { - return retryError(e) + 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()) } @@ -139,15 +142,15 @@ func resourceTencentCloudCynosdbExportInstanceSlowQueriesCreate(d *schema.Resour } func resourceTencentCloudCynosdbExportInstanceSlowQueriesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_export_instance_slow_queries.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_export_instance_slow_queries.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCynosdbExportInstanceSlowQueriesDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_export_instance_slow_queries.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_export_instance_slow_queries.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cynosdb_export_instance_slow_queries_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_export_instance_slow_queries_test.go similarity index 78% rename from tencentcloud/resource_tc_cynosdb_export_instance_slow_queries_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_export_instance_slow_queries_test.go index 6b74120881..7db5bce108 100644 --- a/tencentcloud/resource_tc_cynosdb_export_instance_slow_queries_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_export_instance_slow_queries_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCynosdbExportInstanceSlowQueriesResource_basic(t *testin t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbExportInstanceSlowQueries, @@ -26,7 +28,7 @@ func TestAccTencentCloudCynosdbExportInstanceSlowQueriesResource_basic(t *testin }) } -const testAccCynosdbExportInstanceSlowQueries = CommonCynosdb + ` +const testAccCynosdbExportInstanceSlowQueries = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_export_instance_slow_queries" "export_instance_slow_queries" { instance_id = var.cynosdb_cluster_instance_id diff --git a/tencentcloud/resource_tc_cynosdb_instance_param.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_instance_param.go similarity index 79% rename from tencentcloud/resource_tc_cynosdb_instance_param.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_instance_param.go index 77e41b613b..9f3ef5a6bd 100644 --- a/tencentcloud/resource_tc_cynosdb_instance_param.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_instance_param.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbInstanceParam() *schema.Resource { +func ResourceTencentCloudCynosdbInstanceParam() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbInstanceParamCreate, Read: resourceTencentCloudCynosdbInstanceParamRead, @@ -65,8 +68,8 @@ func resourceTencentCloudCynosdbInstanceParam() *schema.Resource { } func resourceTencentCloudCynosdbInstanceParamCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_instance_param.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_instance_param.create")() + defer tccommon.InconsistentCheck(d, meta)() var clusterId string if v, ok := d.GetOk("cluster_id"); ok { @@ -78,21 +81,21 @@ func resourceTencentCloudCynosdbInstanceParamCreate(d *schema.ResourceData, meta instanceId = v.(string) } - d.SetId(clusterId + FILED_SP + instanceId) + d.SetId(clusterId + tccommon.FILED_SP + instanceId) return resourceTencentCloudCynosdbInstanceParamUpdate(d, meta) } func resourceTencentCloudCynosdbInstanceParamRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_instance_param.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_instance_param.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -144,15 +147,15 @@ func resourceTencentCloudCynosdbInstanceParamRead(d *schema.ResourceData, meta i } func resourceTencentCloudCynosdbInstanceParamUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_instance_param.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_instance_param.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cynosdb.NewModifyInstanceParamRequest() response := cynosdb.NewModifyInstanceParamResponse() - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -194,10 +197,10 @@ func resourceTencentCloudCynosdbInstanceParamUpdate(d *schema.ResourceData, meta request.IsInMaintainPeriod = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyInstanceParam(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyInstanceParam(request) if e != nil { - return retryError(e) + 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()) } @@ -210,8 +213,8 @@ func resourceTencentCloudCynosdbInstanceParamUpdate(d *schema.ResourceData, meta } flowId := *response.Response.FlowId - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -236,8 +239,8 @@ func resourceTencentCloudCynosdbInstanceParamUpdate(d *schema.ResourceData, meta } func resourceTencentCloudCynosdbInstanceParamDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_instance_param.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_instance_param.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cynosdb_instance_param_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_instance_param_test.go similarity index 83% rename from tencentcloud/resource_tc_cynosdb_instance_param_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_instance_param_test.go index d897c9a835..de1eda0d0d 100644 --- a/tencentcloud/resource_tc_cynosdb_instance_param_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_instance_param_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,15 +13,15 @@ func TestAccTencentCloudCynosdbInstanceParamResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbInstanceParam, Check: resource.ComposeTestCheckFunc( resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_instance_param.instance_param", "id"), - resource.TestCheckResourceAttr("tencentcloud_cynosdb_instance_param.instance_param", "cluster_id", defaultCynosdbClusterId), + resource.TestCheckResourceAttr("tencentcloud_cynosdb_instance_param.instance_param", "cluster_id", tcacctest.DefaultCynosdbClusterId), resource.TestCheckResourceAttr("tencentcloud_cynosdb_instance_param.instance_param", "instance_id", "cynosdbmysql-ins-rikr6z4o"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_instance_param.instance_param", "is_in_maintain_period", "no"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_instance_param.instance_param", "instance_param_list.#", "1"), @@ -31,7 +33,7 @@ func TestAccTencentCloudCynosdbInstanceParamResource_basic(t *testing.T) { }) } -const testAccCynosdbInstanceParam = CommonCynosdb + ` +const testAccCynosdbInstanceParam = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_instance_param" "instance_param" { cluster_id = var.cynosdb_cluster_id diff --git a/tencentcloud/resource_tc_cynosdb_isolate_instance.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_isolate_instance.go similarity index 70% rename from tencentcloud/resource_tc_cynosdb_isolate_instance.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_isolate_instance.go index b2fc33271c..d72b4cefc5 100644 --- a/tencentcloud/resource_tc_cynosdb_isolate_instance.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_isolate_instance.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -6,13 +6,15 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" ) -func resourceTencentCloudCynosdbIsolateInstance() *schema.Resource { +func ResourceTencentCloudCynosdbIsolateInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbIsolateInstanceCreate, Read: resourceTencentCloudCynosdbIsolateInstanceRead, @@ -44,8 +46,8 @@ func resourceTencentCloudCynosdbIsolateInstance() *schema.Resource { } func resourceTencentCloudCynosdbIsolateInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_isolate_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_isolate_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( clusterId string @@ -59,26 +61,26 @@ func resourceTencentCloudCynosdbIsolateInstanceCreate(d *schema.ResourceData, me instanceId = v.(string) } - d.SetId(clusterId + FILED_SP + instanceId) + d.SetId(clusterId + tccommon.FILED_SP + instanceId) return resourceTencentCloudCynosdbIsolateInstanceUpdate(d, meta) } func resourceTencentCloudCynosdbIsolateInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_isolate_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_isolate_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCynosdbIsolateInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_isolate_instance.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_isolate_instance.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -95,10 +97,10 @@ func resourceTencentCloudCynosdbIsolateInstanceUpdate(d *schema.ResourceData, me request := cynosdb.NewIsolateInstanceRequest() request.ClusterId = &clusterId request.InstanceIdList = []*string{&instanceId} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().IsolateInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().IsolateInstance(request) if e != nil { - return retryError(e) + 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()) } @@ -114,10 +116,10 @@ func resourceTencentCloudCynosdbIsolateInstanceUpdate(d *schema.ResourceData, me request.ClusterId = &clusterId request.InstanceIdList = []*string{&instanceId} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ActivateInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ActivateInstance(request) if e != nil { - return retryError(e) + 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()) } @@ -132,8 +134,8 @@ func resourceTencentCloudCynosdbIsolateInstanceUpdate(d *schema.ResourceData, me return fmt.Errorf("[CRITAL]%s Operation type error", logId) } - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} - err := resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err := resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -158,8 +160,8 @@ func resourceTencentCloudCynosdbIsolateInstanceUpdate(d *schema.ResourceData, me } func resourceTencentCloudCynosdbIsolateInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_isolate_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_isolate_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cynosdb_isolate_instance_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_isolate_instance_test.go similarity index 78% rename from tencentcloud/resource_tc_cynosdb_isolate_instance_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_isolate_instance_test.go index 85a2b6626f..c440f3a3ce 100644 --- a/tencentcloud/resource_tc_cynosdb_isolate_instance_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_isolate_instance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCynosdbIsolateInstanceResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbIsolateInstance, @@ -31,7 +33,7 @@ func TestAccTencentCloudCynosdbIsolateInstanceResource_basic(t *testing.T) { }) } -const testAccCynosdbIsolateInstance = CommonCynosdb + ` +const testAccCynosdbIsolateInstance = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_isolate_instance" "isolate_instance" { cluster_id = var.cynosdb_cluster_id @@ -41,7 +43,7 @@ resource "tencentcloud_cynosdb_isolate_instance" "isolate_instance" { ` -const testAccCynosdbIsolateInstanceUp = CommonCynosdb + ` +const testAccCynosdbIsolateInstanceUp = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_isolate_instance" "isolate_instance" { cluster_id = var.cynosdb_cluster_id diff --git a/tencentcloud/resource_tc_cynosdb_param_template.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_param_template.go similarity index 83% rename from tencentcloud/resource_tc_cynosdb_param_template.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_param_template.go index f9d3078ef2..d6e3dd0d79 100644 --- a/tencentcloud/resource_tc_cynosdb_param_template.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_param_template.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbParamTemplate() *schema.Resource { +func ResourceTencentCloudCynosdbParamTemplate() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbParamTemplateCreate, Read: resourceTencentCloudCynosdbParamTemplateRead, @@ -78,10 +81,10 @@ func resourceTencentCloudCynosdbParamTemplate() *schema.Resource { } func resourceTencentCloudCynosdbParamTemplateCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_param_template.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_param_template.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cynosdb.NewCreateParamTemplateRequest() @@ -121,10 +124,10 @@ func resourceTencentCloudCynosdbParamTemplateCreate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().CreateParamTemplate(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().CreateParamTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -143,13 +146,13 @@ func resourceTencentCloudCynosdbParamTemplateCreate(d *schema.ResourceData, meta } func resourceTencentCloudCynosdbParamTemplateRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_param_template.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_param_template.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId, err := strconv.ParseInt(d.Id(), 10, 64) if err != nil { @@ -225,10 +228,10 @@ func resourceTencentCloudCynosdbParamTemplateRead(d *schema.ResourceData, meta i } func resourceTencentCloudCynosdbParamTemplateUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_param_template.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_param_template.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cynosdb.NewModifyParamTemplateRequest() templateId, err := strconv.ParseInt(d.Id(), 10, 64) @@ -287,10 +290,10 @@ func resourceTencentCloudCynosdbParamTemplateUpdate(d *schema.ResourceData, meta } } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyParamTemplate(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyParamTemplate(request) if e != nil { - return retryError(e) + 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()) } @@ -305,13 +308,13 @@ func resourceTencentCloudCynosdbParamTemplateUpdate(d *schema.ResourceData, meta } func resourceTencentCloudCynosdbParamTemplateDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_param_template.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_param_template.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} templateId, err := strconv.ParseInt(d.Id(), 10, 64) if err != nil { return err diff --git a/tencentcloud/resource_tc_cynosdb_param_template_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_param_template_test.go similarity index 95% rename from tencentcloud/resource_tc_cynosdb_param_template_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_param_template_test.go index 8ebf0e7878..f147d5380e 100644 --- a/tencentcloud/resource_tc_cynosdb_param_template_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_param_template_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cynosdb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccynosdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cynosdb" + "context" "fmt" "strconv" @@ -14,8 +18,8 @@ import ( func TestAccTencentCloudCynosdbParamTemplateResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCynosdbParamTemplateDestroy, Steps: []resource.TestStep{ { @@ -35,12 +39,10 @@ func TestAccTencentCloudCynosdbParamTemplateResource_basic(t *testing.T) { } func testAccCheckCynosdbParamTemplateDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cynosdbService := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cynosdb_param_template" { continue @@ -66,8 +68,8 @@ func testAccCheckCynosdbParamTemplateDestroy(s *terraform.State) error { func testAccCheckCynosdbParamTemplateExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -76,9 +78,7 @@ func testAccCheckCynosdbParamTemplateExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cynosdb cluster param template id is not set") } - cynosdbService := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) templateId, err := strconv.ParseInt(rs.Primary.ID, 10, 64) if err != nil { @@ -694,7 +694,7 @@ resource "tencentcloud_cynosdb_param_template" "param_template" { } param_list { current_value = "OFF" - param_name = "explicit_defaults_for_timestamp" + param_name = "explicit_tcacctest.Defaults_for_timestamp" } param_list { current_value = "OFF" @@ -885,7 +885,7 @@ resource "tencentcloud_cynosdb_param_template" "param_template" { param_name = "slow_query_log" } param_list { - current_value = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" + current_value = "ONLY_tcacctest.FULL_GROUP_BY,STRICT_tcacctest.TRANS_TABLES,NO_tcacctest.ZERO_IN_DATE,NO_tcacctest.ZERO_DATE,ERROR_tcacctest.FOR_DIVISION_BY_ZERO,NO_tcacctest.AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" param_name = "sql_mode" } param_list { diff --git a/tencentcloud/resource_tc_cynosdb_proxy.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_proxy.go similarity index 83% rename from tencentcloud/resource_tc_cynosdb_proxy.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_proxy.go index bf8b1a8696..13b5832f84 100644 --- a/tencentcloud/resource_tc_cynosdb_proxy.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_proxy.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -6,15 +6,18 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbProxy() *schema.Resource { +func ResourceTencentCloudCynosdbProxy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbProxyCreate, Read: resourceTencentCloudCynosdbProxyRead, @@ -132,13 +135,13 @@ func resourceTencentCloudCynosdbProxy() *schema.Resource { } func resourceTencentCloudCynosdbProxyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_proxy.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_proxy.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = cynosdb.NewCreateProxyRequest() response = cynosdb.NewCreateProxyResponse() clusterId string @@ -209,10 +212,10 @@ func resourceTencentCloudCynosdbProxyCreate(d *schema.ResourceData, meta interfa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().CreateProxy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().CreateProxy(request) if e != nil { - return retryError(e) + 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()) } @@ -232,7 +235,7 @@ func resourceTencentCloudCynosdbProxyCreate(d *schema.ResourceData, meta interfa } flowId = *response.Response.FlowId - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -272,22 +275,22 @@ func resourceTencentCloudCynosdbProxyCreate(d *schema.ResourceData, meta interfa } } - d.SetId(strings.Join([]string{clusterId, proxyGroupId}, FILED_SP)) + d.SetId(strings.Join([]string{clusterId, proxyGroupId}, tccommon.FILED_SP)) return resourceTencentCloudCynosdbProxyRead(d, meta) } func resourceTencentCloudCynosdbProxyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_proxy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_proxy.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -402,20 +405,20 @@ func resourceTencentCloudCynosdbProxyRead(d *schema.ResourceData, meta interface } func resourceTencentCloudCynosdbProxyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_proxy.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_proxy.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} switchProxyRequest = cynosdb.NewSwitchProxyVpcRequest() modifyProxyDescRequest = cynosdb.NewModifyProxyDescRequest() upgradeProxyRequest = cynosdb.NewUpgradeProxyRequest() flowId int64 ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -444,10 +447,10 @@ func resourceTencentCloudCynosdbProxyUpdate(d *schema.ResourceData, meta interfa switchProxyRequest.UniqSubnetId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().SwitchProxyVpc(switchProxyRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().SwitchProxyVpc(switchProxyRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, switchProxyRequest.GetAction(), switchProxyRequest.ToJsonString(), result.ToJsonString()) } @@ -461,7 +464,7 @@ func resourceTencentCloudCynosdbProxyUpdate(d *schema.ResourceData, meta interfa return err } - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -492,10 +495,10 @@ func resourceTencentCloudCynosdbProxyUpdate(d *schema.ResourceData, meta interfa modifyProxyDescRequest.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyProxyDesc(modifyProxyDescRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyProxyDesc(modifyProxyDescRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyProxyDescRequest.GetAction(), modifyProxyDescRequest.ToJsonString(), result.ToJsonString()) } @@ -538,10 +541,10 @@ func resourceTencentCloudCynosdbProxyUpdate(d *schema.ResourceData, meta interfa } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().UpgradeProxy(upgradeProxyRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().UpgradeProxy(upgradeProxyRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, switchProxyRequest.GetAction(), switchProxyRequest.ToJsonString(), result.ToJsonString()) } @@ -555,7 +558,7 @@ func resourceTencentCloudCynosdbProxyUpdate(d *schema.ResourceData, meta interfa return err } - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -582,16 +585,16 @@ func resourceTencentCloudCynosdbProxyUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudCynosdbProxyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_proxy.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_proxy.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -603,7 +606,7 @@ func resourceTencentCloudCynosdbProxyDelete(d *schema.ResourceData, meta interfa return err } - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, *flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { diff --git a/tencentcloud/resource_tc_cynosdb_proxy_end_point.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_proxy_end_point.go similarity index 87% rename from tencentcloud/resource_tc_cynosdb_proxy_end_point.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_proxy_end_point.go index 925dfe9496..9ab732b0d4 100644 --- a/tencentcloud/resource_tc_cynosdb_proxy_end_point.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_proxy_end_point.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbProxyEndPoint() *schema.Resource { +func ResourceTencentCloudCynosdbProxyEndPoint() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbProxyEndPointCreate, Read: resourceTencentCloudCynosdbProxyEndPointRead, @@ -161,13 +164,13 @@ func resourceTencentCloudCynosdbProxyEndPoint() *schema.Resource { } func resourceTencentCloudCynosdbProxyEndPointCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_proxy_end_point.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_proxy_end_point.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = cynosdb.NewCreateProxyEndPointRequest() response = cynosdb.NewCreateProxyEndPointResponse() modifyVipVportRequest = cynosdb.NewModifyVipVportRequest() @@ -300,10 +303,10 @@ func resourceTencentCloudCynosdbProxyEndPointCreate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().CreateProxyEndPoint(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().CreateProxyEndPoint(request) if e != nil { - return retryError(e) + 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()) } @@ -319,7 +322,7 @@ func resourceTencentCloudCynosdbProxyEndPointCreate(d *schema.ResourceData, meta proxyGroupId = *response.Response.ProxyGroupId flowId = *response.Response.FlowId - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -362,10 +365,10 @@ func resourceTencentCloudCynosdbProxyEndPointCreate(d *schema.ResourceData, meta modifyVipVportRequest.Vport = vPort modifyVipVportRequest.OldIpReserveHours = helper.IntInt64(0) - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyVipVport(modifyVipVportRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyVipVport(modifyVipVportRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyVipVportRequest.GetAction(), modifyVipVportRequest.ToJsonString(), result.ToJsonString()) } @@ -379,7 +382,7 @@ func resourceTencentCloudCynosdbProxyEndPointCreate(d *schema.ResourceData, meta return err } - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -402,22 +405,22 @@ func resourceTencentCloudCynosdbProxyEndPointCreate(d *schema.ResourceData, meta } } - d.SetId(strings.Join([]string{clusterId, proxyGroupId, instanceGroupId}, FILED_SP)) + d.SetId(strings.Join([]string{clusterId, proxyGroupId, instanceGroupId}, tccommon.FILED_SP)) return resourceTencentCloudCynosdbProxyEndPointRead(d, meta) } func resourceTencentCloudCynosdbProxyEndPointRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_proxy_end_point.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_proxy_end_point.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -539,13 +542,13 @@ func resourceTencentCloudCynosdbProxyEndPointRead(d *schema.ResourceData, meta i } func resourceTencentCloudCynosdbProxyEndPointUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_proxy_end_point.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_proxy_end_point.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} switchProxyVpcRequest = cynosdb.NewSwitchProxyVpcRequest() modifyProxyRwSplitRequest = cynosdb.NewModifyProxyRwSplitRequest() modifyProxyDescRequest = cynosdb.NewModifyProxyDescRequest() @@ -561,7 +564,7 @@ func resourceTencentCloudCynosdbProxyEndPointUpdate(d *schema.ResourceData, meta } } - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -660,10 +663,10 @@ func resourceTencentCloudCynosdbProxyEndPointUpdate(d *schema.ResourceData, meta } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyProxyRwSplit(modifyProxyRwSplitRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyProxyRwSplit(modifyProxyRwSplitRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyProxyRwSplitRequest.GetAction(), modifyProxyRwSplitRequest.ToJsonString(), result.ToJsonString()) } @@ -677,7 +680,7 @@ func resourceTencentCloudCynosdbProxyEndPointUpdate(d *schema.ResourceData, meta return err } - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -713,10 +716,10 @@ func resourceTencentCloudCynosdbProxyEndPointUpdate(d *schema.ResourceData, meta switchProxyVpcRequest.UniqSubnetId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().SwitchProxyVpc(switchProxyVpcRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().SwitchProxyVpc(switchProxyVpcRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, switchProxyVpcRequest.GetAction(), switchProxyVpcRequest.ToJsonString(), result.ToJsonString()) } @@ -730,7 +733,7 @@ func resourceTencentCloudCynosdbProxyEndPointUpdate(d *schema.ResourceData, meta return err } - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -761,10 +764,10 @@ func resourceTencentCloudCynosdbProxyEndPointUpdate(d *schema.ResourceData, meta modifyProxyDescRequest.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyProxyDesc(modifyProxyDescRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyProxyDesc(modifyProxyDescRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyProxyDescRequest.GetAction(), modifyProxyDescRequest.ToJsonString(), result.ToJsonString()) } @@ -791,10 +794,10 @@ func resourceTencentCloudCynosdbProxyEndPointUpdate(d *schema.ResourceData, meta modifyVipVportRequest.Vport = helper.IntInt64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyVipVport(modifyVipVportRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyVipVport(modifyVipVportRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyVipVportRequest.GetAction(), modifyVipVportRequest.ToJsonString(), result.ToJsonString()) } @@ -808,7 +811,7 @@ func resourceTencentCloudCynosdbProxyEndPointUpdate(d *schema.ResourceData, meta return err } - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -835,16 +838,16 @@ func resourceTencentCloudCynosdbProxyEndPointUpdate(d *schema.ResourceData, meta } func resourceTencentCloudCynosdbProxyEndPointDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_proxy_end_point.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_proxy_end_point.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -856,7 +859,7 @@ func resourceTencentCloudCynosdbProxyEndPointDelete(d *schema.ResourceData, meta return err } - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { diff --git a/tencentcloud/resource_tc_cynosdb_proxy_end_point_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_proxy_end_point_test.go similarity index 82% rename from tencentcloud/resource_tc_cynosdb_proxy_end_point_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_proxy_end_point_test.go index be8fe0832b..9ec42d0f46 100644 --- a/tencentcloud/resource_tc_cynosdb_proxy_end_point_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_proxy_end_point_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb_test import ( "context" @@ -6,6 +6,10 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccynosdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cynosdb" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,10 +18,10 @@ import ( func TestAccTencentCloudCynosdbProxyEndPointResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckCynosdbProxyEndPointDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbProxyEndPoint, @@ -38,16 +42,16 @@ func TestAccTencentCloudCynosdbProxyEndPointResource_basic(t *testing.T) { } func testAccCheckCynosdbProxyEndPointDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := CynosdbService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cynosdb_proxy_end_point" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -71,8 +75,8 @@ func testAccCheckCynosdbProxyEndPointDestroy(s *terraform.State) error { func testAccCheckCynosdbProxyEndPointExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -82,14 +86,14 @@ func testAccCheckCynosdbProxyEndPointExists(n string) resource.TestCheckFunc { return fmt.Errorf("cynosdb proxy end point id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 3 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } clusterId := idSplit[0] proxyGroupId := idSplit[1] - service := CynosdbService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) proxyEndPoint, err := service.DescribeCynosdbProxyEndPointById(ctx, clusterId, proxyGroupId) if err != nil { @@ -104,7 +108,7 @@ func testAccCheckCynosdbProxyEndPointExists(n string) resource.TestCheckFunc { } } -const testAccCynosdbProxyEndPoint = CommonCynosdb + DefaultCrsVar + ` +const testAccCynosdbProxyEndPoint = tcacctest.CommonCynosdb + tcacctest.DefaultCrsVar + ` resource "tencentcloud_cynosdb_proxy" "proxy" { cluster_id = var.cynosdb_cluster_id cpu = 2 @@ -148,7 +152,7 @@ resource "tencentcloud_cynosdb_proxy_end_point" "proxy_end_point" { } ` -const testAccCynosdbProxyEndPointUpdate = CommonCynosdb + DefaultCrsVar + ` +const testAccCynosdbProxyEndPointUpdate = tcacctest.CommonCynosdb + tcacctest.DefaultCrsVar + ` resource "tencentcloud_cynosdb_proxy" "proxy" { cluster_id = var.cynosdb_cluster_id cpu = 2 diff --git a/tencentcloud/resource_tc_cynosdb_proxy_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_proxy_test.go similarity index 84% rename from tencentcloud/resource_tc_cynosdb_proxy_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_proxy_test.go index 60372003cb..9021680c34 100644 --- a/tencentcloud/resource_tc_cynosdb_proxy_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_proxy_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cynosdb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccynosdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cynosdb" + "context" "fmt" "strings" @@ -14,10 +18,10 @@ import ( func TestAccTencentCloudCynosdbProxyResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckCynosdbProxyDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbProxy, @@ -59,9 +63,9 @@ func TestAccTencentCloudCynosdbProxyResource_basic(t *testing.T) { func testAccCheckCynosdbProxyExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cynosdbService := CynosdbService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[n] if !ok { return fmt.Errorf("cynosdb proxy %s is not found", n) @@ -70,7 +74,7 @@ func testAccCheckCynosdbProxyExists(n string) resource.TestCheckFunc { return fmt.Errorf("cynosdb proxy id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -90,15 +94,15 @@ func testAccCheckCynosdbProxyExists(n string) resource.TestCheckFunc { } func testAccCheckCynosdbProxyDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cynosdbService := CynosdbService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cynosdb_proxy" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } diff --git a/tencentcloud/resource_tc_cynosdb_read_only_instance_exclusive_access.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_read_only_instance_exclusive_access.go similarity index 76% rename from tencentcloud/resource_tc_cynosdb_read_only_instance_exclusive_access.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_read_only_instance_exclusive_access.go index 1628bf78b9..b12cf59b08 100644 --- a/tencentcloud/resource_tc_cynosdb_read_only_instance_exclusive_access.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_read_only_instance_exclusive_access.go @@ -1,18 +1,21 @@ -package tencentcloud +package cynosdb import ( "log" "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbReadOnlyInstanceExclusiveAccess() *schema.Resource { +func ResourceTencentCloudCynosdbReadOnlyInstanceExclusiveAccess() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbReadOnlyInstanceExclusiveAccessCreate, Read: resourceTencentCloudCynosdbReadOnlyInstanceExclusiveAccessRead, @@ -67,10 +70,10 @@ func resourceTencentCloudCynosdbReadOnlyInstanceExclusiveAccess() *schema.Resour } func resourceTencentCloudCynosdbReadOnlyInstanceExclusiveAccessCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_read_only_instance_exclusive_access.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_read_only_instance_exclusive_access.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cynosdb.NewOpenReadOnlyInstanceExclusiveAccessRequest() @@ -111,8 +114,8 @@ func resourceTencentCloudCynosdbReadOnlyInstanceExclusiveAccessCreate(d *schema. } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().OpenReadOnlyInstanceExclusiveAccess(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().OpenReadOnlyInstanceExclusiveAccess(request) if e != nil { if sdkErr, ok := e.(*sdkErrors.TencentCloudSDKError); ok { // repeat to execute this cmd can be ignored @@ -120,7 +123,7 @@ func resourceTencentCloudCynosdbReadOnlyInstanceExclusiveAccessCreate(d *schema. return nil } } - return retryError(e) + 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()) } @@ -137,29 +140,29 @@ func resourceTencentCloudCynosdbReadOnlyInstanceExclusiveAccessCreate(d *schema. } else { flowId = response.Response.FlowId - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} - conf := BuildStateChangeConf([]string{}, []string{CYNOSDB_FLOW_STATUS_SUCCESSFUL}, 10*readRetryTimeout, time.Second, service.CynosdbClusterSlaveZoneStateRefreshFunc(*flowId, []string{})) + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + conf := tccommon.BuildStateChangeConf([]string{}, []string{CYNOSDB_FLOW_STATUS_SUCCESSFUL}, 10*tccommon.ReadRetryTimeout, time.Second, service.CynosdbClusterSlaveZoneStateRefreshFunc(*flowId, []string{})) if _, e := conf.WaitForState(); e != nil { return e } } - d.SetId(strings.Join([]string{clusterId, instanceId}, FILED_SP)) + d.SetId(strings.Join([]string{clusterId, instanceId}, tccommon.FILED_SP)) return resourceTencentCloudCynosdbReadOnlyInstanceExclusiveAccessRead(d, meta) } func resourceTencentCloudCynosdbReadOnlyInstanceExclusiveAccessRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_read_only_instance_exclusive_access.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_read_only_instance_exclusive_access.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCynosdbReadOnlyInstanceExclusiveAccessDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_read_only_instance_exclusive_access.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_read_only_instance_exclusive_access.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cynosdb_read_only_instance_exclusive_access_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_read_only_instance_exclusive_access_test.go similarity index 85% rename from tencentcloud/resource_tc_cynosdb_read_only_instance_exclusive_access_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_read_only_instance_exclusive_access_test.go index cd510800c7..f3af957228 100644 --- a/tencentcloud/resource_tc_cynosdb_read_only_instance_exclusive_access_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_read_only_instance_exclusive_access_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudCynosdbReadOnlyInstanceExclusiveAccessResource_basic(t * t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbReadOnlyInstanceExclusiveAccess, @@ -30,7 +32,7 @@ func TestAccTencentCloudCynosdbReadOnlyInstanceExclusiveAccessResource_basic(t * }) } -const testAccCynosdbReadOnlyInstanceExclusiveAccess = CommonCynosdb + defaultVpcSubnets + ` +const testAccCynosdbReadOnlyInstanceExclusiveAccess = tcacctest.CommonCynosdb + tcacctest.DefaultVpcSubnets + ` resource "tencentcloud_cynosdb_read_only_instance_exclusive_access" "read_only_instance_exclusive_access" { cluster_id = var.cynosdb_cluster_id diff --git a/tencentcloud/resource_tc_cynosdb_readonly_instance.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance.go similarity index 82% rename from tencentcloud/resource_tc_cynosdb_readonly_instance.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance.go index bdce8da2b7..a8f9b7d643 100644 --- a/tencentcloud/resource_tc_cynosdb_readonly_instance.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance.go @@ -1,18 +1,21 @@ -package tencentcloud +package cynosdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudCynosdbReadonlyInstance() *schema.Resource { +func ResourceTencentCloudCynosdbReadonlyInstance() *schema.Resource { instanceInfo := map[string]*schema.Schema{ "cluster_id": { Type: schema.TypeString, @@ -66,13 +69,13 @@ func resourceTencentCloudCynosdbReadonlyInstance() *schema.Resource { } func resourceTencentCloudCynosdbReadonlyInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_readonly_instance.create")() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_readonly_instance.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - client = meta.(*TencentCloudClient).apiV3Conn + client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() cynosdbService = CynosdbService{client: client} request = cynosdb.NewAddInstancesRequest() @@ -95,12 +98,12 @@ func resourceTencentCloudCynosdbReadonlyInstanceCreate(d *schema.ResourceData, m var response *cynosdb.AddInstancesResponse var err error - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, err = meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().AddInstances(request) + response, err = meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().AddInstances(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), err.Error()) - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -135,15 +138,15 @@ func resourceTencentCloudCynosdbReadonlyInstanceCreate(d *schema.ResourceData, m } func resourceTencentCloudCynosdbReadonlyInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_readonly_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_readonly_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() cynosdbService := CynosdbService{client: client} clusterId, instance, has, err := cynosdbService.DescribeInstanceById(ctx, id) if err != nil { @@ -179,13 +182,13 @@ func resourceTencentCloudCynosdbReadonlyInstanceRead(d *schema.ResourceData, met } func resourceTencentCloudCynosdbReadonlyInstanceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_readonly_instance.update")() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_readonly_instance.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instanceId = d.Id() - client = meta.(*TencentCloudClient).apiV3Conn + client = meta.(tccommon.ProviderMeta).GetAPIV3Conn() cynosdbService = CynosdbService{client: client} ) @@ -199,7 +202,7 @@ func resourceTencentCloudCynosdbReadonlyInstanceUpdate(d *schema.ResourceData, m return err } - errUpdate := resource.Retry(readRetryTimeout, func() *resource.RetryError { + errUpdate := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, infos, has, e := cynosdbService.DescribeInstanceById(ctx, instanceId) if e != nil { return resource.NonRetryableError(e) @@ -246,15 +249,15 @@ func resourceTencentCloudCynosdbReadonlyInstanceUpdate(d *schema.ResourceData, m } func resourceTencentCloudCynosdbReadonlyInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_readonly_instance.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_readonly_instance.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) instanceId := d.Id() clusterId := d.Get("cluster_id").(string) cynosdbService := CynosdbService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } forceDelete := d.Get("force_delete").(bool) diff --git a/tencentcloud/resource_tc_cynosdb_readonly_instance_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance_test.go similarity index 87% rename from tencentcloud/resource_tc_cynosdb_readonly_instance_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance_test.go index cc331d13ef..4d56f4a3e6 100644 --- a/tencentcloud/resource_tc_cynosdb_readonly_instance_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_readonly_instance_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package cynosdb_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccynosdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cynosdb" + "context" "fmt" "testing" @@ -12,8 +16,8 @@ import ( func TestAccTencentCloudCynosdbReadonlyInstanceResource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCynosdbReadonlyInstanceDestroy, Steps: []resource.TestStep{ { @@ -55,12 +59,10 @@ func TestAccTencentCloudCynosdbReadonlyInstanceResource(t *testing.T) { } func testAccCheckCynosdbReadonlyInstanceDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cynosdbService := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cynosdb_readonly_instance" { continue @@ -80,8 +82,8 @@ func testAccCheckCynosdbReadonlyInstanceDestroy(s *terraform.State) error { func testAccCheckCynosdbReadonlyInstanceExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -90,9 +92,7 @@ func testAccCheckCynosdbReadonlyInstanceExists(n string) resource.TestCheckFunc if rs.Primary.ID == "" { return fmt.Errorf("cynosdb readonly instance id is not set") } - cynosdbService := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, _, has, err := cynosdbService.DescribeInstanceById(ctx, rs.Primary.ID) if err != nil { return err @@ -146,7 +146,7 @@ resource "tencentcloud_cynosdb_cluster" "foo" { force_delete = true rw_group_sg = [ - "` + defaultSecurityGroup + `", + "` + tcacctest.DefaultSecurityGroup + `", ] } @@ -209,7 +209,7 @@ resource "tencentcloud_cynosdb_cluster" "foo" { force_delete = true rw_group_sg = [ - "` + defaultSecurityGroup + `", + "` + tcacctest.DefaultSecurityGroup + `", ] } diff --git a/tencentcloud/resource_tc_cynosdb_reload_proxy_node.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_reload_proxy_node.go similarity index 72% rename from tencentcloud/resource_tc_cynosdb_reload_proxy_node.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_reload_proxy_node.go index 4a3dae54bd..a310450bc8 100644 --- a/tencentcloud/resource_tc_cynosdb_reload_proxy_node.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_reload_proxy_node.go @@ -1,18 +1,21 @@ -package tencentcloud +package cynosdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbReloadProxyNode() *schema.Resource { +func ResourceTencentCloudCynosdbReloadProxyNode() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbReloadProxyNodeCreate, Read: resourceTencentCloudCynosdbReloadProxyNodeRead, @@ -38,13 +41,13 @@ func resourceTencentCloudCynosdbReloadProxyNode() *schema.Resource { } func resourceTencentCloudCynosdbReloadProxyNodeCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_reload_proxy_node.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_reload_proxy_node.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = cynosdb.NewReloadBalanceProxyNodeRequest() response = cynosdb.NewReloadBalanceProxyNodeResponse() clusterId string @@ -60,10 +63,10 @@ func resourceTencentCloudCynosdbReloadProxyNodeCreate(d *schema.ResourceData, me request.ProxyGroupId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ReloadBalanceProxyNode(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ReloadBalanceProxyNode(request) if e != nil { - return retryError(e) + 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()) } @@ -83,7 +86,7 @@ func resourceTencentCloudCynosdbReloadProxyNodeCreate(d *schema.ResourceData, me } flowId = *response.Response.FlowId - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -111,15 +114,15 @@ func resourceTencentCloudCynosdbReloadProxyNodeCreate(d *schema.ResourceData, me } func resourceTencentCloudCynosdbReloadProxyNodeRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_reload_proxy_node.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_reload_proxy_node.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCynosdbReloadProxyNodeDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_reload_proxy_node.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_reload_proxy_node.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cynosdb_reload_proxy_node_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_reload_proxy_node_test.go similarity index 82% rename from tencentcloud/resource_tc_cynosdb_reload_proxy_node_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_reload_proxy_node_test.go index 4a8cbb6b68..d575e34565 100644 --- a/tencentcloud/resource_tc_cynosdb_reload_proxy_node_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_reload_proxy_node_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,10 +12,10 @@ import ( func TestAccTencentCloudCynosdbReloadProxyNodeResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, CheckDestroy: testAccCheckCynosdbProxyDestroy, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbReloadProxyNode, diff --git a/tencentcloud/resource_tc_cynosdb_resource_package.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_resource_package.go similarity index 77% rename from tencentcloud/resource_tc_cynosdb_resource_package.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_resource_package.go index 50aa099edb..2cb6a79d7a 100644 --- a/tencentcloud/resource_tc_cynosdb_resource_package.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_resource_package.go @@ -1,30 +1,4 @@ -/* -Provides a resource to create a cynosdb resource_package - -Example Usage - -```hcl -resource "tencentcloud_cynosdb_resource_package" "resource_package" { - instance_type = "cdb" - package_region = "china" - package_type = "CCU" - package_version = "base" - package_spec = - expire_day = 180 - package_count = 1 - package_name = "PackageName" -} -``` - -Import - -cynosdb resource_package can be imported using the id, e.g. - -``` -terraform import tencentcloud_cynosdb_resource_package.resource_package resource_package_id -``` -*/ -package tencentcloud +package cynosdb import ( "context" @@ -34,10 +8,12 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbResourcePackage() *schema.Resource { +func ResourceTencentCloudCynosdbResourcePackage() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbResourcePackageCreate, Read: resourceTencentCloudCynosdbResourcePackageRead, @@ -99,10 +75,10 @@ func resourceTencentCloudCynosdbResourcePackage() *schema.Resource { } func resourceTencentCloudCynosdbResourcePackageCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_resource_package.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_resource_package.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = cynosdb.NewCreateResourcePackageRequest() @@ -141,10 +117,10 @@ func resourceTencentCloudCynosdbResourcePackageCreate(d *schema.ResourceData, me request.PackageName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().CreateResourcePackage(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().CreateResourcePackage(request) if e != nil { - return retryError(e) + 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()) } @@ -163,14 +139,14 @@ func resourceTencentCloudCynosdbResourcePackageCreate(d *schema.ResourceData, me } func resourceTencentCloudCynosdbResourcePackageRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_resource_package.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_resource_package.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} packageId := d.Id() resourcePackage, err := service.DescribeCynosdbResourcePackageById(ctx, packageId) @@ -220,10 +196,10 @@ func resourceTencentCloudCynosdbResourcePackageRead(d *schema.ResourceData, meta } func resourceTencentCloudCynosdbResourcePackageUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_resource_package.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_resource_package.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := cynosdb.NewModifyResourcePackageNameRequest() @@ -245,10 +221,10 @@ func resourceTencentCloudCynosdbResourcePackageUpdate(d *schema.ResourceData, me } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyResourcePackageName(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyResourcePackageName(request) if e != nil { - return retryError(e) + 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()) } @@ -263,13 +239,13 @@ func resourceTencentCloudCynosdbResourcePackageUpdate(d *schema.ResourceData, me } func resourceTencentCloudCynosdbResourcePackageDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_resource_package.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_resource_package.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} packageId := d.Id() if err := service.DeleteCynosdbResourcePackageById(ctx, packageId); err != nil { diff --git a/tencentcloud/services/cynosdb/resource_tc_cynosdb_resource_package.md b/tencentcloud/services/cynosdb/resource_tc_cynosdb_resource_package.md new file mode 100644 index 0000000000..f0c6318a95 --- /dev/null +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_resource_package.md @@ -0,0 +1,24 @@ +Provides a resource to create a cynosdb resource_package + +Example Usage + +```hcl +resource "tencentcloud_cynosdb_resource_package" "resource_package" { + instance_type = "cdb" + package_region = "china" + package_type = "CCU" + package_version = "base" + package_spec = + expire_day = 180 + package_count = 1 + package_name = "PackageName" +} +``` + +Import + +cynosdb resource_package can be imported using the id, e.g. + +``` +terraform import tencentcloud_cynosdb_resource_package.resource_package resource_package_id +``` diff --git a/tencentcloud/resource_tc_cynosdb_resource_package_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_resource_package_test.go similarity index 83% rename from tencentcloud/resource_tc_cynosdb_resource_package_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_resource_package_test.go index 1eca210572..03bb1afa3a 100644 --- a/tencentcloud/resource_tc_cynosdb_resource_package_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_resource_package_test.go @@ -1,18 +1,20 @@ -package tencentcloud +package cynosdb_test import ( "testing" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" ) func TestAccTencentCloudNeedFixCynosdbResourcePackageResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbResourcePackage, diff --git a/tencentcloud/resource_tc_cynosdb_restart_instance.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_restart_instance.go similarity index 70% rename from tencentcloud/resource_tc_cynosdb_restart_instance.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_restart_instance.go index b4062782de..72c6217cbe 100644 --- a/tencentcloud/resource_tc_cynosdb_restart_instance.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_restart_instance.go @@ -1,18 +1,21 @@ -package tencentcloud +package cynosdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbRestartInstance() *schema.Resource { +func ResourceTencentCloudCynosdbRestartInstance() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbRestartInstanceCreate, Read: resourceTencentCloudCynosdbRestartInstanceRead, @@ -38,11 +41,11 @@ func resourceTencentCloudCynosdbRestartInstance() *schema.Resource { } func resourceTencentCloudCynosdbRestartInstanceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_restart_instance.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_restart_instance.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cynosdb.NewRestartInstanceRequest() @@ -54,10 +57,10 @@ func resourceTencentCloudCynosdbRestartInstanceCreate(d *schema.ResourceData, me request.InstanceId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().RestartInstance(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().RestartInstance(request) if e != nil { - return retryError(e) + 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()) } @@ -72,8 +75,8 @@ func resourceTencentCloudCynosdbRestartInstanceCreate(d *schema.ResourceData, me d.SetId(instanceId) flowId := *response.Response.FlowId - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -98,15 +101,15 @@ func resourceTencentCloudCynosdbRestartInstanceCreate(d *schema.ResourceData, me } func resourceTencentCloudCynosdbRestartInstanceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_restart_instance.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_restart_instance.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id := d.Id() - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} _, instance, has, err := service.DescribeInstanceById(ctx, id) if err != nil { return err @@ -125,8 +128,8 @@ func resourceTencentCloudCynosdbRestartInstanceRead(d *schema.ResourceData, meta } func resourceTencentCloudCynosdbRestartInstanceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_restart_instance.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_restart_instance.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cynosdb_restart_instance_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_restart_instance_test.go similarity index 78% rename from tencentcloud/resource_tc_cynosdb_restart_instance_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_restart_instance_test.go index 0c437a7d1f..402f511a2a 100644 --- a/tencentcloud/resource_tc_cynosdb_restart_instance_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_restart_instance_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudCynosdbRestartInstanceResource_basic(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbRestartInstance, @@ -27,7 +29,7 @@ func TestAccTencentCloudCynosdbRestartInstanceResource_basic(t *testing.T) { }) } -const testAccCynosdbRestartInstance = CommonCynosdb + ` +const testAccCynosdbRestartInstance = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_restart_instance" "restart_instance" { instance_id = var.cynosdb_cluster_instance_id diff --git a/tencentcloud/resource_tc_cynosdb_roll_back_cluster.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_roll_back_cluster.go similarity index 86% rename from tencentcloud/resource_tc_cynosdb_roll_back_cluster.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_roll_back_cluster.go index 8f3d3d28b0..efa7879481 100644 --- a/tencentcloud/resource_tc_cynosdb_roll_back_cluster.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_roll_back_cluster.go @@ -1,18 +1,21 @@ -package tencentcloud +package cynosdb import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbRollBackCluster() *schema.Resource { +func ResourceTencentCloudCynosdbRollBackCluster() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbRollBackClusterCreate, Read: resourceTencentCloudCynosdbRollBackClusterRead, @@ -123,11 +126,11 @@ func resourceTencentCloudCynosdbRollBackCluster() *schema.Resource { } func resourceTencentCloudCynosdbRollBackClusterCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_roll_back_cluster.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_roll_back_cluster.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cynosdb.NewRollBackClusterRequest() @@ -197,10 +200,10 @@ func resourceTencentCloudCynosdbRollBackClusterCreate(d *schema.ResourceData, me request.RollbackMode = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().RollBackCluster(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().RollBackCluster(request) if e != nil { - return retryError(e) + 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()) } @@ -215,8 +218,8 @@ func resourceTencentCloudCynosdbRollBackClusterCreate(d *schema.ResourceData, me d.SetId(clusterId) flowId := *response.Response.FlowId - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -241,15 +244,15 @@ func resourceTencentCloudCynosdbRollBackClusterCreate(d *schema.ResourceData, me } func resourceTencentCloudCynosdbRollBackClusterRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_roll_back_cluster.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_roll_back_cluster.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudCynosdbRollBackClusterDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_roll_back_cluster.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_roll_back_cluster.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cynosdb_roll_back_cluster_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_roll_back_cluster_test.go similarity index 83% rename from tencentcloud/resource_tc_cynosdb_roll_back_cluster_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_roll_back_cluster_test.go index b07b0d9fda..f5d3de5a50 100644 --- a/tencentcloud/resource_tc_cynosdb_roll_back_cluster_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_roll_back_cluster_test.go @@ -1,10 +1,12 @@ -package tencentcloud +package cynosdb_test import ( "fmt" "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -16,9 +18,9 @@ func TestAccTencentCloudCynosdbRollBackClusterResource_basic(t *testing.T) { timeUnix := time.Now().AddDate(0, 0, -1).Unix() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: fmt.Sprintf(testAccCynosdbRollBackCluster, startTime, timeUnix, timeUnix), @@ -30,7 +32,7 @@ func TestAccTencentCloudCynosdbRollBackClusterResource_basic(t *testing.T) { }) } -const testAccCynosdbRollBackCluster = CommonCynosdb + ` +const testAccCynosdbRollBackCluster = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_roll_back_cluster" "roll_back_cluster" { cluster_id = var.cynosdb_cluster_id diff --git a/tencentcloud/resource_tc_cynosdb_security_group.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_security_group.go similarity index 76% rename from tencentcloud/resource_tc_cynosdb_security_group.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_security_group.go index d0128b7364..1d1ce777ba 100644 --- a/tencentcloud/resource_tc_cynosdb_security_group.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_security_group.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbSecurityGroup() *schema.Resource { +func ResourceTencentCloudCynosdbSecurityGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbSecurityGroupCreate, Update: resourceTencentCloudCynosdbSecurityGroupUpdate, @@ -47,11 +50,11 @@ func resourceTencentCloudCynosdbSecurityGroup() *schema.Resource { } func resourceTencentCloudCynosdbSecurityGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_security_group.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_security_group.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := cynosdb.NewModifyDBInstanceSecurityGroupsRequest() var clusterId string @@ -70,7 +73,7 @@ func resourceTencentCloudCynosdbSecurityGroupCreate(d *schema.ResourceData, meta } } - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} _, clusterIfo, has, err := service.DescribeClusterById(ctx, clusterId) if err != nil { @@ -95,10 +98,10 @@ func resourceTencentCloudCynosdbSecurityGroupCreate(d *schema.ResourceData, meta continue } request.InstanceId = instanceGrpInfo.InstanceGrpId - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyDBInstanceSecurityGroups(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyDBInstanceSecurityGroups(request) if e != nil { - return retryError(e) + 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()) } @@ -110,21 +113,21 @@ func resourceTencentCloudCynosdbSecurityGroupCreate(d *schema.ResourceData, meta } } - d.SetId(clusterId + FILED_SP + instanceGroupType) + d.SetId(clusterId + tccommon.FILED_SP + instanceGroupType) return resourceTencentCloudCynosdbSecurityGroupRead(d, meta) } func resourceTencentCloudCynosdbSecurityGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_security_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_security_group.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -164,12 +167,12 @@ func resourceTencentCloudCynosdbSecurityGroupRead(d *schema.ResourceData, meta i } func resourceTencentCloudCynosdbSecurityGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_security_group.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_security_group.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - idSplit := strings.Split(d.Id(), FILED_SP) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -177,7 +180,7 @@ func resourceTencentCloudCynosdbSecurityGroupUpdate(d *schema.ResourceData, meta instanceGroupType := idSplit[1] request := cynosdb.NewModifyDBInstanceSecurityGroupsRequest() - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} grpsResponse, err := service.DescribeClusterInstanceGrps(ctx, clusterId) if err != nil { return err @@ -209,10 +212,10 @@ func resourceTencentCloudCynosdbSecurityGroupUpdate(d *schema.ResourceData, meta continue } request.InstanceId = instanceGrpInfo.InstanceGrpId - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().ModifyDBInstanceSecurityGroups(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().ModifyDBInstanceSecurityGroups(request) if e != nil { - return retryError(e) + 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()) } @@ -229,12 +232,12 @@ func resourceTencentCloudCynosdbSecurityGroupUpdate(d *schema.ResourceData, meta } func resourceTencentCloudCynosdbSecurityGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_security_group.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_security_group.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - idSplit := strings.Split(d.Id(), FILED_SP) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -242,7 +245,7 @@ func resourceTencentCloudCynosdbSecurityGroupDelete(d *schema.ResourceData, meta instanceGroupType := idSplit[1] request := cynosdb.NewDisassociateSecurityGroupsRequest() - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} _, clusterInfo, has, err := service.DescribeClusterById(ctx, clusterId) if err != nil { return err @@ -273,10 +276,10 @@ func resourceTencentCloudCynosdbSecurityGroupDelete(d *schema.ResourceData, meta request.InstanceIds = []*string{instanceGrpInfo.InstanceGrpId} request.SecurityGroupIds = securityGroupIds - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().DisassociateSecurityGroups(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().DisassociateSecurityGroups(request) if e != nil { - return retryError(e) + 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()) } diff --git a/tencentcloud/resource_tc_cynosdb_security_group_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_security_group_test.go similarity index 75% rename from tencentcloud/resource_tc_cynosdb_security_group_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_security_group_test.go index 28684a1ad1..3642cdd4b4 100644 --- a/tencentcloud/resource_tc_cynosdb_security_group_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_security_group_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb_test import ( "context" @@ -6,6 +6,10 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccynosdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cynosdb" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" @@ -14,8 +18,8 @@ import ( func TestAccTencentCloudCynosdbSecurityGroupResource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCynosdbSecurityGroupDestroy, Steps: []resource.TestStep{ { @@ -34,17 +38,15 @@ func TestAccTencentCloudCynosdbSecurityGroupResource(t *testing.T) { } func testAccCheckCynosdbSecurityGroupDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + service := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cynosdb_security_group" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -80,8 +82,8 @@ func testAccCheckCynosdbSecurityGroupDestroy(s *terraform.State) error { func testAccCheckCynosdbSecurityGroupExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -90,10 +92,8 @@ func testAccCheckCynosdbSecurityGroupExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cynosdb readonly instance id is not set") } - service := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + service := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -127,7 +127,7 @@ func testAccCheckCynosdbSecurityGroupExists(n string) resource.TestCheckFunc { } } -const testAccCynosdbSecurityGroup = CommonCynosdb + ` +const testAccCynosdbSecurityGroup = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_security_group" "foo" { cluster_id = var.cynosdb_cluster_id security_group_ids = [var.cynosdb_cluster_security_group_id] diff --git a/tencentcloud/resource_tc_cynosdb_upgrade_proxy_version.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_upgrade_proxy_version.go similarity index 69% rename from tencentcloud/resource_tc_cynosdb_upgrade_proxy_version.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_upgrade_proxy_version.go index 32d845f553..3e5cdbd8b3 100644 --- a/tencentcloud/resource_tc_cynosdb_upgrade_proxy_version.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_upgrade_proxy_version.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbUpgradeProxyVersion() *schema.Resource { +func ResourceTencentCloudCynosdbUpgradeProxyVersion() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbUpgradeProxyVersionCreate, Read: resourceTencentCloudCynosdbUpgradeProxyVersionRead, @@ -37,13 +40,13 @@ func resourceTencentCloudCynosdbUpgradeProxyVersion() *schema.Resource { } func resourceTencentCloudCynosdbUpgradeProxyVersionCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_upgrade_proxy_version.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_upgrade_proxy_version.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} srcProxyVersion string clusterId string ) @@ -65,22 +68,22 @@ func resourceTencentCloudCynosdbUpgradeProxyVersionCreate(d *schema.ResourceData srcProxyVersion = *upgradeProxyGroup.CurrentProxyVersion - d.SetId(strings.Join([]string{clusterId, srcProxyVersion}, FILED_SP)) + d.SetId(strings.Join([]string{clusterId, srcProxyVersion}, tccommon.FILED_SP)) return resourceTencentCloudCynosdbUpgradeProxyVersionUpdate(d, meta) } func resourceTencentCloudCynosdbUpgradeProxyVersionRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_upgrade_proxy_version.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_upgrade_proxy_version.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -109,19 +112,19 @@ func resourceTencentCloudCynosdbUpgradeProxyVersionRead(d *schema.ResourceData, } func resourceTencentCloudCynosdbUpgradeProxyVersionUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_upgrade_proxy_version.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_upgrade_proxy_version.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = cynosdb.NewUpgradeProxyVersionRequest() flowId int64 ) if d.HasChange("dst_proxy_version") { - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -136,10 +139,10 @@ func resourceTencentCloudCynosdbUpgradeProxyVersionUpdate(d *schema.ResourceData request.DstProxyVersion = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().UpgradeProxyVersion(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().UpgradeProxyVersion(request) if e != nil { - return retryError(e) + 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()) } @@ -153,7 +156,7 @@ func resourceTencentCloudCynosdbUpgradeProxyVersionUpdate(d *schema.ResourceData return err } - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -180,8 +183,8 @@ func resourceTencentCloudCynosdbUpgradeProxyVersionUpdate(d *schema.ResourceData } func resourceTencentCloudCynosdbUpgradeProxyVersionDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_upgrade_proxy_version.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_upgrade_proxy_version.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_cynosdb_upgrade_proxy_version_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_upgrade_proxy_version_test.go similarity index 85% rename from tencentcloud/resource_tc_cynosdb_upgrade_proxy_version_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_upgrade_proxy_version_test.go index 60b91c0924..5a124ba749 100644 --- a/tencentcloud/resource_tc_cynosdb_upgrade_proxy_version_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_upgrade_proxy_version_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package cynosdb_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudNeedFixCynosdbUpgradeProxyVersionResource_basic(t *testi t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccCynosdbUpgradeProxyVersion, diff --git a/tencentcloud/resource_tc_cynosdb_wan.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_wan.go similarity index 74% rename from tencentcloud/resource_tc_cynosdb_wan.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_wan.go index e15358180e..a5681ea297 100644 --- a/tencentcloud/resource_tc_cynosdb_wan.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_wan.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -6,14 +6,17 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudCynosdbWan() *schema.Resource { +func ResourceTencentCloudCynosdbWan() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudCynosdbWanCreate, Read: resourceTencentCloudCynosdbWanRead, @@ -63,11 +66,11 @@ func resourceTencentCloudCynosdbWan() *schema.Resource { } func resourceTencentCloudCynosdbWanCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_wan.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_wan.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) var ( request = cynosdb.NewOpenWanRequest() @@ -85,10 +88,10 @@ func resourceTencentCloudCynosdbWanCreate(d *schema.ResourceData, meta interface request.InstanceGrpId = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().OpenWan(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().OpenWan(request) if e != nil { - return retryError(e) + 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()) } @@ -100,11 +103,11 @@ func resourceTencentCloudCynosdbWanCreate(d *schema.ResourceData, meta interface return err } - d.SetId(clusterId + FILED_SP + instanceGrpId) + d.SetId(clusterId + tccommon.FILED_SP + instanceGrpId) flowId := *response.Response.FlowId - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -129,15 +132,15 @@ func resourceTencentCloudCynosdbWanCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudCynosdbWanRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_wan.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_wan.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -181,8 +184,8 @@ func resourceTencentCloudCynosdbWanRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudCynosdbWanUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_wan.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_wan.update")() + defer tccommon.InconsistentCheck(d, meta)() immutableArgs := []string{"cluster_id", "instance_grp_id"} @@ -195,14 +198,14 @@ func resourceTencentCloudCynosdbWanUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudCynosdbWanDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_cynosdb_wan.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_wan.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn} - idSplit := strings.Split(d.Id(), FILED_SP) + service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -214,7 +217,7 @@ func resourceTencentCloudCynosdbWanDelete(d *schema.ResourceData, meta interface return err } - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := service.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { diff --git a/tencentcloud/resource_tc_cynosdb_wan_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_wan_test.go similarity index 72% rename from tencentcloud/resource_tc_cynosdb_wan_test.go rename to tencentcloud/services/cynosdb/resource_tc_cynosdb_wan_test.go index e9318dd937..5a8057ef34 100644 --- a/tencentcloud/resource_tc_cynosdb_wan_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_wan_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb_test import ( "context" @@ -6,6 +6,10 @@ import ( "strings" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svccynosdb "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cynosdb" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" ) @@ -14,8 +18,8 @@ import ( func TestAccTencentCloudCynosdbWanResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCynosdbWanDestroy, Steps: []resource.TestStep{ { @@ -23,7 +27,7 @@ func TestAccTencentCloudCynosdbWanResource_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckCynosdbWanExists("tencentcloud_cynosdb_wan.wan"), resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_wan.wan", "id"), - resource.TestCheckResourceAttr("tencentcloud_cynosdb_wan.wan", "cluster_id", defaultCynosdbClusterId), + resource.TestCheckResourceAttr("tencentcloud_cynosdb_wan.wan", "cluster_id", tcacctest.DefaultCynosdbClusterId), resource.TestCheckResourceAttr("tencentcloud_cynosdb_wan.wan", "instance_grp_id", "cynosdbmysql-grp-lxav0p9z"), resource.TestCheckResourceAttr("tencentcloud_cynosdb_wan.wan", "wan_domain", "gz-cynosdbmysql-grp-lxav0p9z.sql.tencentcdb.com"), resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_wan.wan", "wan_ip"), @@ -41,17 +45,15 @@ func TestAccTencentCloudCynosdbWanResource_basic(t *testing.T) { } func testAccCheckCynosdbWanDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - cynosdbService := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_cynosdb_wan" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -72,8 +74,8 @@ func testAccCheckCynosdbWanDestroy(s *terraform.State) error { func testAccCheckCynosdbWanExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -82,10 +84,8 @@ func testAccCheckCynosdbWanExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("cynosdb cluster wan id is not set") } - cynosdbService := CynosdbService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + cynosdbService := svccynosdb.NewCynosdbService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -103,7 +103,7 @@ func testAccCheckCynosdbWanExists(n string) resource.TestCheckFunc { } } -const testAccCynosdbWan = CommonCynosdb + ` +const testAccCynosdbWan = tcacctest.CommonCynosdb + ` resource "tencentcloud_cynosdb_wan" "wan" { cluster_id = var.cynosdb_cluster_id diff --git a/tencentcloud/service_tencentcloud_cynosdb.go b/tencentcloud/services/cynosdb/service_tencentcloud_cynosdb.go similarity index 92% rename from tencentcloud/service_tencentcloud_cynosdb.go rename to tencentcloud/services/cynosdb/service_tencentcloud_cynosdb.go index edcd2d2191..09697859e6 100644 --- a/tencentcloud/service_tencentcloud_cynosdb.go +++ b/tencentcloud/services/cynosdb/service_tencentcloud_cynosdb.go @@ -1,4 +1,4 @@ -package tencentcloud +package cynosdb import ( "context" @@ -7,32 +7,39 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) +func NewCynosdbService(client *connectivity.TencentCloudClient) CynosdbService { + return CynosdbService{client: client} +} + type CynosdbService struct { client *connectivity.TencentCloudClient } func (me *CynosdbService) DescribeRedisZoneConfig(ctx context.Context) (instanceSpecSet []*cynosdb.InstanceSpec, err error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeInstanceSpecsRequest() request.DbType = helper.String("MYSQL") request.IncludeZoneStocks = helper.Bool(true) - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, e := me.client.UseCynosdbClient().DescribeInstanceSpecs(request) if e != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId, request.GetAction(), request.ToJsonString(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } instanceSpecSet = response.Response.InstanceSpecSet return nil @@ -42,7 +49,7 @@ func (me *CynosdbService) DescribeRedisZoneConfig(ctx context.Context) (instance } func (me *CynosdbService) DescribeClusters(ctx context.Context, filters map[string]string) (clusters []*cynosdb.CynosdbCluster, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeClustersRequest() queryFilters := make([]*cynosdb.QueryFilter, 0, len(filters)) @@ -82,24 +89,26 @@ func (me *CynosdbService) DescribeClusters(ctx context.Context, filters map[stri return } -/** +/* +* Return values: - clusterItem: ResponseBody of DescribeClusters, include `renew_flag` and `db_mode` - clusterInfo: ResponseBody of DescribeClusterDetailResponse, primary args setter. + + clusterItem: ResponseBody of DescribeClusters, include `renew_flag` and `db_mode` + clusterInfo: ResponseBody of DescribeClusterDetailResponse, primary args setter. */ func (me *CynosdbService) DescribeClusterById(ctx context.Context, clusterId string) (clusterItem *cynosdb.CynosdbCluster, clusterInfo *cynosdb.CynosdbClusterDetail, has bool, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeClusterDetailRequest() request.ClusterId = &clusterId // get cluster status var notExist bool var clusters []*cynosdb.CynosdbCluster - errRet = resource.Retry(readRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) clusters, errRet = me.DescribeClusters(ctx, map[string]string{"ClusterId": clusterId}) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } if len(clusters) == 0 { notExist = true @@ -129,11 +138,11 @@ func (me *CynosdbService) DescribeClusterById(ctx context.Context, clusterId str has = true var response *cynosdb.DescribeClusterDetailResponse - errRet = resource.Retry(readRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, errRet = me.client.UseCynosdbClient().DescribeClusterDetail(request) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil @@ -148,7 +157,7 @@ func (me *CynosdbService) DescribeClusterById(ctx context.Context, clusterId str } func (me *CynosdbService) UpgradeInstance(ctx context.Context, instanceId string, cpu, mem int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewUpgradeInstanceRequest() request.InstanceId = &instanceId @@ -156,12 +165,12 @@ func (me *CynosdbService) UpgradeInstance(ctx context.Context, instanceId string request.Memory = &mem request.UpgradeType = helper.String(CYNOSDB_UPGRADE_IMMEDIATE) - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, errRet = me.client.UseCynosdbClient().UpgradeInstance(request) if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), errRet.Error()) - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -173,17 +182,17 @@ func (me *CynosdbService) UpgradeInstance(ctx context.Context, instanceId string } func (me *CynosdbService) DescribeMaintainPeriod(ctx context.Context, instanceId string) (response *cynosdb.DescribeMaintainPeriodResponse, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeMaintainPeriodRequest() request.InstanceId = &instanceId - errRet = resource.Retry(readRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, errRet = me.client.UseCynosdbClient().DescribeMaintainPeriod(request) if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), errRet.Error()) - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -195,7 +204,7 @@ func (me *CynosdbService) DescribeMaintainPeriod(ctx context.Context, instanceId } func (me *CynosdbService) ModifyMaintainPeriodConfig(ctx context.Context, instanceId string, startTime, duration int64, weekdays []*string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewModifyMaintainPeriodConfigRequest() request.InstanceId = &instanceId @@ -203,12 +212,12 @@ func (me *CynosdbService) ModifyMaintainPeriodConfig(ctx context.Context, instan request.MaintainDuration = &duration request.MaintainWeekDays = weekdays - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, errRet = me.client.UseCynosdbClient().ModifyMaintainPeriodConfig(request) if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), errRet.Error()) - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -220,12 +229,12 @@ func (me *CynosdbService) ModifyMaintainPeriodConfig(ctx context.Context, instan } func (me *CynosdbService) IsolateCluster(ctx context.Context, clusterId string) (flowId int64, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewIsolateClusterRequest() request.ClusterId = &clusterId - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, errRet := me.client.UseCynosdbClient().IsolateCluster(request) if errRet != nil { @@ -237,7 +246,7 @@ func (me *CynosdbService) IsolateCluster(ctx context.Context, clusterId string) } log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), errRet.Error()) - return retryError(errRet) + return tccommon.RetryError(errRet) } if response.Response.FlowId != nil { flowId = *response.Response.FlowId @@ -249,12 +258,12 @@ func (me *CynosdbService) IsolateCluster(ctx context.Context, clusterId string) } func (me *CynosdbService) OfflineCluster(ctx context.Context, clusterId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewOfflineClusterRequest() request.ClusterId = &clusterId - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, errRet = me.client.UseCynosdbClient().OfflineCluster(request) if errRet != nil { @@ -265,7 +274,7 @@ func (me *CynosdbService) OfflineCluster(ctx context.Context, clusterId string) } log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), errRet.Error()) - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -274,7 +283,7 @@ func (me *CynosdbService) OfflineCluster(ctx context.Context, clusterId string) } func (me *CynosdbService) DescribeInstances(ctx context.Context, filters map[string]string) (instances []*cynosdb.CynosdbInstance, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeInstancesRequest() queryFilters := make([]*cynosdb.QueryFilter, 0, len(filters)) @@ -315,17 +324,17 @@ func (me *CynosdbService) DescribeInstances(ctx context.Context, filters map[str } func (me *CynosdbService) DescribeInstanceById(ctx context.Context, instanceId string) (clusterId string, instanceInfo *cynosdb.CynosdbInstanceDetail, has bool, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeInstanceDetailRequest() request.InstanceId = &instanceId var notExist bool var instances []*cynosdb.CynosdbInstance - errRet = resource.Retry(readRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) instances, errRet = me.DescribeInstances(ctx, map[string]string{"InstanceId": instanceId}) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } if len(instances) == 0 { notExist = true @@ -350,11 +359,11 @@ func (me *CynosdbService) DescribeInstanceById(ctx context.Context, instanceId s clusterId = *instances[0].ClusterId var response *cynosdb.DescribeInstanceDetailResponse - errRet = resource.Retry(readRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, errRet = me.client.UseCynosdbClient().DescribeInstanceDetail(request) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil @@ -376,16 +385,16 @@ func (me *CynosdbService) DescribeInstanceById(ctx context.Context, instanceId s } func (me *CynosdbService) DescribeClusterInstanceGrps(ctx context.Context, clusterId string) (response *cynosdb.DescribeClusterInstanceGrpsResponse, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeClusterInstanceGrpsRequest() request.ClusterId = &clusterId - errRet = resource.Retry(readRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, errRet = me.client.UseCynosdbClient().DescribeClusterInstanceGrps(request) if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), errRet.Error()) - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -397,16 +406,16 @@ func (me *CynosdbService) DescribeClusterInstanceGrps(ctx context.Context, clust } func (me *CynosdbService) DescribeInsGrpSecurityGroups(ctx context.Context, instanceGrpId string) (response *cynosdb.DescribeDBSecurityGroupsResponse, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeDBSecurityGroupsRequest() request.InstanceId = &instanceGrpId - errRet = resource.Retry(readRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, errRet = me.client.UseCynosdbClient().DescribeDBSecurityGroups(request) if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), errRet.Error()) - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -418,19 +427,19 @@ func (me *CynosdbService) DescribeInsGrpSecurityGroups(ctx context.Context, inst } func (me *CynosdbService) ModifyInsGrpSecurityGroups(ctx context.Context, insGrp, az string, sg []*string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewModifyDBInstanceSecurityGroupsRequest() request.InstanceId = &insGrp request.Zone = &az request.SecurityGroupIds = sg - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, errRet = me.client.UseCynosdbClient().ModifyDBInstanceSecurityGroups(request) if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), errRet.Error()) - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -442,7 +451,7 @@ func (me *CynosdbService) ModifyInsGrpSecurityGroups(ctx context.Context, insGrp } func (me *CynosdbService) ModifyClusterParam(ctx context.Context, request *cynosdb.ModifyClusterParamRequest) (asyncReqId string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", @@ -467,18 +476,18 @@ func (me *CynosdbService) ModifyClusterParam(ctx context.Context, request *cynos } func (me *CynosdbService) IsolateInstance(ctx context.Context, clusterId, instanceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewIsolateInstanceRequest() request.ClusterId = &clusterId request.InstanceIdList = []*string{helper.String(instanceId)} - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, errRet = me.client.UseCynosdbClient().IsolateInstance(request) if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), errRet.Error()) - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -487,13 +496,13 @@ func (me *CynosdbService) IsolateInstance(ctx context.Context, clusterId, instan } func (me *CynosdbService) OfflineInstance(ctx context.Context, clusterId, instanceId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewOfflineInstanceRequest() request.ClusterId = &clusterId request.InstanceIdList = []*string{helper.String(instanceId)} - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, errRet = me.client.UseCynosdbClient().OfflineInstance(request) if errRet != nil { @@ -504,7 +513,7 @@ func (me *CynosdbService) OfflineInstance(ctx context.Context, clusterId, instan } log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), errRet.Error()) - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -513,17 +522,17 @@ func (me *CynosdbService) OfflineInstance(ctx context.Context, clusterId, instan } func (me *CynosdbService) DescribeClusterParams(ctx context.Context, clusterId string) (items []*cynosdb.ParamInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeClusterParamsRequest() request.ClusterId = &clusterId var response *cynosdb.DescribeClusterParamsResponse - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, errRet = me.client.UseCynosdbClient().DescribeClusterParams(request) if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), errRet.Error()) - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -536,7 +545,7 @@ func (me *CynosdbService) DescribeClusterParams(ctx context.Context, clusterId s } func (me *CynosdbService) ResumeServerless(ctx context.Context, request *cynosdb.ResumeServerlessRequest) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", @@ -559,7 +568,7 @@ func (me *CynosdbService) ResumeServerless(ctx context.Context, request *cynosdb } func (me *CynosdbService) PauseServerless(ctx context.Context, request *cynosdb.PauseServerlessRequest) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) defer func() { if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", @@ -591,7 +600,7 @@ func (me *CynosdbService) SwitchServerlessCluster(ctx context.Context, clusterId if st == nil { return nil } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if resume && *st == "resuming" || pause && *st == "pausing" { return resource.RetryableError(fmt.Errorf("waiting for status %s finish", *st)) } @@ -603,7 +612,7 @@ func (me *CynosdbService) SwitchServerlessCluster(ctx context.Context, clusterId request.ClusterId = &clusterId err := me.ResumeServerless(ctx, request) if err != nil { - return retryError(err, cynosdb.OPERATIONDENIED_SERVERLESSCLUSTERSTATUSDENIED) + return tccommon.RetryError(err, cynosdb.OPERATIONDENIED_SERVERLESSCLUSTERSTATUSDENIED) } return nil } @@ -612,7 +621,7 @@ func (me *CynosdbService) SwitchServerlessCluster(ctx context.Context, clusterId request.ClusterId = &clusterId err := me.PauseServerless(ctx, request) if err != nil { - return retryError(err, cynosdb.OPERATIONDENIED_SERVERLESSCLUSTERSTATUSDENIED) + return tccommon.RetryError(err, cynosdb.OPERATIONDENIED_SERVERLESSCLUSTERSTATUSDENIED) } } return nil @@ -622,10 +631,10 @@ func (me *CynosdbService) SwitchServerlessCluster(ctx context.Context, clusterId return err } statusChangeRetry := 5 - return resource.Retry(readRetryTimeout*5, func() *resource.RetryError { + return resource.Retry(tccommon.ReadRetryTimeout*5, func() *resource.RetryError { _, detail, _, err = me.DescribeClusterById(ctx, clusterId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } st := detail.ServerlessStatus if st == nil { @@ -647,7 +656,7 @@ func (me *CynosdbService) SwitchServerlessCluster(ctx context.Context, clusterId } func (me *CynosdbService) DescribeCynosdbAuditLogFileById(ctx context.Context, instanceId string, fileName string) (auditLogFile *cynosdb.AuditLogFile, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeAuditLogFilesRequest() request.InstanceId = &instanceId @@ -677,7 +686,7 @@ func (me *CynosdbService) DescribeCynosdbAuditLogFileById(ctx context.Context, i } func (me *CynosdbService) DeleteCynosdbAuditLogFileById(ctx context.Context, instanceId string, fileName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDeleteAuditLogFileRequest() request.InstanceId = &instanceId @@ -702,7 +711,7 @@ func (me *CynosdbService) DeleteCynosdbAuditLogFileById(ctx context.Context, ins } func (me *CynosdbService) DeleteCynosdbSecurityGroupById(ctx context.Context, instanceId string, securityGroupIds []*string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDisassociateSecurityGroupsRequest() request.InstanceIds = []*string{&instanceId} @@ -727,7 +736,7 @@ func (me *CynosdbService) DeleteCynosdbSecurityGroupById(ctx context.Context, in } func (me *CynosdbService) DescribeCynosdbSecurityGroups(ctx context.Context, instanceId string) (securityGroups []*cynosdb.SecurityGroup, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeDBSecurityGroupsRequest() request.InstanceId = &instanceId @@ -752,7 +761,7 @@ func (me *CynosdbService) DescribeCynosdbSecurityGroups(ctx context.Context, ins } func (me *CynosdbService) DescribeCynosdbBackup(ctx context.Context, clusterId string, params map[string]interface{}) (backups []*cynosdb.BackupFileInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeBackupListRequest() request.ClusterId = helper.String(clusterId) @@ -783,7 +792,7 @@ func (me *CynosdbService) DescribeCynosdbBackup(ctx context.Context, clusterId s } func (me *CynosdbService) DescribeCynosdbBackupById(ctx context.Context, clusterId, backupId string) (backup *cynosdb.BackupFileInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeBackupListRequest() defer func() { @@ -818,7 +827,7 @@ func (me *CynosdbService) DescribeCynosdbBackupById(ctx context.Context, cluster } func (me *CynosdbService) DeleteCynosdbBackupById(ctx context.Context, clusterId, backupId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDeleteBackupRequest() defer func() { @@ -848,7 +857,7 @@ func (me *CynosdbService) DeleteCynosdbBackupById(ctx context.Context, clusterId } func (me *CynosdbService) ModifyBackupConfig(ctx context.Context, clusterId string, params map[string]interface{}) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewModifyBackupConfigRequest() defer func() { @@ -877,10 +886,10 @@ func (me *CynosdbService) ModifyBackupConfig(ctx context.Context, clusterId stri if v, ok := params["backup_type"]; ok { request.BackupType = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { result, e := me.client.UseCynosdbClient().ModifyBackupConfig(request) if e != nil { - return retryError(e) + 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()) } @@ -894,7 +903,7 @@ func (me *CynosdbService) ModifyBackupConfig(ctx context.Context, clusterId stri } func (me *CynosdbService) DescribeCynosdbAccountsByFilter(ctx context.Context, clusterId string, paramMap map[string]interface{}) (result *cynosdb.DescribeAccountsResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeAccountsRequest() defer func() { @@ -910,10 +919,10 @@ func (me *CynosdbService) DescribeCynosdbAccountsByFilter(ctx context.Context, c if v, ok := paramMap["hosts"]; ok { request.Hosts = helper.InterfacesStringsPoint(v.([]interface{})) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { response, e := me.client.UseCynosdbClient().DescribeAccounts(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) } @@ -928,7 +937,7 @@ func (me *CynosdbService) DescribeCynosdbAccountsByFilter(ctx context.Context, c } func (me *CynosdbService) DescribeClusterParamsByFilter(ctx context.Context, clusterId string, paramMap map[string]interface{}) (items []*cynosdb.ParamInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeClusterParamsRequest() defer func() { @@ -941,10 +950,10 @@ func (me *CynosdbService) DescribeClusterParamsByFilter(ctx context.Context, clu if v, ok := paramMap["param_name"]; ok { request.ParamName = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { response, e := me.client.UseCynosdbClient().DescribeClusterParams(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) } @@ -959,7 +968,7 @@ func (me *CynosdbService) DescribeClusterParamsByFilter(ctx context.Context, clu } func (me *CynosdbService) DescribeCynosdbParamTemplatesByFilter(ctx context.Context, paramMap map[string]interface{}) (items []*cynosdb.ParamTemplateListInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeParamTemplatesRequest() defer func() { @@ -1004,10 +1013,10 @@ func (me *CynosdbService) DescribeCynosdbParamTemplatesByFilter(ctx context.Cont if v, ok := paramMap["order_direction"]; ok { request.OrderDirection = v.(*string) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { response, e := me.client.UseCynosdbClient().DescribeParamTemplates(request) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) } @@ -1023,7 +1032,7 @@ func (me *CynosdbService) DescribeCynosdbParamTemplatesByFilter(ctx context.Cont func (me *CynosdbService) DescribeCynosdbAuditLogsByFilter(ctx context.Context, param map[string]interface{}) (auditLogs []*cynosdb.AuditLog, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeAuditLogsRequest() ) @@ -1089,7 +1098,7 @@ func (me *CynosdbService) DescribeCynosdbAuditLogsByFilter(ctx context.Context, func (me *CynosdbService) DescribeCynosdbBackupDownloadUrlById(ctx context.Context, param map[string]interface{}) (backupDownloadUrl *cynosdb.DescribeBackupDownloadUrlResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeBackupDownloadUrlRequest() ) @@ -1128,7 +1137,7 @@ func (me *CynosdbService) DescribeCynosdbBackupDownloadUrlById(ctx context.Conte func (me *CynosdbService) DescribeCynosdbBinlogDownloadUrlByFilter(ctx context.Context, param map[string]interface{}) (binlogDownloadUrl *cynosdb.DescribeBinlogDownloadUrlResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeBinlogDownloadUrlRequest() ) @@ -1167,7 +1176,7 @@ func (me *CynosdbService) DescribeCynosdbBinlogDownloadUrlByFilter(ctx context.C func (me *CynosdbService) DescribeCynosdbClusterDetailDatabasesByFilter(ctx context.Context, param map[string]interface{}) (clusterDetailDatabases []*cynosdb.DbInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeClusterDetailDatabasesRequest() ) @@ -1221,7 +1230,7 @@ func (me *CynosdbService) DescribeCynosdbClusterDetailDatabasesByFilter(ctx cont func (me *CynosdbService) DescribeCynosdbClusterParamLogsByFilter(ctx context.Context, param map[string]interface{}) (clusterParamLogs []*cynosdb.ClusterParamModifyLog, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeClusterParamLogsRequest() ) @@ -1281,7 +1290,7 @@ func (me *CynosdbService) DescribeCynosdbClusterParamLogsByFilter(ctx context.Co func (me *CynosdbService) DescribeCynosdbClusterByFilter(ctx context.Context, param map[string]interface{}) (cluster []*cynosdb.DatabaseTables, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewSearchClusterTablesRequest() ) @@ -1327,7 +1336,7 @@ func (me *CynosdbService) DescribeCynosdbClusterByFilter(ctx context.Context, pa func (me *CynosdbService) DescribeCynosdbDescribeInstanceSlowQueriesByFilter(ctx context.Context, param map[string]interface{}) (describeInstanceSlowQueries []*cynosdb.BinlogItem, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeBinlogsRequest() ) @@ -1384,7 +1393,7 @@ func (me *CynosdbService) DescribeCynosdbDescribeInstanceSlowQueriesByFilter(ctx func (me *CynosdbService) DescribeCynosdbDescribeInstanceErrorLogsByFilter(ctx context.Context, param map[string]interface{}) (describeInstanceErrorLogs []*cynosdb.CynosdbErrorLogItem, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeInstanceErrorLogsRequest() ) @@ -1453,7 +1462,7 @@ func (me *CynosdbService) DescribeCynosdbDescribeInstanceErrorLogsByFilter(ctx c func (me *CynosdbService) DescribeCynosdbAccountAllGrantPrivilegesByFilter(ctx context.Context, param map[string]interface{}) (accountAllGrantPrivileges *cynosdb.DescribeAccountAllGrantPrivilegesResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeAccountAllGrantPrivilegesRequest() ) @@ -1494,7 +1503,7 @@ func (me *CynosdbService) DescribeCynosdbAccountAllGrantPrivilegesByFilter(ctx c func (me *CynosdbService) DescribeCynosdbProjectSecurityGroupsByFilter(ctx context.Context, param map[string]interface{}) (projectSecurityGroups []*cynosdb.SecurityGroup, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeProjectSecurityGroupsRequest() ) @@ -1548,7 +1557,7 @@ func (me *CynosdbService) DescribeCynosdbProjectSecurityGroupsByFilter(ctx conte func (me *CynosdbService) DescribeCynosdbResourcePackageSaleSpecsByFilter(ctx context.Context, param map[string]interface{}) (resourcePackageSaleSpecs []*cynosdb.SalePackageSpec, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeResourcePackageSaleSpecRequest() ) @@ -1605,7 +1614,7 @@ func (me *CynosdbService) DescribeCynosdbResourcePackageSaleSpecsByFilter(ctx co func (me *CynosdbService) DescribeCynosdbRollbackTimeRangeByFilter(ctx context.Context, param map[string]interface{}) (rollbackTimeRange *cynosdb.DescribeRollbackTimeRangeResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeRollbackTimeRangeRequest() ) @@ -1642,7 +1651,7 @@ func (me *CynosdbService) DescribeCynosdbRollbackTimeRangeByFilter(ctx context.C func (me *CynosdbService) DescribeCynosdbRollbackTimeValidityByFilter(ctx context.Context, param map[string]interface{}) (rollbackTimeValidity *cynosdb.DescribeRollbackTimeValidityResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeRollbackTimeValidityRequest() ) @@ -1685,7 +1694,7 @@ func (me *CynosdbService) DescribeCynosdbRollbackTimeValidityByFilter(ctx contex func (me *CynosdbService) DescribeCynosdbResourcePackageListByFilter(ctx context.Context, param map[string]interface{}) (resourcePackageList []*cynosdb.Package, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeResourcePackageListRequest() ) @@ -1753,7 +1762,7 @@ func (me *CynosdbService) DescribeCynosdbResourcePackageListByFilter(ctx context } func (me *CynosdbService) DescribeCynosdbClusterResourcePackagesAttachmentById(ctx context.Context, clusterId string) (clusterResourcePackagesAttachment *cynosdb.CynosdbClusterDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeClusterDetailRequest() request.ClusterId = &clusterId @@ -1782,7 +1791,7 @@ func (me *CynosdbService) DescribeCynosdbClusterResourcePackagesAttachmentById(c } func (me *CynosdbService) DeleteCynosdbClusterResourcePackagesAttachmentById(ctx context.Context, clusterId string, packageIdsSet []*string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewUnbindClusterResourcePackagesRequest() request.ClusterId = &clusterId @@ -1808,7 +1817,7 @@ func (me *CynosdbService) DeleteCynosdbClusterResourcePackagesAttachmentById(ctx } func (me *CynosdbService) DeleteCynosdbProxyById(ctx context.Context, clusterId string) (flowId *int64, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewCloseProxyRequest() request.ClusterId = &clusterId @@ -1833,7 +1842,7 @@ func (me *CynosdbService) DeleteCynosdbProxyById(ctx context.Context, clusterId } func (me *CynosdbService) DescribeCynosdbProxyById(ctx context.Context, clusterId, proxyGroupId string) (proxy *cynosdb.DescribeProxiesResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeProxiesRequest() request.ClusterId = &clusterId @@ -1874,7 +1883,7 @@ func (me *CynosdbService) DescribeCynosdbProxyById(ctx context.Context, clusterI func (me *CynosdbService) DescribeCynosdbProxyNodeByFilter(ctx context.Context, param map[string]interface{}) (proxyNode []*cynosdb.ProxyNodeInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeProxyNodesRequest() ) @@ -1931,7 +1940,7 @@ func (me *CynosdbService) DescribeCynosdbProxyNodeByFilter(ctx context.Context, func (me *CynosdbService) DescribeCynosdbProxyVersionByFilter(ctx context.Context, param map[string]interface{}) (proxyVersion *cynosdb.DescribeSupportProxyVersionResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeSupportProxyVersionRequest() ) @@ -1970,7 +1979,7 @@ func (me *CynosdbService) DescribeCynosdbProxyVersionByFilter(ctx context.Contex func (me *CynosdbService) CynosdbInstanceIsolateStateRefreshFunc(clusterId string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { - ctx := contextNil + ctx := tccommon.ContextNil object, detail, _, err := me.DescribeClusterById(ctx, clusterId) @@ -1992,7 +2001,7 @@ func (me *CynosdbService) CynosdbInstanceIsolateStateRefreshFunc(clusterId strin func (me *CynosdbService) CynosdbInstanceOfflineStateRefreshFunc(clusterId string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { - ctx := contextNil + ctx := tccommon.ContextNil object, detail, _, err := me.DescribeClusterById(ctx, clusterId) @@ -2014,7 +2023,7 @@ func (me *CynosdbService) CynosdbInstanceOfflineStateRefreshFunc(clusterId strin func (me *CynosdbService) DescribeCynosdbZoneByFilter(ctx context.Context, param map[string]interface{}) (zone []*cynosdb.SaleRegion, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeZonesRequest() ) @@ -2051,7 +2060,7 @@ func (me *CynosdbService) DescribeCynosdbZoneByFilter(ctx context.Context, param } func (me *CynosdbService) DescribeCynosdbAccountById(ctx context.Context, clusterId string, accountName string, host string) (account *cynosdb.Account, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeAccountsRequest() request.ClusterId = &clusterId @@ -2082,7 +2091,7 @@ func (me *CynosdbService) DescribeCynosdbAccountById(ctx context.Context, cluste } func (me *CynosdbService) DeleteCynosdbAccountById(ctx context.Context, clusterId string, accountNames string, host string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDeleteAccountsRequest() request.ClusterId = &clusterId @@ -2112,7 +2121,7 @@ func (me *CynosdbService) DeleteCynosdbAccountById(ctx context.Context, clusterI } func (me *CynosdbService) DescribeCynosdbAccountPrivilegesById(ctx context.Context, clusterId string, accountName string, host string) (accountPrivileges *cynosdb.DescribeAccountAllGrantPrivilegesResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeAccountAllGrantPrivilegesRequest() request.ClusterId = &clusterId @@ -2141,7 +2150,7 @@ func (me *CynosdbService) DescribeCynosdbAccountPrivilegesById(ctx context.Conte } func (me *CynosdbService) DeleteCynosdbAccountPrivilegesById(ctx context.Context, clusterId string, accountName string, host string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewRevokeAccountPrivilegesRequest() request.ClusterId = &clusterId @@ -2169,7 +2178,7 @@ func (me *CynosdbService) DeleteCynosdbAccountPrivilegesById(ctx context.Context } func (me *CynosdbService) DescribeCynosdbBinlogSaveDaysById(ctx context.Context, clusterId string) (binlogSaveDays *int64, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeBinlogSaveDaysRequest() request.ClusterId = &clusterId @@ -2198,7 +2207,7 @@ func (me *CynosdbService) DescribeCynosdbBinlogSaveDaysById(ctx context.Context, } func (me *CynosdbService) DescribeCynosdbClusterDatabasesById(ctx context.Context, clusterId string, dbName string) (clusterDatabases *cynosdb.DbInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeClusterDetailDatabasesRequest() request.ClusterId = &clusterId @@ -2229,7 +2238,7 @@ func (me *CynosdbService) DescribeCynosdbClusterDatabasesById(ctx context.Contex } func (me *CynosdbService) DeleteCynosdbClusterDatabasesById(ctx context.Context, clusterId, dbName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDeleteClusterDatabaseRequest() request.ClusterId = &clusterId @@ -2254,7 +2263,7 @@ func (me *CynosdbService) DeleteCynosdbClusterDatabasesById(ctx context.Context, } func (me *CynosdbService) DescribeCynosdbClusterPasswordComplexityById(ctx context.Context, clusterId string) (clusterPasswordComplexity *cynosdb.DescribeClusterPasswordComplexityResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeClusterPasswordComplexityRequest() request.ClusterId = &clusterId @@ -2283,7 +2292,7 @@ func (me *CynosdbService) DescribeCynosdbClusterPasswordComplexityById(ctx conte } func (me *CynosdbService) DeleteCynosdbClusterPasswordComplexityById(ctx context.Context, clusterId string) (flowId int64, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewCloseClusterPasswordComplexityRequest() request.ClusterIds = []*string{&clusterId} @@ -2308,7 +2317,7 @@ func (me *CynosdbService) DeleteCynosdbClusterPasswordComplexityById(ctx context } func (me *CynosdbService) DescribeFlow(ctx context.Context, flowId int64) (ok bool, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeFlowRequest() request.FlowId = &flowId @@ -2336,7 +2345,7 @@ func (me *CynosdbService) DescribeFlow(ctx context.Context, flowId int64) (ok bo } func (me *CynosdbService) CopyClusterPasswordComplexity(ctx context.Context, clusterId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewCopyClusterPasswordComplexityRequest() request.ClusterIds = []*string{&clusterId} @@ -2358,7 +2367,7 @@ func (me *CynosdbService) CopyClusterPasswordComplexity(ctx context.Context, clu log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) flowId := *response.Response.FlowId - err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := me.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -2383,7 +2392,7 @@ func (me *CynosdbService) CopyClusterPasswordComplexity(ctx context.Context, clu } func (me *CynosdbService) DescribeCynosdbInstanceParamById(ctx context.Context, clusterId string, instanceId string) (instanceParam *cynosdb.InstanceParamItem, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeInstanceParamsRequest() request.ClusterId = &clusterId @@ -2413,7 +2422,7 @@ func (me *CynosdbService) DescribeCynosdbInstanceParamById(ctx context.Context, } func (me *CynosdbService) DeleteCynosdbWanById(ctx context.Context, instanceGrpId string) (flowId int64, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewCloseWanRequest() request.InstanceGrpId = &instanceGrpId @@ -2438,7 +2447,7 @@ func (me *CynosdbService) DeleteCynosdbWanById(ctx context.Context, instanceGrpI } func (me *CynosdbService) DescribeCynosdbParamTemplateById(ctx context.Context, templateId int64) (paramTemplate *cynosdb.DescribeParamTemplateDetailResponseParams, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeParamTemplateDetailRequest() request.TemplateId = &templateId @@ -2463,7 +2472,7 @@ func (me *CynosdbService) DescribeCynosdbParamTemplateById(ctx context.Context, } func (me *CynosdbService) DeleteCynosdbParamTemplateById(ctx context.Context, templateId int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDeleteParamTemplateRequest() request.TemplateId = &templateId @@ -2487,17 +2496,17 @@ func (me *CynosdbService) DeleteCynosdbParamTemplateById(ctx context.Context, te } func (me *CynosdbService) SetRenewFlag(ctx context.Context, instanceId string, autoRenewFlag int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewSetRenewFlagRequest() request.ResourceIds = []*string{&instanceId} request.AutoRenewFlag = &autoRenewFlag - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, errRet = me.client.UseCynosdbClient().SetRenewFlag(request) if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), errRet.Error()) - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -2509,17 +2518,17 @@ func (me *CynosdbService) SetRenewFlag(ctx context.Context, instanceId string, a } func (me *CynosdbService) ModifyClusterName(ctx context.Context, clusterId string, clusterName string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewModifyClusterNameRequest() request.ClusterId = &clusterId request.ClusterName = &clusterName - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, errRet = me.client.UseCynosdbClient().ModifyClusterName(request) if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), errRet.Error()) - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -2531,19 +2540,19 @@ func (me *CynosdbService) ModifyClusterName(ctx context.Context, clusterId strin } func (me *CynosdbService) ModifyClusterStorage(ctx context.Context, clusterId string, newStorageLimit int64, oldStorageLimit int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewModifyClusterStorageRequest() request.ClusterId = &clusterId request.NewStorageLimit = &newStorageLimit request.OldStorageLimit = &oldStorageLimit request.DealMode = helper.IntInt64(0) - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, errRet = me.client.UseCynosdbClient().ModifyClusterStorage(request) if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), errRet.Error()) - return retryError(errRet) + return tccommon.RetryError(errRet) } return nil }) @@ -2555,7 +2564,7 @@ func (me *CynosdbService) ModifyClusterStorage(ctx context.Context, clusterId st } func (me *CynosdbService) SwitchClusterVpc(ctx context.Context, clusterId string, vpcId string, subnetId string, oldIpReserveHours int64) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewSwitchClusterVpcRequest() request.ClusterId = &clusterId request.UniqVpcId = &vpcId @@ -2563,12 +2572,12 @@ func (me *CynosdbService) SwitchClusterVpc(ctx context.Context, clusterId string request.OldIpReserveHours = &oldIpReserveHours var flowId int64 - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, errRet := me.client.UseCynosdbClient().SwitchClusterVpc(request) if errRet != nil { log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), errRet.Error()) - return retryError(errRet) + return tccommon.RetryError(errRet) } flowId = *response.Response.FlowId return nil @@ -2577,7 +2586,7 @@ func (me *CynosdbService) SwitchClusterVpc(ctx context.Context, clusterId string return } - err := resource.Retry(6*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(6*tccommon.ReadRetryTimeout, func() *resource.RetryError { ok, err := me.DescribeFlow(ctx, flowId) if err != nil { if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok { @@ -2602,7 +2611,7 @@ func (me *CynosdbService) SwitchClusterVpc(ctx context.Context, clusterId string } func (me *CynosdbService) DescribeCynosdbResourcePackageById(ctx context.Context, packageId string) (resourcePackage *cynosdb.PackageDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeResourcePackageDetailRequest() request.PackageId = &packageId @@ -2631,7 +2640,7 @@ func (me *CynosdbService) DescribeCynosdbResourcePackageById(ctx context.Context } func (me *CynosdbService) DeleteCynosdbResourcePackageById(ctx context.Context, packageId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewRefundResourcePackageRequest() request.PackageId = &packageId @@ -2655,7 +2664,7 @@ func (me *CynosdbService) DeleteCynosdbResourcePackageById(ctx context.Context, } func (me *CynosdbService) DescribeCynosdbClusterSlaveZoneById(ctx context.Context, clusterId string) (clusterSlaveZone *cynosdb.CynosdbClusterDetail, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeClusterDetailRequest() request.ClusterId = &clusterId @@ -2680,7 +2689,7 @@ func (me *CynosdbService) DescribeCynosdbClusterSlaveZoneById(ctx context.Contex } func (me *CynosdbService) DeleteCynosdbClusterSlaveZoneById(ctx context.Context, clusterId string, slaveZone string) (flowId *int64, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewRemoveClusterSlaveZoneRequest() request.ClusterId = &clusterId @@ -2729,7 +2738,7 @@ func (me *CynosdbService) CynosdbClusterSlaveZoneStateRefreshFunc(flowId int64, func (me *CynosdbService) DescribeCynosdbInstanceSlowQueriesByFilter(ctx context.Context, param map[string]interface{}) (InstanceSlowQueries []*cynosdb.SlowQueriesItem, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = cynosdb.NewDescribeInstanceSlowQueriesRequest() ) @@ -2797,7 +2806,7 @@ func (me *CynosdbService) DescribeCynosdbInstanceSlowQueriesByFilter(ctx context } func (me *CynosdbService) DescribeCynosdbProxyEndPointById(ctx context.Context, clusterId, proxyGroupId string) (proxyEndPoint *cynosdb.ProxyGroupInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeProxiesRequest() request.ClusterId = &clusterId @@ -2832,7 +2841,7 @@ func (me *CynosdbService) DescribeCynosdbProxyEndPointById(ctx context.Context, } func (me *CynosdbService) DeleteCynosdbProxyEndPointById(ctx context.Context, clusterId, proxyGroupId string) (flowId int64, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewCloseProxyRequest() request.ClusterId = &clusterId request.ProxyGroupId = &proxyGroupId @@ -2859,7 +2868,7 @@ func (me *CynosdbService) DeleteCynosdbProxyEndPointById(ctx context.Context, cl } func (me *CynosdbService) DescribeCynosdbUpgradeProxyVersionById(ctx context.Context, clusterId string) (upgradeProxyGroup *cynosdb.ProxyGroup, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := cynosdb.NewDescribeProxiesRequest() request.ClusterId = &clusterId diff --git a/tencentcloud/services/cynosdb/service_tencentcloud_mysql.go b/tencentcloud/services/cynosdb/service_tencentcloud_mysql.go new file mode 100644 index 0000000000..408922d6ba --- /dev/null +++ b/tencentcloud/services/cynosdb/service_tencentcloud_mysql.go @@ -0,0 +1,3318 @@ +package cynosdb + +import ( + "context" + "fmt" + "log" + "time" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" + "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +type MysqlService struct { + client *connectivity.TencentCloudClient +} + +// check if the err means the mysql_id is not found +func (me *MysqlService) NotFoundMysqlInstance(err error) bool { + + if err == nil { + return false + } + + sdkErr, ok := err.(*errors.TencentCloudSDKError) + + if ok { + if sdkErr.Code == MysqlInstanceIdNotFound || sdkErr.Code == MysqlInstanceIdNotFound2 { + return true + } + } + return false +} + +func (me *MysqlService) DescribeBackupsByMysqlId(ctx context.Context, + mysqlId string, + leftNumber int64) (backupInfos []*cdb.BackupInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + + listInitSize := leftNumber + if listInitSize > 500 { + listInitSize = 500 + } + backupInfos = make([]*cdb.BackupInfo, 0, listInitSize) + + request := cdb.NewDescribeBackupsRequest() + request.InstanceId = &mysqlId + + var offset, limit int64 = 0, 50 +needMoreItems: + if leftNumber <= 0 { + return + } + if leftNumber < limit { + limit = leftNumber + } + request.Limit = &limit + request.Offset = &offset + 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.UseMysqlClient().DescribeBackups(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()) + + totalCount := *response.Response.TotalCount + leftNumber = leftNumber - limit + offset += limit + + backupInfos = append(backupInfos, response.Response.Items...) + if leftNumber > 0 && totalCount-offset > 0 { + goto needMoreItems + } + return backupInfos, nil + +} + +func (me *MysqlService) CreateBackup(ctx context.Context, mysqlId string) (backupId int64, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewCreateBackupRequest() + + backupMethod := "logical" + request.BackupMethod = &backupMethod + request.InstanceId = &mysqlId + + 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.UseMysqlClient().CreateBackup(request) + if err != nil { + errRet = err + return + } + backupId = int64(*response.Response.BackupId) + return +} + +func (me *MysqlService) DescribeDBZoneConfig(ctx context.Context) (sellConfigures *cdb.CdbZoneDataResult, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeCdbZoneConfigRequest() + + 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.UseMysqlClient().DescribeCdbZoneConfig(request) + if err != nil { + errRet = err + return + } + sellConfigures = response.Response.DataResult + return +} + +func (me *MysqlService) DescribeBackupConfigByMysqlId(ctx context.Context, mysqlId string) (desResponse *cdb.DescribeBackupConfigResponse, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeBackupConfigRequest() + request.InstanceId = &mysqlId + + 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.UseMysqlClient().DescribeBackupConfig(request) + if err != nil { + errRet = err + return + } + desResponse = response + return +} + +func (me *MysqlService) ModifyBackupConfigByMysqlId(ctx context.Context, mysqlId string, retentionPeriod int64, backupModel, + backupTime string, binlogExpireDays int64, enableBinlogStandby string, binlogStandbyDays int64) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewModifyBackupConfigRequest() + request.InstanceId = &mysqlId + request.ExpireDays = &retentionPeriod + request.StartTime = &backupTime + request.BackupMethod = &backupModel + + if binlogExpireDays > 0 { + request.BinlogExpireDays = &binlogExpireDays + } + + if enableBinlogStandby != "" { + request.EnableBinlogStandby = &enableBinlogStandby + } + + if binlogStandbyDays > 0 { + request.BinlogStandbyDays = &binlogStandbyDays + } + + 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.UseMysqlClient().ModifyBackupConfig(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 +} +func (me *MysqlService) DescribeDefaultParameters(ctx context.Context, engineVersion string) (parameterList []*cdb.ParameterDetail, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeDefaultParamsRequest() + request.EngineVersion = &engineVersion + + 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.UseMysqlClient().DescribeDefaultParams(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()) + + parameterList = response.Response.Items + return +} + +func (me *MysqlService) DescribeInstanceParameters(ctx context.Context, instanceId string) (parameterList []*cdb.ParameterDetail, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeInstanceParamsRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeInstanceParams(request) + if err != nil { + errRet = err + return + } + + parameterList = response.Response.Items + return +} + +func (me *MysqlService) ModifyInstanceParam(ctx context.Context, instanceId string, params map[string]string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyInstanceParamRequest() + request.InstanceIds = []*string{&instanceId} + request.ParamList = make([]*cdb.Parameter, 0, len(params)) + + for k, v := range params { + key := k + value := v + var param = cdb.Parameter{Name: &key, CurrentValue: &value} + request.ParamList = append(request.ParamList, ¶m) + } + 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.UseMysqlClient().ModifyInstanceParam(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()) + + asyncRequestId = *response.Response.AsyncRequestId + + return +} + +func (me *MysqlService) DescribeCaresParameters(ctx context.Context, instanceId string, cares []string) (caresKv map[string]interface{}, errRet error) { + caresKv = make(map[string]interface{}) + parameterList, err := me.DescribeInstanceParameters(ctx, instanceId) + if err != nil { + sdkErr, ok := err.(*errors.TencentCloudSDKError) + if ok && sdkErr.Code == "CdbError" { + return + } + errRet = err + return + } + + var inSlice = func(key string) bool { + for _, care := range cares { + if key == care { + return true + } + } + return false + } + + for _, paramInfo := range parameterList { + if inSlice(*paramInfo.Name) { + caresKv[*paramInfo.Name] = *paramInfo.CurrentValue + } + } + return +} + +func (me *MysqlService) CreateAccount(ctx context.Context, mysqlId string, + accountName, accountHost, accountPassword, accountDescription string, maxUserConnections int64) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewCreateAccountsRequest() + + var accountInfo = cdb.Account{User: &accountName, Host: &accountHost} + var accountInfos = []*cdb.Account{&accountInfo} + + request.InstanceId = &mysqlId + request.Password = &accountPassword + request.Accounts = accountInfos + request.Description = &accountDescription + request.MaxUserConnections = &maxUserConnections + + 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.UseMysqlClient().CreateAccounts(request) + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) ModifyAccountPassword(ctx context.Context, mysqlId string, + accountName, accountHost, accountPassword string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyAccountPasswordRequest() + + var accountInfo = cdb.Account{User: &accountName, Host: &accountHost} + var accountInfos = []*cdb.Account{&accountInfo} + + request.InstanceId = &mysqlId + request.NewPassword = &accountPassword + request.Accounts = accountInfos + + 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.UseMysqlClient().ModifyAccountPassword(request) + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) ModifyAccountMaxUserConnections(ctx context.Context, mysqlId, accountName, accountHost string, maxUserConnections int64) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyAccountMaxUserConnectionsRequest() + + var accountInfo = cdb.Account{User: &accountName, Host: &accountHost} + var accountInfos = []*cdb.Account{&accountInfo} + + request.InstanceId = &mysqlId + request.Accounts = accountInfos + request.MaxUserConnections = &maxUserConnections + + 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.UseMysqlClient().ModifyAccountMaxUserConnections(request) + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) UpgradeDBInstanceEngineVersion(ctx context.Context, mysqlId, engineVersion string, upgradeSubversion, maxDelayTime int64) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewUpgradeDBInstanceEngineVersionRequest() + + var waitSwitch int64 = 0 // 0- switch immediately, 1- time window switch + + request.InstanceId = &mysqlId + request.EngineVersion = &engineVersion + request.WaitSwitch = &waitSwitch + request.UpgradeSubversion = &upgradeSubversion + request.MaxDelayTime = &maxDelayTime + + 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.UseMysqlClient().UpgradeDBInstanceEngineVersion(request) + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) ModifyAccountHost(ctx context.Context, mysqlId, accountName, host, newHost string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyAccountHostRequest() + + request.InstanceId = &mysqlId + request.User = &accountName + request.Host = &host + request.NewHost = &newHost + + 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.UseMysqlClient().ModifyAccountHost(request) + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) ModifyAccountDescription(ctx context.Context, mysqlId string, + accountName, accountHost, accountDescription string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyAccountDescriptionRequest() + + var accountInfo = cdb.Account{User: &accountName, Host: &accountHost} + var accountInfos = []*cdb.Account{&accountInfo} + + request.InstanceId = &mysqlId + request.Description = &accountDescription + request.Accounts = accountInfos + + 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.UseMysqlClient().ModifyAccountDescription(request) + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) DeleteAccount(ctx context.Context, mysqlId string, + accountName string, accountHost string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDeleteAccountsRequest() + + var accountInfo = cdb.Account{User: &accountName, Host: &accountHost} + var accountInfos = []*cdb.Account{&accountInfo} + + request.InstanceId = &mysqlId + request.Accounts = accountInfos + + 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.UseMysqlClient().DeleteAccounts(request) + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) DescribeAccounts(ctx context.Context, mysqlId string) (accountInfos []*cdb.AccountInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + + var ( + listInitSize int64 = 100 + limit int64 = 100 + offset int64 = 0 + leftNumbers int64 = 0 + dofirst = true + ) + + accountInfos = make([]*cdb.AccountInfo, 0, listInitSize) + request := cdb.NewDescribeAccountsRequest() + + request.InstanceId = &mysqlId + request.Offset = &offset + request.Limit = &limit + + 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()) + } + }() + +needMoreItems: + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeAccounts(request) + if err != nil { + errRet = err + return + } + if dofirst { + leftNumbers = *response.Response.TotalCount - limit + dofirst = false + } else { + leftNumbers = leftNumbers - limit + } + offset = offset + limit + + accountInfos = append(accountInfos, response.Response.Items...) + + if leftNumbers > 0 { + goto needMoreItems + } else { + return + } + +} + +func (me *MysqlService) _innerDescribeAsyncRequestInfo(ctx context.Context, asyncRequestId string) (status, message string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeAsyncRequestInfoRequest() + request.AsyncRequestId = &asyncRequestId + + 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.UseMysqlClient().DescribeAsyncRequestInfo(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()) + + status = *response.Response.Status + message = *response.Response.Info + return +} + +func (me *MysqlService) DescribeAsyncRequestInfo(ctx context.Context, asyncRequestId string) (status, message string, errRet error) { + + // Post https://cdb.tencentcloudapi.com/: always get "Gateway Time-out" + status, message, errRet = me._innerDescribeAsyncRequestInfo(ctx, asyncRequestId) + if errRet != nil { + if _, ok := errRet.(*errors.TencentCloudSDKError); !ok { + status, message, errRet = me._innerDescribeAsyncRequestInfo(ctx, asyncRequestId) + } + } + if errRet != nil { + if _, ok := errRet.(*errors.TencentCloudSDKError); !ok { + time.Sleep(2 * time.Second) + status, message, errRet = me._innerDescribeAsyncRequestInfo(ctx, asyncRequestId) + } + } + if errRet != nil { + if _, ok := errRet.(*errors.TencentCloudSDKError); !ok { + time.Sleep(5 * time.Second) + status, message, errRet = me._innerDescribeAsyncRequestInfo(ctx, asyncRequestId) + } + } + return +} + +func (me *MysqlService) ModifyAccountPrivileges(ctx context.Context, mysqlId string, + accountName, accountHost string, databaseNames []string, privileges []string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewModifyAccountPrivilegesRequest() + request.InstanceId = &mysqlId + + var accountInfo = cdb.Account{User: &accountName, Host: &accountHost} + request.Accounts = []*cdb.Account{&accountInfo} + + request.DatabasePrivileges = make([]*cdb.DatabasePrivilege, 0, len(databaseNames)) + + for _, databaseName := range databaseNames { + var temp = databaseName + var cdbprivileges = cdb.DatabasePrivilege{Database: &temp} + cdbprivileges.Privileges = make([]*string, len(privileges)) + + for i := range privileges { + cdbprivileges.Privileges[i] = &privileges[i] + } + + request.DatabasePrivileges = append(request.DatabasePrivileges, &cdbprivileges) + } + + 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.UseMysqlClient().ModifyAccountPrivileges(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()) + + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) DescribeAccountPrivileges(ctx context.Context, mysqlId string, + accountName string, accountHost string, databaseNames []string) (privileges []string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + privileges = make([]string, 0, len(MYSQL_DATABASE_PRIVILEGE)) + + request := cdb.NewDescribeAccountPrivilegesRequest() + request.InstanceId = &mysqlId + request.User = &accountName + request.Host = &accountHost + + 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.UseMysqlClient().DescribeAccountPrivileges(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()) + + var inSlice = func(str string, strs []string) bool { + for _, v := range strs { + if v == str { + return true + } + } + return false + } + + privilegeCountMap := make(map[string]int) + + hasMapSize := 0 + for _, dataPrivilege := range response.Response.DatabasePrivileges { + + if inSlice(*dataPrivilege.Database, databaseNames) { + + hasMapSize++ + + for _, privilege := range dataPrivilege.Privileges { + privilegeCountMap[*privilege]++ + } + + } + } + // every exist database all has the privilege + for privilege, scount := range privilegeCountMap { + if scount == hasMapSize { + privileges = append(privileges, privilege) + } + } + + log.Printf("[DEBUG]%s we got same privileges is %+v \n", logId, privileges) + return +} + +func (me *MysqlService) DescribeDBInstanceById(ctx context.Context, mysqlId string) (mysqlInfo *cdb.InstanceInfo, errRet error) { + + // Post https://cdb.tencentcloudapi.com/: always get "Gateway Time-out" + mysqlInfo, errRet = me._innerDescribeDBInstanceById(ctx, mysqlId) + + if errRet != nil { + if _, ok := errRet.(*errors.TencentCloudSDKError); !ok { + mysqlInfo, errRet = me._innerDescribeDBInstanceById(ctx, mysqlId) + } + } + if errRet != nil { + if _, ok := errRet.(*errors.TencentCloudSDKError); !ok { + time.Sleep(3 * time.Second) + mysqlInfo, errRet = me._innerDescribeDBInstanceById(ctx, mysqlId) + + } + } + if errRet != nil { + if _, ok := errRet.(*errors.TencentCloudSDKError); !ok { + time.Sleep(5 * time.Second) + mysqlInfo, errRet = me._innerDescribeDBInstanceById(ctx, mysqlId) + } + } + return +} + +func (me *MysqlService) DescribeIsolatedDBInstanceById(ctx context.Context, mysqlId string) (mysqlInfo *cdb.InstanceInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeDBInstancesRequest() + request.InstanceIds = []*string{&mysqlId} + + request.Status = []*uint64{helper.Uint64(MYSQL_STATUS_ISOLATED), + helper.Uint64(MYSQL_STATUS_ISOLATED_1), + helper.Uint64(MYSQL_STATUS_ISOLATED_2)} + + 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.UseMysqlClient().DescribeDBInstances(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()) + + if len(response.Response.Items) == 0 { + return + } + if len(response.Response.Items) > 1 { + errRet = fmt.Errorf("One mysql id got %d instance info", len(response.Response.Items)) + return + } + mysqlInfo = response.Response.Items[0] + + return +} + +func (me *MysqlService) _innerDescribeDBInstanceById(ctx context.Context, mysqlId string) (mysqlInfo *cdb.InstanceInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeDBInstancesRequest() + request.InstanceIds = []*string{&mysqlId} + + 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.UseMysqlClient().DescribeDBInstances(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()) + + if len(response.Response.Items) == 0 { + return + } + if len(response.Response.Items) > 1 { + errRet = fmt.Errorf("One mysql id got %d instance info", len(response.Response.Items)) + } + mysqlInfo = response.Response.Items[0] + + return +} + +func (me *MysqlService) DescribeRunningDBInstanceById(ctx context.Context, mysqlId string) (mysqlInfo *cdb.InstanceInfo, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeDBInstancesRequest() + request.InstanceIds = []*string{&mysqlId} + runningStatus := uint64(1) + request.Status = []*uint64{&runningStatus} + + 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.UseMysqlClient().DescribeDBInstances(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()) + + if len(response.Response.Items) == 0 { + return + } + if len(response.Response.Items) > 1 { + errRet = fmt.Errorf("One mysql id got %d instance info", len(response.Response.Items)) + } + mysqlInfo = response.Response.Items[0] + + return +} + +func (me *MysqlService) CheckDBGTIDOpen(ctx context.Context, mysqlId string) (open int64, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeDBInstanceGTIDRequest() + request.InstanceId = &mysqlId + + 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.UseMysqlClient().DescribeDBInstanceGTID(request) + if err != nil { + sdkErr, ok := err.(*errors.TencentCloudSDKError) + if ok && sdkErr.Code == "CdbError" { + open = 0 + return + } + errRet = err + return + } + open = *response.Response.IsGTIDOpen + return +} + +func (me *MysqlService) DescribeDBSecurityGroups(ctx context.Context, mysqlId string) (securityGroups []string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeDBSecurityGroupsRequest() + request.InstanceId = &mysqlId + securityGroups = make([]string, 0, 10) + 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.UseMysqlClient().DescribeDBSecurityGroups(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()) + + for _, sg := range response.Response.Groups { + securityGroups = append(securityGroups, *sg.SecurityGroupId) + } + return +} + +func (me *MysqlService) ModifyInstanceTag(ctx context.Context, mysqlId string, deleteTags, modifyTags map[string]string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyInstanceTagRequest() + request.InstanceId = &mysqlId + + if len(modifyTags) > 0 { + request.ReplaceTags = make([]*cdb.TagInfo, 0, len(modifyTags)) + for name, value := range modifyTags { + tagKey := name + tagValue := value + tag := cdb.TagInfo{TagKey: &tagKey, TagValue: []*string{&tagValue}} + request.ReplaceTags = append(request.ReplaceTags, &tag) + } + } + if len(deleteTags) > 0 { + request.DeleteTags = make([]*cdb.TagInfo, 0, len(deleteTags)) + for name, value := range deleteTags { + tagKey := name + tagValue := value + tag := cdb.TagInfo{TagKey: &tagKey, TagValue: []*string{&tagValue}} + request.DeleteTags = append(request.DeleteTags, &tag) + } + } + 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.UseMysqlClient().ModifyInstanceTag(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 +} + +func (me *MysqlService) DescribeTagsOfInstanceId(ctx context.Context, mysqlId string) (tags map[string]string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeTagsOfInstanceIdsRequest() + request.InstanceIds = []*string{&mysqlId} + tags = make(map[string]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()) + } + }() + var ( + limit int64 = 10 + offset int64 = 0 + ) + request.Limit = &limit + +again: + if request.Offset == nil { + request.Offset = &offset + } else { + offset = offset + limit + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeTagsOfInstanceIds(request) + if err != nil { + errRet = err + return + } + if len(response.Response.Rows) == 0 { + return + } + if len(response.Response.Rows) > 1 { + errRet = fmt.Errorf("One mysql id got %d tags info rows", len(response.Response.Rows)) + } + if len(response.Response.Rows[0].Tags) == 0 { + return + } + for _, tag := range response.Response.Rows[0].Tags { + if _, has := tags[*tag.TagKey]; has { + return + } + tags[*tag.TagKey] = *tag.TagValue + } + + goto again +} + +func (me *MysqlService) DescribeDBInstanceConfig(ctx context.Context, mysqlId string) (backupConfig *cdb.DescribeDBInstanceConfigResponse, + errRet error) { + logId := tccommon.GetLogId(ctx) + request := cdb.NewDescribeDBInstanceConfigRequest() + request.InstanceId = &mysqlId + + 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.UseMysqlClient().DescribeDBInstanceConfig(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()) + + backupConfig = response + + return +} + +// DEPRECATED: Specify these arguments while creating. +func (me *MysqlService) InitDBInstances(ctx context.Context, mysqlId, password, charset, lowerCase string, port int) (asyncRequestId string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := cdb.NewInitDBInstancesRequest() + request.InstanceIds = []*string{&mysqlId} + if password != "" { + request.NewPassword = &password + } + + if port != 0 { + request.Vport = helper.IntInt64(port) + } + + paramsMap := map[string]string{ + "character_set_server": "LATIN1", // ["utf8","latin1","gbk","utf8mb4"] + } + + if charset != "" { + paramsMap["character_set_server"] = charset // ["utf8","latin1","gbk","utf8mb4"] + } + + if lowerCase != "" { + paramsMap["lower_case_table_names"] = lowerCase // ["0","1"] + } + + for k, v := range paramsMap { + name := k + value := v + param := cdb.ParamInfo{Name: &name, Value: &value} + request.Parameters = append(request.Parameters, ¶m) + } + + 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.UseMysqlClient().InitDBInstances(request) + + if err != nil { + errRet = err + return + } + if len(response.Response.AsyncRequestIds) != 1 { + errRet = fmt.Errorf("init one mysql id got %d async ids", len(response.Response.AsyncRequestIds)) + return + } + + asyncRequestId = *response.Response.AsyncRequestIds[0] + return +} + +func (me *MysqlService) OpenWanService(ctx context.Context, mysqlId string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewOpenWanServiceRequest() + request.InstanceId = &mysqlId + + 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.UseMysqlClient().OpenWanService(request) + + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) CloseWanService(ctx context.Context, mysqlId string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewCloseWanServiceRequest() + request.InstanceId = &mysqlId + 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.UseMysqlClient().CloseWanService(request) + + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) OpenDBInstanceGTID(ctx context.Context, mysqlId string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewOpenDBInstanceGTIDRequest() + request.InstanceId = &mysqlId + 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.UseMysqlClient().OpenDBInstanceGTID(request) + + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) ModifyDBInstanceName(ctx context.Context, mysqlId, + newInstanceName string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewModifyDBInstanceNameRequest() + request.InstanceId = &mysqlId + request.InstanceName = &newInstanceName + + 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, errRet := me.client.UseMysqlClient().ModifyDBInstanceName(request) + + if errRet != nil { + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + + return +} + +func (me *MysqlService) ModifyDBInstanceVipVport(ctx context.Context, mysqlId, vpcId, subnetId string, port int64) (errRet error) { + logId := tccommon.GetLogId(ctx) + request := cdb.NewModifyDBInstanceVipVportRequest() + request.InstanceId = &mysqlId + request.DstPort = &port + if vpcId != "" { + request.UniqVpcId = &vpcId + } + if subnetId != "" { + request.UniqSubnetId = &subnetId + } + + 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, errRet := me.client.UseMysqlClient().ModifyDBInstanceVipVport(request) + + if errRet != nil { + return + } + log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", + logId, request.GetAction(), request.ToJsonString(), response.ToJsonString()) + return +} + +func (me *MysqlService) UpgradeDBInstance(ctx context.Context, mysqlId string, + memSize, cpu, volumeSize, fastUpgrade int64, deviceType string, slaveDeployMode, slaveSyncMode int64, + firstSlaveZone, secondSlaveZone string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + + var waitSwitch int64 = 0 // 0- switch immediately, 1- time window switch + + request := cdb.NewUpgradeDBInstanceRequest() + request.InstanceId = &mysqlId + request.Memory = &memSize + request.Cpu = &cpu + request.Volume = &volumeSize + request.WaitSwitch = &waitSwitch + request.FastUpgrade = &fastUpgrade + if slaveDeployMode != -1 { + request.DeployMode = &slaveDeployMode + } + if firstSlaveZone != "" { + request.SlaveZone = &firstSlaveZone + } + if secondSlaveZone != "" { + request.BackupZone = &secondSlaveZone + } + if slaveSyncMode != -1 { + request.ProtectMode = &slaveSyncMode + } + if deviceType != "" { + request.DeviceType = &deviceType + } + + 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.UseMysqlClient().UpgradeDBInstance(request) + + if err != nil { + errRet = err + return + } + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) ModifyDBInstanceProject(ctx context.Context, mysqlId string, newProjectId int64) (errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyDBInstanceProjectRequest() + request.InstanceIds = []*string{&mysqlId} + request.NewProjectId = &newProjectId + + 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.UseMysqlClient().ModifyDBInstanceProject(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 + +} + +func (me *MysqlService) ModifyDBInstanceSecurityGroups(ctx context.Context, mysqlId string, securityGroups []string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyDBInstanceSecurityGroupsRequest() + request.InstanceId = &mysqlId + request.SecurityGroupIds = make([]*string, 0, len(securityGroups)) + + for _, v := range securityGroups { + value := v + request.SecurityGroupIds = append(request.SecurityGroupIds, &value) + } + 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.UseMysqlClient().ModifyDBInstanceSecurityGroups(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 +} + +func (me *MysqlService) DisassociateSecurityGroup(ctx context.Context, mysqlId string, securityGroup string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDisassociateSecurityGroupsRequest() + request.InstanceIds = []*string{&mysqlId} + request.SecurityGroupId = &securityGroup + + 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.UseMysqlClient().DisassociateSecurityGroups(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 + +} + +func (me *MysqlService) ModifyAutoRenewFlag(ctx context.Context, mysqlId string, newRenewFlag int64) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewModifyAutoRenewFlagRequest() + request.InstanceIds = []*string{&mysqlId} + request.AutoRenew = &newRenewFlag + + 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.UseMysqlClient().ModifyAutoRenewFlag(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 +} + +func (me *MysqlService) IsolateDBInstance(ctx context.Context, mysqlId string) (asyncRequestId string, errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewIsolateDBInstanceRequest() + request.InstanceId = &mysqlId + + 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.UseMysqlClient().IsolateDBInstance(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()) + //The server returns that AsyncRequestId does not exist + //asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) OfflineIsolatedInstances(ctx context.Context, mysqlId string) (errRet error) { + + logId := tccommon.GetLogId(ctx) + request := cdb.NewOfflineIsolatedInstancesRequest() + request.InstanceIds = []*string{&mysqlId} + + 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()) + _, errRet = me.client.UseMysqlClient().OfflineIsolatedInstances(request) + + return +} + +func (me *MysqlService) DescribeMysqlTimeWindowById(ctx context.Context, instanceId string) (timeWindow *cdb.DescribeTimeWindowResponse, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeTimeWindowRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeTimeWindow(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()) + + timeWindow = response + return +} + +func (me *MysqlService) DeleteMysqlTimeWindowById(ctx context.Context, instanceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDeleteTimeWindowRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DeleteTimeWindow(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 +} + +func (me *MysqlService) DescribeMysqlParamTemplateById(ctx context.Context, templateId string) (paramTemplate *cdb.DescribeParamTemplateInfoResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeParamTemplateInfoRequest() + request.TemplateId = helper.StrToInt64Point(templateId) + + 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.UseMysqlClient().DescribeParamTemplateInfo(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()) + + paramTemplate = response.Response + return +} + +func (me *MysqlService) DescribeMysqlParamTemplateInfoById(ctx context.Context, templateId string) (paramTemplateInfo *cdb.ParamTemplateInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeParamTemplatesRequest() + request.TemplateIds = []*int64{helper.StrToInt64Point(templateId)} + + 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.UseMysqlClient().DescribeParamTemplates(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()) + + items := response.Response.Items + if len(items) < 1 { + return + } + paramTemplateInfo = items[0] + return +} + +func (me *MysqlService) DeleteMysqlParamTemplateById(ctx context.Context, templateId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDeleteParamTemplateRequest() + request.TemplateId = helper.StrToInt64Point(templateId) + + 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.UseMysqlClient().DeleteParamTemplate(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 +} + +func (me *MysqlService) DescribeMysqlDeployGroupById(ctx context.Context, deployGroupId string) (deployGroup *cdb.DeployGroupInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeDeployGroupListRequest() + request.DeployGroupId = &deployGroupId + + 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()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + instances := make([]*cdb.DeployGroupInfo, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeDeployGroupList(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + instances = append(instances, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + if len(instances) < 1 { + return + } + deployGroup = instances[0] + return +} + +func (me *MysqlService) DeleteMysqlDeployGroupById(ctx context.Context, deployGroupId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDeleteDeployGroupsRequest() + request.DeployGroupIds = []*string{&deployGroupId} + + 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.UseMysqlClient().DeleteDeployGroups(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 +} + +func (me *MysqlService) DescribeMysqlSecurityGroupsAttachmentById(ctx context.Context, securityGroupId string, instanceId string) (securityGroupsAttachment *cdb.SecurityGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeDBSecurityGroupsRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeDBSecurityGroups(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()) + + if len(response.Response.Groups) < 1 { + return + } + + for _, sg := range response.Response.Groups { + if *sg.SecurityGroupId == securityGroupId { + securityGroupsAttachment = sg + break + } + } + return +} + +func (me *MysqlService) DeleteMysqlSecurityGroupsAttachmentById(ctx context.Context, securityGroupId string, instanceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDisassociateSecurityGroupsRequest() + request.SecurityGroupId = &securityGroupId + request.InstanceIds = []*string{&instanceId} + + 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.UseMysqlClient().DisassociateSecurityGroups(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 +} + +func (me *MysqlService) DescribeMysqlLocalBinlogConfigById(ctx context.Context, instanceId string) (localBinlogConfig *cdb.LocalBinlogConfig, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeLocalBinlogConfigRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeLocalBinlogConfig(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()) + + localBinlogConfig = response.Response.LocalBinlogConfig + return +} + +func (me *MysqlService) DescribeMysqlAuditLogFileById(ctx context.Context, instanceId string, fileName string) (auditLogFile *cdb.AuditLogFile, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeAuditLogFilesRequest() + request.InstanceId = &instanceId + request.FileName = &fileName + + 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.UseMysqlClient().DescribeAuditLogFiles(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()) + + if len(response.Response.Items) < 1 { + return + } + + auditLogFile = response.Response.Items[0] + return +} + +func (me *MysqlService) DeleteMysqlAuditLogFileById(ctx context.Context, instanceId string, fileName string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDeleteAuditLogFileRequest() + request.InstanceId = &instanceId + request.FileName = &fileName + + 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.UseMysqlClient().DeleteAuditLogFile(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 +} + +func (me *MysqlService) MysqlAuditLogFileStateRefreshFunc(instanceId, fileName string, failStates []string) resource.StateRefreshFunc { + return func() (interface{}, string, error) { + ctx := tccommon.ContextNil + + object, err := me.DescribeMysqlAuditLogFileById(ctx, instanceId, fileName) + + if err != nil { + return nil, "", err + } + + return object, helper.PString(object.Status), nil + } +} + +func (me *MysqlService) DescribeMysqlBackupOverviewByFilter(ctx context.Context, param map[string]interface{}) (backupOverview *cdb.DescribeBackupOverviewResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeBackupOverviewRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Product" { + request.Product = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseMysqlClient().DescribeBackupOverview(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()) + if response == nil || response.Response == nil { + return + } + backupOverview = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlBackupSummariesByFilter(ctx context.Context, param map[string]interface{}) (backupSummaries []*cdb.BackupSummaryItem, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeBackupSummariesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Product" { + request.Product = v.(*string) + } + if k == "OrderBy" { + request.OrderBy = v.(*string) + } + if k == "OrderDirection" { + request.OrderDirection = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeBackupSummaries(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + backupSummaries = append(backupSummaries, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlBinLogByFilter(ctx context.Context, param map[string]interface{}) (binLog []*cdb.BinlogInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeBinlogsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeBinlogs(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + binLog = append(binLog, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlBinlogBackupOverviewByFilter(ctx context.Context, param map[string]interface{}) (binlogBackupOverview *cdb.DescribeBinlogBackupOverviewResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeBinlogBackupOverviewRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Product" { + request.Product = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeBinlogBackupOverview(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()) + + if response == nil || response.Response == nil { + return + } + binlogBackupOverview = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlCloneListByFilter(ctx context.Context, param map[string]interface{}) (cloneList []*cdb.CloneItem, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeCloneListRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeCloneList(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + cloneList = append(cloneList, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlDataBackupOverviewByFilter(ctx context.Context, param map[string]interface{}) (dataBackupOverview *cdb.DescribeDataBackupOverviewResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeDataBackupOverviewRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Product" { + request.Product = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeDataBackupOverview(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()) + + if response == nil || response.Response == nil { + return + } + + dataBackupOverview = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlDbFeaturesByFilter(ctx context.Context, param map[string]interface{}) (dbFeatures *cdb.DescribeDBFeaturesResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeDBFeaturesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeDBFeatures(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()) + + if response == nil || response.Response == nil { + return + } + + dbFeatures = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlInstTablesByFilter(ctx context.Context, param map[string]interface{}) (instTables []*string, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeTablesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + if k == "Database" { + request.Database = v.(*string) + } + if k == "TableRegexp" { + request.TableRegexp = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + tables []*string + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeTables(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + tables = append(tables, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + instTables = tables + return +} + +func (me *MysqlService) DescribeMysqlInstanceCharsetByFilter(ctx context.Context, instanceId string) (instanceCharset *cdb.DescribeDBInstanceCharsetResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeDBInstanceCharsetRequest() + ) + + 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()) + } + }() + + request.InstanceId = &instanceId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeDBInstanceCharset(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()) + + if response == nil || response.Response == nil { + return + } + + instanceCharset = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlInstanceInfoById(ctx context.Context, instanceId string) (instanceInfo *cdb.DescribeDBInstanceInfoResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeDBInstanceInfoRequest() + ) + + 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()) + } + }() + + request.InstanceId = &instanceId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeDBInstanceInfo(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()) + + if response == nil || response.Response == nil { + return + } + + instanceInfo = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlInstanceParamRecordByFilter(ctx context.Context, param map[string]interface{}) (instanceParamRecord []*cdb.ParamRecord, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeInstanceParamRecordsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + paramRecord = make([]*cdb.ParamRecord, 0) + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeInstanceParamRecords(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + paramRecord = append(paramRecord, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + instanceParamRecord = paramRecord + + return +} + +func (me *MysqlService) DescribeMysqlInstanceRebootTimeByFilter(ctx context.Context, param map[string]interface{}) (instanceRebootTime []*cdb.InstanceRebootTime, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeDBInstanceRebootTimeRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceIds" { + request.InstanceIds = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeDBInstanceRebootTime(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()) + + if response == nil || response.Response == nil { + return + } + + instanceRebootTime = response.Response.Items + + return +} + +func (me *MysqlService) DescribeMysqlProxyCustomById(ctx context.Context, instanceId string) (proxyCustom *cdb.DescribeProxyCustomConfResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeProxyCustomConfRequest() + ) + + 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()) + } + }() + + request.InstanceId = &instanceId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeProxyCustomConf(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()) + + if response == nil || response.Response == nil { + return + } + + proxyCustom = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlRollbackRangeTimeByFilter(ctx context.Context, param map[string]interface{}) (rollbackRangeTime []*cdb.InstanceRollbackRangeTime, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeRollbackRangeTimeRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceIds" { + request.InstanceIds = v.([]*string) + } + if k == "IsRemoteZone" { + request.IsRemoteZone = v.(*string) + } + if k == "BackupRegion" { + request.BackupRegion = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeRollbackRangeTime(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()) + + if response == nil || response.Response == nil || len(response.Response.Items) < 1 { + return + } + + rollbackRangeTime = response.Response.Items + + return +} + +func (me *MysqlService) DescribeMysqlSlowLogByFilter(ctx context.Context, param map[string]interface{}) (slowLog []*cdb.SlowLogInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeSlowLogsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeSlowLogs(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + slowLog = append(slowLog, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlSlowLogDataByFilter(ctx context.Context, param map[string]interface{}) (slowLogData []*cdb.SlowLogItem, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeSlowLogDataRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + if k == "StartTime" { + request.StartTime = v.(*uint64) + } + if k == "EndTime" { + request.EndTime = v.(*uint64) + } + if k == "UserHosts" { + request.UserHosts = v.([]*string) + } + if k == "UserNames" { + request.UserNames = v.([]*string) + } + if k == "DataBases" { + request.DataBases = v.([]*string) + } + if k == "SortBy" { + request.SortBy = v.(*string) + } + if k == "OrderBy" { + request.OrderBy = v.(*string) + } + if k == "InstType" { + request.InstType = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeSlowLogData(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + slowLogData = append(slowLogData, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlSupportedPrivilegesById(ctx context.Context, instanceId string) (supportedPrivileges *cdb.DescribeSupportedPrivilegesResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeSupportedPrivilegesRequest() + ) + + 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()) + } + }() + + request.InstanceId = &instanceId + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeSupportedPrivileges(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()) + + if response == nil || response.Response == nil { + return + } + + supportedPrivileges = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlSwitchRecordById(ctx context.Context, instanceId string) (switchRecord []*cdb.DBSwitchInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeDBSwitchRecordsRequest() + ) + + 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()) + } + }() + + request.InstanceId = &instanceId + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 200 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeDBSwitchRecords(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + switchRecord = append(switchRecord, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlUploadedFilesByFilter(ctx context.Context, param map[string]interface{}) (uploadedFiles []*cdb.SqlFileInfo, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeUploadedFilesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "Path" { + request.Path = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeUploadedFiles(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + uploadedFiles = append(uploadedFiles, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlUserTaskByFilter(ctx context.Context, param map[string]interface{}) (userTask []*cdb.TaskDetail, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeTasksRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + if k == "AsyncRequestId" { + request.AsyncRequestId = v.(*string) + } + if k == "TaskTypes" { + var taskTypes []*int64 + for _, vv := range v.([]*string) { + task := MYSQL_TASK_TYPES[*vv] + taskTypes = append(taskTypes, &task) + } + + request.TaskTypes = taskTypes + } + if k == "TaskStatus" { + var taskStatus []*int64 + for _, vv := range v.([]*string) { + task := MYSQL_TASK_STATUS[*vv] + taskStatus = append(taskStatus, &task) + } + + request.TaskStatus = taskStatus + } + if k == "StartTimeBegin" { + request.StartTimeBegin = v.(*string) + } + if k == "StartTimeEnd" { + request.StartTimeEnd = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeTasks(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + userTask = append(userTask, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlBackupDownloadRestrictionById(ctx context.Context) (backupDownloadRestriction *cdb.DescribeBackupDownloadRestrictionResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeBackupDownloadRestrictionRequest() + + 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.UseMysqlClient().DescribeBackupDownloadRestriction(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()) + + backupDownloadRestriction = response.Response + return +} + +func (me *MysqlService) DescribeMysqlBackupEncryptionStatusById(ctx context.Context, instanceId string) (backupEncryptionStatus *cdb.DescribeBackupEncryptionStatusResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeBackupEncryptionStatusRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeBackupEncryptionStatus(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()) + + backupEncryptionStatus = response.Response + return +} + +func (me *MysqlService) DescribeMysqlDbImportJobById(ctx context.Context, instanceId, asyncRequestId string) (dbImportJob *cdb.ImportRecord, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeDBImportRecordsRequest() + request.InstanceId = &instanceId + + 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()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeDBImportRecords(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + + for _, v := range response.Response.Items { + if *v.AsyncRequestId == asyncRequestId { + dbImportJob = v + return + } + } + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DeleteMysqlDbImportJobById(ctx context.Context, asyncRequestId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewStopDBImportJobRequest() + request.AsyncRequestId = &asyncRequestId + + 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.UseMysqlClient().StopDBImportJob(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 +} + +func (me *MysqlService) DeleteMysqlIsolateInstanceById(ctx context.Context, instanceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewReleaseIsolatedDBInstancesRequest() + request.InstanceIds = []*string{&instanceId} + + 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.UseMysqlClient().ReleaseIsolatedDBInstances(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 +} + +func (me *MysqlService) DescribeMysqlPasswordComplexityById(ctx context.Context, instanceId string) (passwordComplexity []*cdb.ParameterDetail, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeInstanceParamsRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeInstanceParams(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()) + + if len(response.Response.Items) < 1 { + return + } + + passwordComplexity = response.Response.Items + return +} + +func (me *MysqlService) DescribeMysqlProxyById(ctx context.Context, instanceId, proxyGroupId string) (proxy *cdb.ProxyGroupInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeCdbProxyInfoRequest() + request.InstanceId = &instanceId + if proxyGroupId != "" { + request.ProxyGroupId = &proxyGroupId + } + + 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.UseMysqlClient().DescribeCdbProxyInfo(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()) + + if len(response.Response.ProxyInfos) < 1 { + return + } + + proxy = response.Response.ProxyInfos[0] + return +} + +func (me *MysqlService) ModifyCdbProxyAddressVipAndVPort(ctx context.Context, proxyGroupId, proxyAddressId, vpcId, subnetId, ip string, port uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyCdbProxyAddressVipAndVPortRequest() + request.ProxyGroupId = &proxyGroupId + request.ProxyAddressId = &proxyAddressId + request.UniqVpcId = &vpcId + request.UniqSubnetId = &subnetId + request.Vip = &ip + request.VPort = &port + + 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.UseMysqlClient().ModifyCdbProxyAddressVipAndVPort(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 +} + +func (me *MysqlService) ModifyCdbProxyAddressDesc(ctx context.Context, proxyGroupId, proxyAddressId, desc string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewModifyCdbProxyAddressDescRequest() + request.ProxyGroupId = &proxyGroupId + request.ProxyAddressId = &proxyAddressId + request.Desc = &desc + + 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.UseMysqlClient().ModifyCdbProxyAddressDesc(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 +} + +func (me *MysqlService) UpgradeCDBProxyVersion(ctx context.Context, instanceId, proxyGroupId, oldProxyVersion, proxyVersion, upgradeTime string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewUpgradeCDBProxyVersionRequest() + request.InstanceId = &instanceId + request.ProxyGroupId = &proxyGroupId + request.SrcProxyVersion = &oldProxyVersion + request.DstProxyVersion = &proxyVersion + request.UpgradeTime = &upgradeTime + + 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.UseMysqlClient().UpgradeCDBProxyVersion(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 +} + +func (me *MysqlService) DeleteMysqlProxyById(ctx context.Context, instanceId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewCloseCDBProxyRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().CloseCDBProxy(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 +} + +func (me *MysqlService) DescribeMysqlRemoteBackupConfigById(ctx context.Context, instanceId string) (remoteBackupConfig *cdb.DescribeRemoteBackupConfigResponseParams, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeRemoteBackupConfigRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeRemoteBackupConfig(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()) + + remoteBackupConfig = response.Response + return +} + +func (me *MysqlService) DescribeMysqlRollbackById(ctx context.Context, instanceId, asyncRequestId string) (rollback []*cdb.RollbackInstancesInfo, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeRollbackTaskDetailRequest() + request.InstanceId = &instanceId + request.AsyncRequestId = &asyncRequestId + + 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.UseMysqlClient().DescribeRollbackTaskDetail(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()) + + if len(response.Response.Items) < 1 { + return + } + rollback = response.Response.Items[0].Detail + return +} + +func (me *MysqlService) DeleteMysqlRollbackById(ctx context.Context, instanceId string) (asyncRequestId string, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewStopRollbackRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().StopRollback(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()) + + asyncRequestId = *response.Response.AsyncRequestId + return +} + +func (me *MysqlService) DescribeMysqlRoGroupById(ctx context.Context, instanceId string, roGroupId string) (roGroup *cdb.RoGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeRoGroupsRequest() + request.InstanceId = &instanceId + + 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.UseMysqlClient().DescribeRoGroups(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()) + + if len(response.Response.RoGroups) < 1 { + return + } + + for _, v := range response.Response.RoGroups { + if *v.RoGroupId == roGroupId { + roGroup = v + return + } + } + + return +} + +func (me *MysqlService) DescribeMysqlErrorLogByFilter(ctx context.Context, param map[string]interface{}) (errorLog []*cdb.ErrlogItem, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeErrorLogDataRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + if k == "StartTime" { + request.StartTime = v.(*uint64) + } + if k == "EndTime" { + request.EndTime = v.(*uint64) + } + if k == "KeyWords" { + request.KeyWords = v.([]*string) + } + if k == "InstType" { + request.InstType = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeErrorLogData(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + errorLog = append(errorLog, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *MysqlService) DescribeMysqlProjectSecurityGroupByFilter(ctx context.Context, param map[string]interface{}) (projectSecurityGroup []*cdb.SecurityGroup, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeProjectSecurityGroupsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "ProjectId" { + request.ProjectId = v.(*int64) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeProjectSecurityGroups(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()) + + if len(response.Response.Groups) < 1 { + return + } + projectSecurityGroup = response.Response.Groups + return +} + +func (me *MysqlService) DescribeMysqlRoMinScaleByFilter(ctx context.Context, param map[string]interface{}) (roMinScale *cdb.DescribeRoMinScaleResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeRoMinScaleRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "RoInstanceId" { + request.RoInstanceId = v.(*string) + } + if k == "MasterInstanceId" { + request.MasterInstanceId = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + response, err := me.client.UseMysqlClient().DescribeRoMinScale(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()) + + if response.Response == nil { + return + } + roMinScale = response.Response + + return +} + +func (me *MysqlService) DescribeMysqlDatabasesByFilter(ctx context.Context, param map[string]interface{}) (databases *cdb.DescribeDatabasesResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = cdb.NewDescribeDatabasesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "InstanceId" { + request.InstanceId = v.(*string) + } + if k == "DatabaseRegexp" { + request.DatabaseRegexp = v.(*string) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + items []*string + database = make([]*cdb.DatabasesWithCharacterLists, 0) + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseMysqlClient().DescribeDatabases(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()) + + if response == nil || len(response.Response.Items) < 1 { + break + } + database = append(database, response.Response.DatabaseList...) + items = append(items, response.Response.Items...) + if len(response.Response.Items) < int(limit) { + break + } + + offset += limit + } + + databases = &cdb.DescribeDatabasesResponseParams{ + Items: items, + DatabaseList: database, + } + + return +} + +func (me *MysqlService) DescribeMysqlDatabaseById(ctx context.Context, instanceId string, dBName string) (database *cdb.DatabasesWithCharacterLists, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDescribeDatabasesRequest() + request.InstanceId = &instanceId + request.DatabaseRegexp = &dBName + + 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.UseMysqlClient().DescribeDatabases(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()) + + for _, db := range response.Response.DatabaseList { + if *db.DatabaseName == dBName { + database = db + } + } + return +} + +func (me *MysqlService) DeleteMysqlDatabaseById(ctx context.Context, instanceId string, dBName string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := cdb.NewDeleteDatabaseRequest() + request.InstanceId = &instanceId + request.DBName = &dBName + + 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.UseMysqlClient().DeleteDatabase(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 +} diff --git a/tencentcloud/services/cynosdb/service_tencentcloud_tag.go b/tencentcloud/services/cynosdb/service_tencentcloud_tag.go new file mode 100644 index 0000000000..a16c4e9053 --- /dev/null +++ b/tencentcloud/services/cynosdb/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package cynosdb + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 0602db7f69c01f99094886b155ef42f25cf3a9fd Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 16:22:21 +0800 Subject: [PATCH 27/31] refactor: migrate package tencentcloud/services/apigateway --- tencentcloud/provider.go | 77 ++-- .../data_source_tc_api_gateway_api_app_api.go | 29 +- ..._source_tc_api_gateway_api_app_api_test.go | 10 +- ...a_source_tc_api_gateway_api_app_service.go | 23 +- ...rce_tc_api_gateway_api_app_service_test.go | 10 +- .../data_source_tc_api_gateway_api_apps.go | 23 +- ...ata_source_tc_api_gateway_api_apps_test.go | 8 +- .../data_source_tc_api_gateway_api_docs.go | 23 +- ...ata_source_tc_api_gateway_api_docs_test.go | 8 +- .../data_source_tc_api_gateway_api_keys.go | 22 +- ...ata_source_tc_api_gateway_api_keys_test.go | 8 +- .../data_source_tc_api_gateway_api_plugins.go | 23 +- ..._source_tc_api_gateway_api_plugins_test.go | 10 +- ...a_source_tc_api_gateway_api_usage_plans.go | 23 +- ...rce_tc_api_gateway_api_usage_plans_test.go | 10 +- .../data_source_tc_api_gateway_apis.go | 26 +- .../data_source_tc_api_gateway_apis_test.go | 8 +- ...rce_tc_api_gateway_bind_api_apps_status.go | 23 +- ...c_api_gateway_bind_api_apps_status_test.go | 10 +- ..._source_tc_api_gateway_customer_domains.go | 20 +- ...ce_tc_api_gateway_customer_domains_test.go | 8 +- ...ata_source_tc_api_gateway_ip_strategies.go | 26 +- ...ource_tc_api_gateway_ip_strategies_test.go | 8 +- .../data_source_tc_api_gateway_plugins.go | 22 +- ...data_source_tc_api_gateway_plugins_test.go | 10 +- ...tc_api_gateway_service_environment_list.go | 23 +- ...i_gateway_service_environment_list_test.go | 10 +- ...tc_api_gateway_service_release_versions.go | 23 +- ...i_gateway_service_release_versions_test.go | 10 +- .../data_source_tc_api_gateway_services.go | 34 +- ...ata_source_tc_api_gateway_services_test.go | 8 +- ...a_source_tc_api_gateway_throttling_apis.go | 21 +- ...rce_tc_api_gateway_throttling_apis_test.go | 8 +- ...urce_tc_api_gateway_throttling_services.go | 21 +- ...tc_api_gateway_throttling_services_test.go | 8 +- .../data_source_tc_api_gateway_upstreams.go | 23 +- ...ta_source_tc_api_gateway_upstreams_test.go | 10 +- ..._tc_api_gateway_usage_plan_environments.go | 24 +- ...pi_gateway_usage_plan_environments_test.go | 8 +- .../data_source_tc_api_gateway_usage_plans.go | 22 +- ..._source_tc_api_gateway_usage_plans_test.go | 8 +- .../apigateway}/extension_api_gateway.go | 2 +- .../services/apigateway/extension_tags.go | 3 + .../resource_tc_api_gateway_api.go | 73 +-- .../resource_tc_api_gateway_api_app.go | 71 +-- ...ource_tc_api_gateway_api_app_attachment.go | 45 +- ..._tc_api_gateway_api_app_attachment_test.go | 8 +- .../resource_tc_api_gateway_api_app_test.go | 23 +- .../resource_tc_api_gateway_api_doc.go | 67 +-- .../resource_tc_api_gateway_api_doc_test.go | 22 +- .../resource_tc_api_gateway_api_key.go | 80 ++-- ...ource_tc_api_gateway_api_key_attachment.go | 66 +-- ..._tc_api_gateway_api_key_attachment_test.go | 26 +- .../resource_tc_api_gateway_api_key_test.go | 22 +- .../resource_tc_api_gateway_api_test.go | 22 +- .../resource_tc_api_gateway_custom_domain.go | 57 +-- ...ource_tc_api_gateway_custom_domain_test.go | 26 +- ...resource_tc_api_gateway_import_open_api.go | 47 +- ...rce_tc_api_gateway_import_open_api_test.go | 8 +- .../resource_tc_api_gateway_ip_strategy.go | 76 ++-- ...esource_tc_api_gateway_ip_strategy_test.go | 26 +- .../resource_tc_api_gateway_plugin.go | 51 ++- ...source_tc_api_gateway_plugin_attachment.go | 45 +- ...e_tc_api_gateway_plugin_attachment_test.go | 8 +- .../resource_tc_api_gateway_plugin_test.go | 8 +- .../resource_tc_api_gateway_service.go | 93 ++-- ...resource_tc_api_gateway_service_release.go | 56 +-- ...rce_tc_api_gateway_service_release_test.go | 26 +- .../resource_tc_api_gateway_service_test.go | 22 +- ...urce_tc_api_gateway_strategy_attachment.go | 58 +-- ...tc_api_gateway_strategy_attachment_test.go | 26 +- ...ource_tc_api_gateway_update_api_app_key.go | 27 +- ..._tc_api_gateway_update_api_app_key_test.go | 8 +- .../resource_tc_api_gateway_upstream.go | 69 +-- .../resource_tc_api_gateway_upstream_test.go | 8 +- .../resource_tc_api_gateway_usage_plan.go | 65 +-- ...ce_tc_api_gateway_usage_plan_attachment.go | 70 +-- ..._api_gateway_usage_plan_attachment_test.go | 34 +- ...resource_tc_api_gateway_usage_plan_test.go | 22 +- .../service_tencentcloud_api_gateway.go | 119 ++--- .../apigateway/service_tencentcloud_tag.go | 415 ++++++++++++++++++ 81 files changed, 1678 insertions(+), 1051 deletions(-) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_api_app_api.go (97%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_api_app_api_test.go (77%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_api_app_service.go (95%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_api_app_service_test.go (87%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_api_apps.go (83%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_api_apps_test.go (89%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_api_docs.go (75%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_api_docs_test.go (82%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_api_keys.go (79%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_api_keys_test.go (91%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_api_plugins.go (85%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_api_plugins_test.go (75%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_api_usage_plans.go (91%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_api_usage_plans_test.go (89%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_apis.go (93%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_apis_test.go (96%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_bind_api_apps_status.go (89%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_bind_api_apps_status_test.go (79%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_customer_domains.go (85%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_customer_domains_test.go (89%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_ip_strategies.go (90%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_ip_strategies_test.go (92%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_plugins.go (85%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_plugins_test.go (89%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_service_environment_list.go (80%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_service_environment_list_test.go (72%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_service_release_versions.go (78%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_service_release_versions_test.go (72%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_services.go (86%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_services_test.go (94%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_throttling_apis.go (87%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_throttling_apis_test.go (95%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_throttling_services.go (84%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_throttling_services_test.go (90%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_upstreams.go (86%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_upstreams_test.go (69%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_usage_plan_environments.go (82%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_usage_plan_environments_test.go (91%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_usage_plans.go (83%) rename tencentcloud/{ => services/apigateway}/data_source_tc_api_gateway_usage_plans_test.go (92%) rename tencentcloud/{ => services/apigateway}/extension_api_gateway.go (99%) create mode 100644 tencentcloud/services/apigateway/extension_tags.go rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_api.go (96%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_api_app.go (70%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_api_app_attachment.go (75%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_api_app_attachment_test.go (92%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_api_app_test.go (78%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_api_doc.go (79%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_api_doc_test.go (79%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_api_key.go (70%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_api_key_attachment.go (64%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_api_key_attachment_test.go (77%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_api_key_test.go (87%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_api_test.go (90%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_custom_domain.go (78%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_custom_domain_test.go (80%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_import_open_api.go (95%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_import_open_api_test.go (91%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_ip_strategy.go (64%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_ip_strategy_test.go (78%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_plugin.go (74%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_plugin_attachment.go (74%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_plugin_attachment_test.go (93%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_plugin_test.go (92%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_service.go (82%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_service_release.go (69%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_service_release_test.go (82%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_service_test.go (85%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_strategy_attachment.go (65%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_strategy_attachment_test.go (83%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_update_api_app_key.go (72%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_update_api_app_key_test.go (82%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_upstream.go (92%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_upstream_test.go (96%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_usage_plan.go (77%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_usage_plan_attachment.go (76%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_usage_plan_attachment_test.go (84%) rename tencentcloud/{ => services/apigateway}/resource_tc_api_gateway_usage_plan_test.go (81%) rename tencentcloud/{ => services/apigateway}/service_tencentcloud_api_gateway.go (96%) create mode 100644 tencentcloud/services/apigateway/service_tencentcloud_tag.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index f08871fcb2..60c57f6912 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" "encoding/json" "fmt" "io/ioutil" @@ -551,24 +552,24 @@ func Provider() *schema.Provider { "tencentcloud_sqlserver_slowlogs": dataSourceTencentCloudSqlserverSlowlogs(), "tencentcloud_sqlserver_upload_backup_info": dataSourceTencentCloudSqlserverUploadBackupInfo(), "tencentcloud_sqlserver_upload_incremental_info": dataSourceTencentCloudSqlserverUploadIncrementalInfo(), - "tencentcloud_api_gateway_usage_plans": dataSourceTencentCloudAPIGatewayUsagePlans(), - "tencentcloud_api_gateway_ip_strategies": dataSourceTencentCloudAPIGatewayIpStrategy(), - "tencentcloud_api_gateway_customer_domains": dataSourceTencentCloudAPIGatewayCustomerDomains(), - "tencentcloud_api_gateway_usage_plan_environments": dataSourceTencentCloudAPIGatewayUsagePlanEnvironments(), - "tencentcloud_api_gateway_throttling_services": dataSourceTencentCloudAPIGatewayThrottlingServices(), - "tencentcloud_api_gateway_throttling_apis": dataSourceTencentCloudAPIGatewayThrottlingApis(), - "tencentcloud_api_gateway_apis": dataSourceTencentCloudAPIGatewayAPIs(), - "tencentcloud_api_gateway_services": dataSourceTencentCloudAPIGatewayServices(), - "tencentcloud_api_gateway_api_keys": dataSourceTencentCloudAPIGatewayAPIKeys(), - "tencentcloud_api_gateway_plugins": dataSourceTencentCloudAPIGatewayPlugins(), - "tencentcloud_api_gateway_upstreams": dataSourceTencentCloudAPIGatewayUpstreams(), - "tencentcloud_api_gateway_api_usage_plans": dataSourceTencentCloudAPIGatewayApiUsagePlans(), - "tencentcloud_api_gateway_api_app_service": dataSourceTencentCloudAPIGatewayApiAppService(), - "tencentcloud_api_gateway_bind_api_apps_status": dataSourceTencentCloudApiGatewayBindApiAppsStatus(), - "tencentcloud_api_gateway_api_app_api": dataSourceTencentCloudApiGatewayApiAppApi(), - "tencentcloud_api_gateway_api_plugins": dataSourceTencentCloudApiGatewayApiPlugins(), - "tencentcloud_api_gateway_service_release_versions": dataSourceTencentCloudApiGatewayServiceReleaseVersions(), - "tencentcloud_api_gateway_service_environment_list": dataSourceTencentCloudApiGatewayServiceEnvironmentList(), + "tencentcloud_api_gateway_usage_plans": apigateway.DataSourceTencentCloudAPIGatewayUsagePlans(), + "tencentcloud_api_gateway_ip_strategies": apigateway.DataSourceTencentCloudAPIGatewayIpStrategy(), + "tencentcloud_api_gateway_customer_domains": apigateway.DataSourceTencentCloudAPIGatewayCustomerDomains(), + "tencentcloud_api_gateway_usage_plan_environments": apigateway.DataSourceTencentCloudAPIGatewayUsagePlanEnvironments(), + "tencentcloud_api_gateway_throttling_services": apigateway.DataSourceTencentCloudAPIGatewayThrottlingServices(), + "tencentcloud_api_gateway_throttling_apis": apigateway.DataSourceTencentCloudAPIGatewayThrottlingApis(), + "tencentcloud_api_gateway_apis": apigateway.DataSourceTencentCloudAPIGatewayAPIs(), + "tencentcloud_api_gateway_services": apigateway.DataSourceTencentCloudAPIGatewayServices(), + "tencentcloud_api_gateway_api_keys": apigateway.DataSourceTencentCloudAPIGatewayAPIKeys(), + "tencentcloud_api_gateway_plugins": apigateway.DataSourceTencentCloudAPIGatewayPlugins(), + "tencentcloud_api_gateway_upstreams": apigateway.DataSourceTencentCloudAPIGatewayUpstreams(), + "tencentcloud_api_gateway_api_usage_plans": apigateway.DataSourceTencentCloudAPIGatewayApiUsagePlans(), + "tencentcloud_api_gateway_api_app_service": apigateway.DataSourceTencentCloudAPIGatewayApiAppService(), + "tencentcloud_api_gateway_bind_api_apps_status": apigateway.DataSourceTencentCloudApiGatewayBindApiAppsStatus(), + "tencentcloud_api_gateway_api_app_api": apigateway.DataSourceTencentCloudApiGatewayApiAppApi(), + "tencentcloud_api_gateway_api_plugins": apigateway.DataSourceTencentCloudApiGatewayApiPlugins(), + "tencentcloud_api_gateway_service_release_versions": apigateway.DataSourceTencentCloudApiGatewayServiceReleaseVersions(), + "tencentcloud_api_gateway_service_environment_list": apigateway.DataSourceTencentCloudApiGatewayServiceEnvironmentList(), "tencentcloud_sqlserver_basic_instances": dataSourceTencentCloudSqlserverBasicInstances(), "tencentcloud_sqlserver_query_xevent": dataSourceTencentCloudSqlserverQueryXevent(), "tencentcloud_sqlserver_ins_attribute": dataSourceTencentCloudSqlserverInsAttribute(), @@ -817,8 +818,8 @@ func Provider() *schema.Provider { "tencentcloud_tsf_groups": dataSourceTencentCloudTsfGroups(), "tencentcloud_tsf_ms_api_list": dataSourceTencentCloudTsfMsApiList(), "tencentcloud_lighthouse_bundle": dataSourceTencentCloudLighthouseBundle(), - "tencentcloud_api_gateway_api_docs": dataSourceTencentCloudAPIGatewayAPIDocs(), - "tencentcloud_api_gateway_api_apps": dataSourceTencentCloudAPIGatewayAPIApps(), + "tencentcloud_api_gateway_api_docs": apigateway.DataSourceTencentCloudAPIGatewayAPIDocs(), + "tencentcloud_api_gateway_api_apps": apigateway.DataSourceTencentCloudAPIGatewayAPIApps(), "tencentcloud_tse_access_address": dataSourceTencentCloudTseAccessAddress(), "tencentcloud_tse_nacos_replicas": dataSourceTencentCloudTseNacosReplicas(), "tencentcloud_tse_nacos_server_interfaces": dataSourceTencentCloudTseNacosServerInterfaces(), @@ -1361,20 +1362,20 @@ func Provider() *schema.Provider { "tencentcloud_vod_super_player_config": resourceTencentCloudVodSuperPlayerConfig(), "tencentcloud_vod_sub_application": resourceTencentCloudVodSubApplication(), "tencentcloud_sqlserver_publish_subscribe": resourceTencentCloudSqlserverPublishSubscribe(), - "tencentcloud_api_gateway_usage_plan": resourceTencentCloudAPIGatewayUsagePlan(), - "tencentcloud_api_gateway_usage_plan_attachment": resourceTencentCloudAPIGatewayUsagePlanAttachment(), - "tencentcloud_api_gateway_api": resourceTencentCloudAPIGatewayAPI(), - "tencentcloud_api_gateway_service": resourceTencentCloudAPIGatewayService(), - "tencentcloud_api_gateway_custom_domain": resourceTencentCloudAPIGatewayCustomDomain(), - "tencentcloud_api_gateway_ip_strategy": resourceTencentCloudAPIGatewayIPStrategy(), - "tencentcloud_api_gateway_strategy_attachment": resourceTencentCloudAPIGatewayStrategyAttachment(), - "tencentcloud_api_gateway_api_key": resourceTencentCloudAPIGatewayAPIKey(), - "tencentcloud_api_gateway_api_key_attachment": resourceTencentCloudAPIGatewayAPIKeyAttachment(), - "tencentcloud_api_gateway_service_release": resourceTencentCloudAPIGatewayServiceRelease(), - "tencentcloud_api_gateway_plugin": resourceTencentCloudAPIGatewayPlugin(), - "tencentcloud_api_gateway_plugin_attachment": resourceTencentCloudAPIGatewayPluginAttachment(), - "tencentcloud_api_gateway_upstream": resourceTencentCloudAPIGatewayUpstream(), - "tencentcloud_api_gateway_api_app_attachment": resourceTencentCloudAPIGatewayApiAppAttachment(), + "tencentcloud_api_gateway_usage_plan": apigateway.ResourceTencentCloudAPIGatewayUsagePlan(), + "tencentcloud_api_gateway_usage_plan_attachment": apigateway.ResourceTencentCloudAPIGatewayUsagePlanAttachment(), + "tencentcloud_api_gateway_api": apigateway.ResourceTencentCloudAPIGatewayAPI(), + "tencentcloud_api_gateway_service": apigateway.ResourceTencentCloudAPIGatewayService(), + "tencentcloud_api_gateway_custom_domain": apigateway.ResourceTencentCloudAPIGatewayCustomDomain(), + "tencentcloud_api_gateway_ip_strategy": apigateway.ResourceTencentCloudAPIGatewayIPStrategy(), + "tencentcloud_api_gateway_strategy_attachment": apigateway.ResourceTencentCloudAPIGatewayStrategyAttachment(), + "tencentcloud_api_gateway_api_key": apigateway.ResourceTencentCloudAPIGatewayAPIKey(), + "tencentcloud_api_gateway_api_key_attachment": apigateway.ResourceTencentCloudAPIGatewayAPIKeyAttachment(), + "tencentcloud_api_gateway_service_release": apigateway.ResourceTencentCloudAPIGatewayServiceRelease(), + "tencentcloud_api_gateway_plugin": apigateway.ResourceTencentCloudAPIGatewayPlugin(), + "tencentcloud_api_gateway_plugin_attachment": apigateway.ResourceTencentCloudAPIGatewayPluginAttachment(), + "tencentcloud_api_gateway_upstream": apigateway.ResourceTencentCloudAPIGatewayUpstream(), + "tencentcloud_api_gateway_api_app_attachment": apigateway.ResourceTencentCloudAPIGatewayApiAppAttachment(), "tencentcloud_sqlserver_basic_instance": resourceTencentCloudSqlserverBasicInstance(), "tencentcloud_sqlserver_instance_tde": resourceTencentCloudSqlserverInstanceTDE(), "tencentcloud_sqlserver_database_tde": resourceTencentCloudSqlserverDatabaseTDE(), @@ -1757,10 +1758,10 @@ func Provider() *schema.Provider { "tencentcloud_clickhouse_delete_backup_data": cdwch.ResourceTencentCloudClickhouseDeleteBackupData(), "tencentcloud_clickhouse_account": cdwch.ResourceTencentCloudClickhouseAccount(), "tencentcloud_clickhouse_account_permission": cdwch.ResourceTencentCloudClickhouseAccountPermission(), - "tencentcloud_api_gateway_api_doc": resourceTencentCloudAPIGatewayAPIDoc(), - "tencentcloud_api_gateway_api_app": resourceTencentCloudAPIGatewayAPIApp(), - "tencentcloud_api_gateway_update_api_app_key": resourceTencentCloudApiGatewayUpdateApiAppKey(), - "tencentcloud_api_gateway_import_open_api": resourceTencentCloudApiGatewayImportOpenApi(), + "tencentcloud_api_gateway_api_doc": apigateway.ResourceTencentCloudAPIGatewayAPIDoc(), + "tencentcloud_api_gateway_api_app": apigateway.ResourceTencentCloudAPIGatewayAPIApp(), + "tencentcloud_api_gateway_update_api_app_key": apigateway.ResourceTencentCloudApiGatewayUpdateApiAppKey(), + "tencentcloud_api_gateway_import_open_api": apigateway.ResourceTencentCloudApiGatewayImportOpenApi(), "tencentcloud_tse_instance": resourceTencentCloudTseInstance(), "tencentcloud_tse_cngw_gateway": resourceTencentCloudTseCngwGateway(), "tencentcloud_tse_cngw_group": resourceTencentCloudTseCngwGroup(), diff --git a/tencentcloud/data_source_tc_api_gateway_api_app_api.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_api.go similarity index 97% rename from tencentcloud/data_source_tc_api_gateway_api_app_api.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_api.go index 2789cfe327..390e9908f0 100644 --- a/tencentcloud/data_source_tc_api_gateway_api_app_api.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_api.go @@ -1,16 +1,19 @@ -package tencentcloud +package apigateway import ( "context" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudApiGatewayApiAppApi() *schema.Resource { +func DataSourceTencentCloudApiGatewayApiAppApi() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudApiGatewayApiAppApiRead, Schema: map[string]*schema.Schema{ @@ -92,8 +95,8 @@ func dataSourceTencentCloudApiGatewayApiAppApi() *schema.Resource { Description: "API authentication type. Possible values are SECRET (key pair authentication), NONE (authentication-free), and OAUTH.", }, "api_business_type": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Computed: true, Description: "Type of OAUTH API. Possible values are NORMAL (Business API), OAUTH (Authorization API).", }, "auth_relation_api_id": { @@ -596,13 +599,13 @@ func dataSourceTencentCloudApiGatewayApiAppApi() *schema.Resource { } func dataSourceTencentCloudApiGatewayApiAppApiRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_api_app_api.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_api_app_api.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} apiAppApi *apigateway.ApiInfo service_id string api_id string @@ -625,10 +628,10 @@ func dataSourceTencentCloudApiGatewayApiAppApiRead(d *schema.ResourceData, meta api_region = v.(string) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeApiGatewayApiAppApiByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } apiAppApi = result @@ -1098,10 +1101,10 @@ func dataSourceTencentCloudApiGatewayApiAppApiRead(d *schema.ResourceData, meta _ = d.Set("result", tmpList) } - d.SetId(strings.Join([]string{service_id, api_id, api_region}, FILED_SP)) + d.SetId(strings.Join([]string{service_id, api_id, api_region}, tccommon.FILED_SP)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_api_gateway_api_app_api_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_api_test.go similarity index 77% rename from tencentcloud/data_source_tc_api_gateway_api_app_api_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_api_test.go index 7feeaed957..e4daeffce9 100644 --- a/tencentcloud/data_source_tc_api_gateway_api_app_api_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_api_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudApiGatewayApiAppApiDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccApiGatewayApiAppApiDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_api_app_api.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_api_app_api.example"), resource.TestCheckResourceAttrSet("data.tencentcloud_api_gateway_api_app_api.example", "service_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_api_gateway_api_app_api.example", "api_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_api_gateway_api_app_api.example", "api_region"), diff --git a/tencentcloud/data_source_tc_api_gateway_api_app_service.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_service.go similarity index 95% rename from tencentcloud/data_source_tc_api_gateway_api_app_service.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_service.go index 2a3a28d80d..2c55773be3 100644 --- a/tencentcloud/data_source_tc_api_gateway_api_app_service.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_service.go @@ -1,15 +1,18 @@ -package tencentcloud +package apigateway import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAPIGatewayApiAppService() *schema.Resource { +func DataSourceTencentCloudAPIGatewayApiAppService() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAPIGatewayApiAppServicesRead, Schema: map[string]*schema.Schema{ @@ -278,13 +281,13 @@ func dataSourceTencentCloudAPIGatewayApiAppService() *schema.Resource { } func dataSourceTencentCloudAPIGatewayApiAppServicesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_api_app_services.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_api_app_services.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} apiAppService *apigateway.DescribeServiceForApiAppResponseParams serviceId string ) @@ -299,10 +302,10 @@ func dataSourceTencentCloudAPIGatewayApiAppServicesRead(d *schema.ResourceData, paramMap["ApiRegion"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeAPIGatewayApiAppServiceByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } apiAppService = response @@ -517,7 +520,7 @@ func dataSourceTencentCloudAPIGatewayApiAppServicesRead(d *schema.ResourceData, d.SetId(serviceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_api_gateway_api_app_service_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_service_test.go similarity index 87% rename from tencentcloud/data_source_tc_api_gateway_api_app_service_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_service_test.go index 1ac410530e..1865587baf 100644 --- a/tencentcloud/data_source_tc_api_gateway_api_app_service_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_service_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudAPIGatewayApiAppServiceDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccApigatewayApiAppServicesDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_api_app_service.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_api_app_service.example"), ), }, }, diff --git a/tencentcloud/data_source_tc_api_gateway_api_apps.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_apps.go similarity index 83% rename from tencentcloud/data_source_tc_api_gateway_api_apps.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_api_apps.go index cbe5efd832..a729773479 100644 --- a/tencentcloud/data_source_tc_api_gateway_api_apps.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_apps.go @@ -1,16 +1,19 @@ -package tencentcloud +package apigateway import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAPIGatewayAPIApps() *schema.Resource { +func DataSourceTencentCloudAPIGatewayAPIApps() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAPIGatewayAPIAppsRead, Schema: map[string]*schema.Schema{ @@ -81,13 +84,13 @@ func dataSourceTencentCloudAPIGatewayAPIApps() *schema.Resource { } func dataSourceTencentCloudAPIGatewayAPIAppsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_api_apps.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_api_apps.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} apiAppId, apiAppName string apiApps []*apigateway.ApiAppInfo ) @@ -100,10 +103,10 @@ func dataSourceTencentCloudAPIGatewayAPIAppsRead(d *schema.ResourceData, meta in apiAppName = v.(string) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := apiGatewayService.DescribeApiAppList(ctx, apiAppId, apiAppName) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } apiApps = result return nil @@ -149,7 +152,7 @@ func dataSourceTencentCloudAPIGatewayAPIAppsRead(d *schema.ResourceData, meta in d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), apiAppList); e != nil { + if e := tccommon.WriteToFile(output.(string), apiAppList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_api_gateway_api_apps_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_apps_test.go similarity index 89% rename from tencentcloud/data_source_tc_api_gateway_api_apps_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_api_apps_test.go index 4a76fa579e..dff3fac2b4 100644 --- a/tencentcloud/data_source_tc_api_gateway_api_apps_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_apps_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -12,8 +14,8 @@ var testAPIGatewayAPIAppsResourceName = "data.tencentcloud_api_gateway_api_apps" func TestAccTencentAPIGatewayAPIAppsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayAPIAppDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_api_gateway_api_docs.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_docs.go similarity index 75% rename from tencentcloud/data_source_tc_api_gateway_api_docs.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_api_docs.go index 2080136284..0f332c48e1 100644 --- a/tencentcloud/data_source_tc_api_gateway_api_docs.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_docs.go @@ -1,16 +1,19 @@ -package tencentcloud +package apigateway import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAPIGatewayAPIDocs() *schema.Resource { +func DataSourceTencentCloudAPIGatewayAPIDocs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAPIGatewayAPIDocsRead, Schema: map[string]*schema.Schema{ @@ -49,20 +52,20 @@ func dataSourceTencentCloudAPIGatewayAPIDocs() *schema.Resource { } func dataSourceTencentCloudAPIGatewayAPIDocsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_api_docs.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_api_docs.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} apiDoc []*apigateway.APIDoc ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { results, e := apiGatewayService.DescribeApiDocList(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } apiDoc = results @@ -97,7 +100,7 @@ func dataSourceTencentCloudAPIGatewayAPIDocsRead(d *schema.ResourceData, meta in d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), apiDocList); e != nil { + if e := tccommon.WriteToFile(output.(string), apiDocList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_api_gateway_api_docs_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_docs_test.go similarity index 82% rename from tencentcloud/data_source_tc_api_gateway_api_docs_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_api_docs_test.go index 5e2e22caa3..04c8654f54 100644 --- a/tencentcloud/data_source_tc_api_gateway_api_docs_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_docs_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -12,8 +14,8 @@ var testAPIGatewayAPIDocsResourceName = "data.tencentcloud_api_gateway_api_docs" func TestAccTencentAPIGatewayAPIDocsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayAPIDocDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_api_gateway_api_keys.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_keys.go similarity index 79% rename from tencentcloud/data_source_tc_api_gateway_api_keys.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_api_keys.go index 04061c46c3..3ad2d60872 100644 --- a/tencentcloud/data_source_tc_api_gateway_api_keys.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_keys.go @@ -1,16 +1,18 @@ -package tencentcloud +package apigateway import ( "context" "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" ) -func dataSourceTencentCloudAPIGatewayAPIKeys() *schema.Resource { +func DataSourceTencentCloudAPIGatewayAPIKeys() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAPIGatewayAPIKeysRead, @@ -70,12 +72,12 @@ func dataSourceTencentCloudAPIGatewayAPIKeys() *schema.Resource { } func dataSourceTencentCloudAPIGatewayAPIKeysRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_api_keys.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_api_keys.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} apiKeySet []*apigateway.ApiKey secretName, accessKeyId string err error @@ -88,10 +90,10 @@ func dataSourceTencentCloudAPIGatewayAPIKeysRead(d *schema.ResourceData, meta in accessKeyId = v.(string) } - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { apiKeySet, err = apiGatewayService.DescribeApiKeysStatus(ctx, secretName, accessKeyId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -114,10 +116,10 @@ func dataSourceTencentCloudAPIGatewayAPIKeysRead(d *schema.ResourceData, meta in return err } - d.SetId(strings.Join([]string{secretName, accessKeyId}, FILED_SP)) + d.SetId(strings.Join([]string{secretName, accessKeyId}, tccommon.FILED_SP)) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil } diff --git a/tencentcloud/data_source_tc_api_gateway_api_keys_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_keys_test.go similarity index 91% rename from tencentcloud/data_source_tc_api_gateway_api_keys_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_api_keys_test.go index a655768dd6..947c4051ff 100644 --- a/tencentcloud/data_source_tc_api_gateway_api_keys_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_keys_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,8 +13,8 @@ var testAPIGatewayAPIKeysDataSourceName = "data.tencentcloud_api_gateway_api_key func TestAccTencentAPIGatewayAPIKeysDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayAPIKeyDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_api_gateway_api_plugins.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_plugins.go similarity index 85% rename from tencentcloud/data_source_tc_api_gateway_api_plugins.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_api_plugins.go index 40e8c34875..89899e9707 100644 --- a/tencentcloud/data_source_tc_api_gateway_api_plugins.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_plugins.go @@ -1,15 +1,18 @@ -package tencentcloud +package apigateway import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudApiGatewayApiPlugins() *schema.Resource { +func DataSourceTencentCloudApiGatewayApiPlugins() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudApiGatewayApiPluginsRead, Schema: map[string]*schema.Schema{ @@ -82,13 +85,13 @@ func dataSourceTencentCloudApiGatewayApiPlugins() *schema.Resource { } func dataSourceTencentCloudApiGatewayApiPluginsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_api_plugins.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_api_plugins.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} apiPlugins []*apigateway.AttachedPluginInfo ) @@ -105,10 +108,10 @@ func dataSourceTencentCloudApiGatewayApiPluginsRead(d *schema.ResourceData, meta paramMap["EnvironmentName"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeApiGatewayApiPluginsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } apiPlugins = result @@ -163,7 +166,7 @@ func dataSourceTencentCloudApiGatewayApiPluginsRead(d *schema.ResourceData, meta d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_api_gateway_api_plugins_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_plugins_test.go similarity index 75% rename from tencentcloud/data_source_tc_api_gateway_api_plugins_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_api_plugins_test.go index 738287cf32..5c31641f3b 100644 --- a/tencentcloud/data_source_tc_api_gateway_api_plugins_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_plugins_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudApiGatewayApiPluginsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccApiGatewayApiPluginsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_api_plugins.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_api_plugins.example"), resource.TestCheckResourceAttrSet("data.tencentcloud_api_gateway_api_plugins.example", "api_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_api_gateway_api_plugins.example", "service_id"), ), diff --git a/tencentcloud/data_source_tc_api_gateway_api_usage_plans.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_usage_plans.go similarity index 91% rename from tencentcloud/data_source_tc_api_gateway_api_usage_plans.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_api_usage_plans.go index 5707cda28b..76dbda9fa9 100644 --- a/tencentcloud/data_source_tc_api_gateway_api_usage_plans.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_usage_plans.go @@ -1,15 +1,18 @@ -package tencentcloud +package apigateway import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAPIGatewayApiUsagePlans() *schema.Resource { +func DataSourceTencentCloudAPIGatewayApiUsagePlans() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAPIGatewayApiUsagePlanRead, Schema: map[string]*schema.Schema{ @@ -112,13 +115,13 @@ func dataSourceTencentCloudAPIGatewayApiUsagePlans() *schema.Resource { } func dataSourceTencentCloudAPIGatewayApiUsagePlanRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_api_usage_plans.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_api_usage_plans.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} result []*apigateway.ApiUsagePlan ) @@ -127,10 +130,10 @@ func dataSourceTencentCloudAPIGatewayApiUsagePlanRead(d *schema.ResourceData, me paramMap["ServiceId"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeAPIGatewayApiUsagePlanByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response @@ -217,7 +220,7 @@ func dataSourceTencentCloudAPIGatewayApiUsagePlanRead(d *schema.ResourceData, me d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_api_gateway_api_usage_plans_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_usage_plans_test.go similarity index 89% rename from tencentcloud/data_source_tc_api_gateway_api_usage_plans_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_api_usage_plans_test.go index 892d27ad7c..ec4619cdc6 100644 --- a/tencentcloud/data_source_tc_api_gateway_api_usage_plans_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_usage_plans_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudApigatewayApiUsagePlansDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccApigatewayApiUsagePlanDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_usage_plan_attachment.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_usage_plan_attachment.example"), ), }, }, diff --git a/tencentcloud/data_source_tc_api_gateway_apis.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_apis.go similarity index 93% rename from tencentcloud/data_source_tc_api_gateway_apis.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_apis.go index ebfafd20f4..e1357fe87a 100644 --- a/tencentcloud/data_source_tc_api_gateway_apis.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_apis.go @@ -1,16 +1,18 @@ -package tencentcloud +package apigateway import ( "context" "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" ) -func dataSourceTencentCloudAPIGatewayAPIs() *schema.Resource { +func DataSourceTencentCloudAPIGatewayAPIs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAPIGatewayAPIsRead, @@ -244,12 +246,12 @@ func dataSourceTencentCloudAPIGatewayAPIs() *schema.Resource { } func dataSourceTencentCloudAPIGatewayAPIsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_apis.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_apis.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} apiName = d.Get("api_name").(string) apiId = d.Get("api_id").(string) serviceId = d.Get("service_id").(string) @@ -257,10 +259,10 @@ func dataSourceTencentCloudAPIGatewayAPIsRead(d *schema.ResourceData, meta inter err error ) - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { apiSet, err = apiGatewayService.DescribeApisStatus(ctx, serviceId, apiName, apiId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -274,10 +276,10 @@ func dataSourceTencentCloudAPIGatewayAPIsRead(d *schema.ResourceData, meta inter has bool item = make(map[string]interface{}) ) - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, err = apiGatewayService.DescribeApi(ctx, *apiKey.ServiceId, *apiKey.ApiId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -364,10 +366,10 @@ func dataSourceTencentCloudAPIGatewayAPIsRead(d *schema.ResourceData, meta inter return err } - d.SetId(strings.Join([]string{apiName, apiId}, FILED_SP)) + d.SetId(strings.Join([]string{apiName, apiId}, tccommon.FILED_SP)) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil } diff --git a/tencentcloud/data_source_tc_api_gateway_apis_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_apis_test.go similarity index 96% rename from tencentcloud/data_source_tc_api_gateway_apis_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_apis_test.go index 3abda84161..6a8e0b963e 100644 --- a/tencentcloud/data_source_tc_api_gateway_apis_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_apis_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,8 +13,8 @@ var testAPIGatewayAPIsDataSourceName = "data.tencentcloud_api_gateway_apis" func TestAccTencentAPIGatewayAPIsDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayAPIDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_api_gateway_bind_api_apps_status.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_bind_api_apps_status.go similarity index 89% rename from tencentcloud/data_source_tc_api_gateway_bind_api_apps_status.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_bind_api_apps_status.go index 746ab8189f..7ac542a369 100644 --- a/tencentcloud/data_source_tc_api_gateway_bind_api_apps_status.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_bind_api_apps_status.go @@ -1,15 +1,18 @@ -package tencentcloud +package apigateway import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apiGateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudApiGatewayBindApiAppsStatus() *schema.Resource { +func DataSourceTencentCloudApiGatewayBindApiAppsStatus() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudApiGatewayBindApiAppsStatusRead, Schema: map[string]*schema.Schema{ @@ -112,13 +115,13 @@ func dataSourceTencentCloudApiGatewayBindApiAppsStatus() *schema.Resource { } func dataSourceTencentCloudApiGatewayBindApiAppsStatusRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_bind_api_apps_status.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_bind_api_apps_status.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} bindApiAppsStatus []*apiGateway.ApiAppApiInfo ) @@ -155,10 +158,10 @@ func dataSourceTencentCloudApiGatewayBindApiAppsStatusRead(d *schema.ResourceDat paramMap["Filters"] = tmpSet } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeApiGatewayBindApiAppsStatusByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } bindApiAppsStatus = result @@ -221,7 +224,7 @@ func dataSourceTencentCloudApiGatewayBindApiAppsStatusRead(d *schema.ResourceDat d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_api_gateway_bind_api_apps_status_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_bind_api_apps_status_test.go similarity index 79% rename from tencentcloud/data_source_tc_api_gateway_bind_api_apps_status_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_bind_api_apps_status_test.go index f71a6851b6..463218f96b 100644 --- a/tencentcloud/data_source_tc_api_gateway_bind_api_apps_status_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_bind_api_apps_status_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudApiGatewayBindApiAppsStatusDataSource_basic(t *testing.T t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccApiGatewayBindApiAppsStatusDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_bind_api_apps_status.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_bind_api_apps_status.example"), resource.TestCheckResourceAttrSet("data.tencentcloud_api_gateway_bind_api_apps_status.example", "service_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_api_gateway_bind_api_apps_status.example", "api_ids.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_api_gateway_bind_api_apps_status.example", "filters.#"), diff --git a/tencentcloud/data_source_tc_api_gateway_customer_domains.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_customer_domains.go similarity index 85% rename from tencentcloud/data_source_tc_api_gateway_customer_domains.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_customer_domains.go index 955a541350..9ba454fc22 100644 --- a/tencentcloud/data_source_tc_api_gateway_customer_domains.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_customer_domains.go @@ -1,15 +1,17 @@ -package tencentcloud +package apigateway import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" ) -func dataSourceTencentCloudAPIGatewayCustomerDomains() *schema.Resource { +func DataSourceTencentCloudAPIGatewayCustomerDomains() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAPIGatewayCustomerDomainRead, @@ -88,21 +90,21 @@ func dataSourceTencentCloudAPIGatewayCustomerDomains() *schema.Resource { } func dataSourceTencentCloudAPIGatewayCustomerDomainRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_customer_domains.read") + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_customer_domains.read") var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} serviceId = d.Get("service_id").(string) infos []*apigateway.DomainSetList list []map[string]interface{} err error ) - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { infos, err = apiGatewayService.DescribeServiceSubDomains(ctx, serviceId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -150,7 +152,7 @@ func dataSourceTencentCloudAPIGatewayCustomerDomainRead(d *schema.ResourceData, d.SetId(serviceId) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil } diff --git a/tencentcloud/data_source_tc_api_gateway_customer_domains_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_customer_domains_test.go similarity index 89% rename from tencentcloud/data_source_tc_api_gateway_customer_domains_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_customer_domains_test.go index 7df4ff445a..ddcac138e1 100644 --- a/tencentcloud/data_source_tc_api_gateway_customer_domains_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_customer_domains_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -12,8 +14,8 @@ var testAPIGatewayDomainSourceName = "data.tencentcloud_api_gateway_customer_dom func TestAccTencentAPIGatewayCustomerDomain_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCustomDomainDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_api_gateway_ip_strategies.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_ip_strategies.go similarity index 90% rename from tencentcloud/data_source_tc_api_gateway_ip_strategies.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_ip_strategies.go index 32314958c3..83158fa75b 100644 --- a/tencentcloud/data_source_tc_api_gateway_ip_strategies.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_ip_strategies.go @@ -1,16 +1,18 @@ -package tencentcloud +package apigateway import ( "context" "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" ) -func dataSourceTencentCloudAPIGatewayIpStrategy() *schema.Resource { +func DataSourceTencentCloudAPIGatewayIpStrategy() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAPIGatewayIpStrategyRead, @@ -186,12 +188,12 @@ func dataSourceTencentCloudAPIGatewayIpStrategy() *schema.Resource { } func dataSourceTencentCloudAPIGatewayIpStrategyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_ip_strategy.read") + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_ip_strategy.read") var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} serviceId = d.Get("service_id").(string) infos []*apigateway.IPStrategy list []map[string]interface{} @@ -202,10 +204,10 @@ func dataSourceTencentCloudAPIGatewayIpStrategyRead(d *schema.ResourceData, meta strategyName = v.(string) } - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { infos, err = apiGatewayService.DescribeIPStrategysStatus(ctx, serviceId, strategyName) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -217,10 +219,10 @@ func dataSourceTencentCloudAPIGatewayIpStrategyRead(d *schema.ResourceData, meta for _, env := range API_GATEWAY_SERVICE_ENVS { var strategy *apigateway.IPStrategy - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { strategy, err = apiGatewayService.DescribeIPStrategies(ctx, serviceId, *info.StrategyId, env) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -271,10 +273,10 @@ func dataSourceTencentCloudAPIGatewayIpStrategyRead(d *schema.ResourceData, meta return err } - d.SetId(strings.Join([]string{serviceId, strategyName}, FILED_SP)) + d.SetId(strings.Join([]string{serviceId, strategyName}, tccommon.FILED_SP)) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil } diff --git a/tencentcloud/data_source_tc_api_gateway_ip_strategies_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_ip_strategies_test.go similarity index 92% rename from tencentcloud/data_source_tc_api_gateway_ip_strategies_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_ip_strategies_test.go index 5a5ae971cf..3bb0739699 100644 --- a/tencentcloud/data_source_tc_api_gateway_ip_strategies_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_ip_strategies_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -14,8 +16,8 @@ var ( func TestAccTencentAPIGatewayIpStrategyDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testApiIPStrategyDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_api_gateway_plugins.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_plugins.go similarity index 85% rename from tencentcloud/data_source_tc_api_gateway_plugins.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_plugins.go index 0bf4e4d62f..5243cc74cf 100644 --- a/tencentcloud/data_source_tc_api_gateway_plugins.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_plugins.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -10,7 +12,7 @@ import ( apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" ) -func dataSourceTencentCloudAPIGatewayPlugins() *schema.Resource { +func DataSourceTencentCloudAPIGatewayPlugins() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAPIGatewayPluginRead, Schema: map[string]*schema.Schema{ @@ -83,13 +85,13 @@ func dataSourceTencentCloudAPIGatewayPlugins() *schema.Resource { } func dataSourceTencentCloudAPIGatewayPluginRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_plugins.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_plugins.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} infos []*apigateway.AvailableApiInfo ) @@ -106,10 +108,10 @@ func dataSourceTencentCloudAPIGatewayPluginRead(d *schema.ResourceData, meta int paramMap["EnvironmentName"] = helper.String(v.(string)) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeAPIGatewayPluginByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } infos = result @@ -163,7 +165,7 @@ func dataSourceTencentCloudAPIGatewayPluginRead(d *schema.ResourceData, meta int d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_api_gateway_plugins_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_plugins_test.go similarity index 89% rename from tencentcloud/data_source_tc_api_gateway_plugins_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_plugins_test.go index bebe20ac22..847d742509 100644 --- a/tencentcloud/data_source_tc_api_gateway_plugins_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_plugins_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudApigatewayPluginsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccApigatewayPluginDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_plugins.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_plugins.example"), ), }, }, diff --git a/tencentcloud/data_source_tc_api_gateway_service_environment_list.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_service_environment_list.go similarity index 80% rename from tencentcloud/data_source_tc_api_gateway_service_environment_list.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_service_environment_list.go index 6d4cbcfd3d..199de3840f 100644 --- a/tencentcloud/data_source_tc_api_gateway_service_environment_list.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_service_environment_list.go @@ -1,15 +1,18 @@ -package tencentcloud +package apigateway import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudApiGatewayServiceEnvironmentList() *schema.Resource { +func DataSourceTencentCloudApiGatewayServiceEnvironmentList() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudApiGatewayServiceEnvironmentListRead, Schema: map[string]*schema.Schema{ @@ -57,13 +60,13 @@ func dataSourceTencentCloudApiGatewayServiceEnvironmentList() *schema.Resource { } func dataSourceTencentCloudApiGatewayServiceEnvironmentListRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_service_environment_list.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_service_environment_list.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} environmentList []*apigateway.Environment serviceId string ) @@ -74,10 +77,10 @@ func dataSourceTencentCloudApiGatewayServiceEnvironmentListRead(d *schema.Resour serviceId = v.(string) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeApiGatewayServiceEnvironmentListByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } environmentList = result @@ -118,7 +121,7 @@ func dataSourceTencentCloudApiGatewayServiceEnvironmentListRead(d *schema.Resour d.SetId(serviceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_api_gateway_service_environment_list_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_service_environment_list_test.go similarity index 72% rename from tencentcloud/data_source_tc_api_gateway_service_environment_list_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_service_environment_list_test.go index a38ba71605..14a0ae797a 100644 --- a/tencentcloud/data_source_tc_api_gateway_service_environment_list_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_service_environment_list_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudApiGatewayServiceEnvironmentListDataSource_basic(t *test t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccApiGatewayServiceEnvironmentListDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_service_environment_list.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_service_environment_list.example"), resource.TestCheckResourceAttrSet("data.tencentcloud_api_gateway_service_environment_list.example", "service_id"), ), }, diff --git a/tencentcloud/data_source_tc_api_gateway_service_release_versions.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_service_release_versions.go similarity index 78% rename from tencentcloud/data_source_tc_api_gateway_service_release_versions.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_service_release_versions.go index aa9947b2f7..1312b6e213 100644 --- a/tencentcloud/data_source_tc_api_gateway_service_release_versions.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_service_release_versions.go @@ -1,15 +1,18 @@ -package tencentcloud +package apigateway import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudApiGatewayServiceReleaseVersions() *schema.Resource { +func DataSourceTencentCloudApiGatewayServiceReleaseVersions() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudApiGatewayServiceReleaseVersionsRead, Schema: map[string]*schema.Schema{ @@ -47,13 +50,13 @@ func dataSourceTencentCloudApiGatewayServiceReleaseVersions() *schema.Resource { } func dataSourceTencentCloudApiGatewayServiceReleaseVersionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_service_release_versions.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_service_release_versions.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} versionList []*apigateway.DescribeServiceReleaseVersionResultVersionListInfo serviceId string ) @@ -64,10 +67,10 @@ func dataSourceTencentCloudApiGatewayServiceReleaseVersionsRead(d *schema.Resour serviceId = v.(string) } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeApiGatewayServiceReleaseVersionsByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } versionList = result @@ -99,7 +102,7 @@ func dataSourceTencentCloudApiGatewayServiceReleaseVersionsRead(d *schema.Resour d.SetId(serviceId) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_api_gateway_service_release_versions_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_service_release_versions_test.go similarity index 72% rename from tencentcloud/data_source_tc_api_gateway_service_release_versions_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_service_release_versions_test.go index 6c609f165d..8d656abf2b 100644 --- a/tencentcloud/data_source_tc_api_gateway_service_release_versions_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_service_release_versions_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudApiGatewayServiceReleaseVersionsDataSource_basic(t *test t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccApiGatewayServiceReleaseVersionsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_service_release_versions.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_service_release_versions.example"), resource.TestCheckResourceAttrSet("data.tencentcloud_api_gateway_service_release_versions.example", "service_id"), ), }, diff --git a/tencentcloud/data_source_tc_api_gateway_services.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_services.go similarity index 86% rename from tencentcloud/data_source_tc_api_gateway_services.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_services.go index ce5392bac7..0d7df9ba51 100644 --- a/tencentcloud/data_source_tc_api_gateway_services.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_services.go @@ -1,16 +1,18 @@ -package tencentcloud +package apigateway import ( "context" "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" ) -func dataSourceTencentCloudAPIGatewayServices() *schema.Resource { +func DataSourceTencentCloudAPIGatewayServices() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAPIGatewayServicesRead, @@ -143,12 +145,12 @@ func dataSourceTencentCloudAPIGatewayServices() *schema.Resource { } func dataSourceTencentCloudAPIGatewayServicesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_services.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_services.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} services []*apigateway.Service serviceName, serviceId string has bool @@ -162,10 +164,10 @@ func dataSourceTencentCloudAPIGatewayServicesRead(d *schema.ResourceData, meta i serviceId = v.(string) } - if outErr := resource.Retry(readRetryTimeout, func() *resource.RetryError { + if outErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { services, err = apiGatewayService.DescribeServicesStatus(ctx, serviceId, serviceName) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); outErr != nil { @@ -176,10 +178,10 @@ func dataSourceTencentCloudAPIGatewayServicesRead(d *schema.ResourceData, meta i for _, service := range services { var info apigateway.DescribeServiceResponse - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, err = apiGatewayService.DescribeService(ctx, *service.ServiceId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -195,10 +197,10 @@ func dataSourceTencentCloudAPIGatewayServicesRead(d *schema.ResourceData, meta i var hasContains = make(map[string]bool, len(info.Response.ApiIdStatusSet)) //from service - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { plans, err = apiGatewayService.DescribeServiceUsagePlan(ctx, *service.ServiceId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -220,10 +222,10 @@ func dataSourceTencentCloudAPIGatewayServicesRead(d *schema.ResourceData, meta i } //from api - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { plans, err = apiGatewayService.DescribeApiUsagePlan(ctx, *service.ServiceId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -262,10 +264,10 @@ func dataSourceTencentCloudAPIGatewayServicesRead(d *schema.ResourceData, meta i return err } - d.SetId(strings.Join([]string{serviceName, serviceId}, FILED_SP)) + d.SetId(strings.Join([]string{serviceName, serviceId}, tccommon.FILED_SP)) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil } diff --git a/tencentcloud/data_source_tc_api_gateway_services_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_services_test.go similarity index 94% rename from tencentcloud/data_source_tc_api_gateway_services_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_services_test.go index f1b1937029..64117215bf 100644 --- a/tencentcloud/data_source_tc_api_gateway_services_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_services_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,8 +13,8 @@ var testAPIGatewayServicesDataSourceName = "data.tencentcloud_api_gateway_servic func TestAccTencentAPIGatewayServicesDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayServiceDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_api_gateway_throttling_apis.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_throttling_apis.go similarity index 87% rename from tencentcloud/data_source_tc_api_gateway_throttling_apis.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_throttling_apis.go index f2d4731c63..e1ec7f622c 100644 --- a/tencentcloud/data_source_tc_api_gateway_throttling_apis.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_throttling_apis.go @@ -1,16 +1,19 @@ -package tencentcloud +package apigateway import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAPIGatewayThrottlingApis() *schema.Resource { +func DataSourceTencentCloudAPIGatewayThrottlingApis() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAPIGatewayThrottlingApisRead, @@ -99,12 +102,12 @@ func dataSourceTencentCloudAPIGatewayThrottlingApis() *schema.Resource { } func dataSourceTencentCloudAPIGatewayThrottlingApisRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_throttling_apis.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_throttling_apis.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} infos []*apigateway.Service serviceID string environmentNames []string @@ -121,10 +124,10 @@ func dataSourceTencentCloudAPIGatewayThrottlingApisRead(d *schema.ResourceData, } if serviceID == "" { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { infos, err = apiGatewayService.DescribeServicesStatus(ctx, "", "") if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -186,7 +189,7 @@ func dataSourceTencentCloudAPIGatewayThrottlingApisRead(d *schema.ResourceData, output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), resultLists); err != nil { + if err := tccommon.WriteToFile(output.(string), resultLists); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_api_gateway_throttling_apis_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_throttling_apis_test.go similarity index 95% rename from tencentcloud/data_source_tc_api_gateway_throttling_apis_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_throttling_apis_test.go index ff268277d8..04ef55ac1a 100644 --- a/tencentcloud/data_source_tc_api_gateway_throttling_apis_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_throttling_apis_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,8 +13,8 @@ var testAPIGatewaythrottlingApiDataSourceName = "data.tencentcloud_api_gateway_t func TestAccTencentAPIGatewayThrottlingApisDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayAPIDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_api_gateway_throttling_services.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_throttling_services.go similarity index 84% rename from tencentcloud/data_source_tc_api_gateway_throttling_services.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_throttling_services.go index 7858e7ce85..b671d12730 100644 --- a/tencentcloud/data_source_tc_api_gateway_throttling_services.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_throttling_services.go @@ -1,16 +1,19 @@ -package tencentcloud +package apigateway import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAPIGatewayThrottlingServices() *schema.Resource { +func DataSourceTencentCloudAPIGatewayThrottlingServices() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAPIGatewayThrottlingServicesRead, @@ -79,12 +82,12 @@ func dataSourceTencentCloudAPIGatewayThrottlingServices() *schema.Resource { } func dataSourceTencentCloudAPIGatewayThrottlingServicesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_throttling_services.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_throttling_services.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} infos []*apigateway.Service serviceID string err error @@ -97,10 +100,10 @@ func dataSourceTencentCloudAPIGatewayThrottlingServicesRead(d *schema.ResourceDa } if serviceID == "" { - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { infos, err = apiGatewayService.DescribeServicesStatus(ctx, "", "") if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -154,7 +157,7 @@ func dataSourceTencentCloudAPIGatewayThrottlingServicesRead(d *schema.ResourceDa output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), resultLists); err != nil { + if err := tccommon.WriteToFile(output.(string), resultLists); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_api_gateway_throttling_services_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_throttling_services_test.go similarity index 90% rename from tencentcloud/data_source_tc_api_gateway_throttling_services_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_throttling_services_test.go index d4925f0665..152a832a1e 100644 --- a/tencentcloud/data_source_tc_api_gateway_throttling_services_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_throttling_services_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,8 +13,8 @@ var testAPIGatewaythrottlingServiceDataSourceName = "data.tencentcloud_api_gatew func TestAccTencentAPIGatewayThrottlingServicesDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayServiceDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_api_gateway_upstreams.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_upstreams.go similarity index 86% rename from tencentcloud/data_source_tc_api_gateway_upstreams.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_upstreams.go index 963f2cf1dd..e147fa9945 100644 --- a/tencentcloud/data_source_tc_api_gateway_upstreams.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_upstreams.go @@ -1,15 +1,18 @@ -package tencentcloud +package apigateway import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAPIGatewayUpstreams() *schema.Resource { +func DataSourceTencentCloudAPIGatewayUpstreams() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAPIGatewayUpstreamRead, Schema: map[string]*schema.Schema{ @@ -82,13 +85,13 @@ func dataSourceTencentCloudAPIGatewayUpstreams() *schema.Resource { } func dataSourceTencentCloudAPIGatewayUpstreamRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_upstreams.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_upstreams.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} result []*apigateway.BindApiInfo ) @@ -117,10 +120,10 @@ func dataSourceTencentCloudAPIGatewayUpstreamRead(d *schema.ResourceData, meta i paramMap["filters"] = tmpSet } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { response, e := service.DescribeAPIGatewayUpstreamByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } result = response @@ -167,7 +170,7 @@ func dataSourceTencentCloudAPIGatewayUpstreamRead(d *schema.ResourceData, meta i d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), d); e != nil { + if e := tccommon.WriteToFile(output.(string), d); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_api_gateway_upstreams_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_upstreams_test.go similarity index 69% rename from tencentcloud/data_source_tc_api_gateway_upstreams_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_upstreams_test.go index 254c09cd66..3924697386 100644 --- a/tencentcloud/data_source_tc_api_gateway_upstreams_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_upstreams_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,14 +13,14 @@ func TestAccTencentCloudNeedFixApigatewayUpstreamsDataSource_basic(t *testing.T) t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccApigatewayUpstreamDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_upstreams.example"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_api_gateway_upstreams.example"), ), }, }, diff --git a/tencentcloud/data_source_tc_api_gateway_usage_plan_environments.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_usage_plan_environments.go similarity index 82% rename from tencentcloud/data_source_tc_api_gateway_usage_plan_environments.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_usage_plan_environments.go index 7eeb07516f..4590667365 100644 --- a/tencentcloud/data_source_tc_api_gateway_usage_plan_environments.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_usage_plan_environments.go @@ -1,16 +1,18 @@ -package tencentcloud +package apigateway import ( "context" "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" ) -func dataSourceTencentCloudAPIGatewayUsagePlanEnvironments() *schema.Resource { +func DataSourceTencentCloudAPIGatewayUsagePlanEnvironments() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudUsagePlanEnvironmentRead, @@ -24,7 +26,7 @@ func dataSourceTencentCloudAPIGatewayUsagePlanEnvironments() *schema.Resource { Type: schema.TypeString, Optional: true, Default: API_GATEWAY_TYPE_SERVICE, - ValidateFunc: validateAllowedStringValue(API_GATEWAY_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_TYPES), Description: "Binding type. Valid values: `API`, `SERVICE`. Default value: `SERVICE`.", }, "result_output_file": { @@ -92,12 +94,12 @@ func dataSourceTencentCloudAPIGatewayUsagePlanEnvironments() *schema.Resource { } func dataSourceTencentCloudUsagePlanEnvironmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_usage_plans.read") + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_usage_plans.read") var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} usagePlanId = d.Get("usage_plan_id").(string) bindType = d.Get("bind_type").(string) infos []*apigateway.UsagePlanEnvironment @@ -105,10 +107,10 @@ func dataSourceTencentCloudUsagePlanEnvironmentRead(d *schema.ResourceData, meta err error ) - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { infos, err = apiGatewayService.DescribeUsagePlanEnvironments(ctx, usagePlanId, bindType) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -134,10 +136,10 @@ func dataSourceTencentCloudUsagePlanEnvironmentRead(d *schema.ResourceData, meta return err } - d.SetId(strings.Join([]string{usagePlanId, bindType}, FILED_SP)) + d.SetId(strings.Join([]string{usagePlanId, bindType}, tccommon.FILED_SP)) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil } diff --git a/tencentcloud/data_source_tc_api_gateway_usage_plan_environments_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_usage_plan_environments_test.go similarity index 91% rename from tencentcloud/data_source_tc_api_gateway_usage_plan_environments_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_usage_plan_environments_test.go index bb81b3df10..db785d2754 100644 --- a/tencentcloud/data_source_tc_api_gateway_usage_plan_environments_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_usage_plan_environments_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -14,8 +16,8 @@ var ( func TestAccTencentAPIGatewayUsagePlanEnvironmentsDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayUsagePlanAttachmentDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/data_source_tc_api_gateway_usage_plans.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_usage_plans.go similarity index 83% rename from tencentcloud/data_source_tc_api_gateway_usage_plans.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_usage_plans.go index b29b78e164..13530dfb44 100644 --- a/tencentcloud/data_source_tc_api_gateway_usage_plans.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_usage_plans.go @@ -1,16 +1,18 @@ -package tencentcloud +package apigateway import ( "context" "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" ) -func dataSourceTencentCloudAPIGatewayUsagePlans() *schema.Resource { +func DataSourceTencentCloudAPIGatewayUsagePlans() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAPIGatewayUsagePlansRead, @@ -80,12 +82,12 @@ func dataSourceTencentCloudAPIGatewayUsagePlans() *schema.Resource { } func dataSourceTencentCloudAPIGatewayUsagePlansRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_api_gateway_usage_plans.read") + defer tccommon.LogElapsed("data_source.tencentcloud_api_gateway_usage_plans.read") var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} infos []*apigateway.UsagePlanStatusInfo list []map[string]interface{} usagePlanId, usagePlanName string @@ -99,10 +101,10 @@ func dataSourceTencentCloudAPIGatewayUsagePlansRead(d *schema.ResourceData, meta usagePlanName = v.(string) } - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { infos, err = apiGatewayService.DescribeUsagePlansStatus(ctx, usagePlanId, usagePlanName) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -127,10 +129,10 @@ func dataSourceTencentCloudAPIGatewayUsagePlansRead(d *schema.ResourceData, meta return err } - d.SetId(strings.Join([]string{usagePlanId, usagePlanName}, FILED_SP)) + d.SetId(strings.Join([]string{usagePlanId, usagePlanName}, tccommon.FILED_SP)) if output, ok := d.GetOk("result_output_file"); ok && output.(string) != "" { - return writeToFile(output.(string), list) + return tccommon.WriteToFile(output.(string), list) } return nil } diff --git a/tencentcloud/data_source_tc_api_gateway_usage_plans_test.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_usage_plans_test.go similarity index 92% rename from tencentcloud/data_source_tc_api_gateway_usage_plans_test.go rename to tencentcloud/services/apigateway/data_source_tc_api_gateway_usage_plans_test.go index ff124767d9..19c2141266 100644 --- a/tencentcloud/data_source_tc_api_gateway_usage_plans_test.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_usage_plans_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,8 +13,8 @@ var testAPIGatewayUsagePlansDataSourceName = "data.tencentcloud_api_gateway_usag func TestAccTencentAPIGatewayUsagePlansDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayUsagePlanDestroy, Steps: []resource.TestStep{ { diff --git a/tencentcloud/extension_api_gateway.go b/tencentcloud/services/apigateway/extension_api_gateway.go similarity index 99% rename from tencentcloud/extension_api_gateway.go rename to tencentcloud/services/apigateway/extension_api_gateway.go index 1baac20b21..d93895f63f 100644 --- a/tencentcloud/extension_api_gateway.go +++ b/tencentcloud/services/apigateway/extension_api_gateway.go @@ -1,4 +1,4 @@ -package tencentcloud +package apigateway const ( SERVICE_ERR_CODE = "ResourceNotFound.InvalidService" diff --git a/tencentcloud/services/apigateway/extension_tags.go b/tencentcloud/services/apigateway/extension_tags.go new file mode 100644 index 0000000000..6718959572 --- /dev/null +++ b/tencentcloud/services/apigateway/extension_tags.go @@ -0,0 +1,3 @@ +package apigateway + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/resource_tc_api_gateway_api.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_api.go similarity index 96% rename from tencentcloud/resource_tc_api_gateway_api.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_api.go index a7ebdb4569..9476fcdb3f 100644 --- a/tencentcloud/resource_tc_api_gateway_api.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_api.go @@ -1,17 +1,20 @@ -package tencentcloud +package apigateway import ( "context" "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudAPIGatewayAPI() *schema.Resource { +func ResourceTencentCloudAPIGatewayAPI() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayAPICreate, Read: resourceTencentCloudAPIGatewayAPIRead, @@ -39,14 +42,14 @@ func resourceTencentCloudAPIGatewayAPI() *schema.Resource { Optional: true, Type: schema.TypeString, Default: API_GATEWAY_API_TYPE_NORMAL, - ValidateFunc: validateAllowedStringValue(API_GATEWAY_APT_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_APT_TYPES), Description: "API type, supports NORMAL (regular API) and TSF (microservice API), defaults to NORMAL.", }, "auth_type": { Type: schema.TypeString, Optional: true, Default: API_GATEWAY_AUTH_TYPE_NONE, - ValidateFunc: validateAllowedStringValue(API_GATEWAY_AUTH_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_AUTH_TYPES), Description: "API authentication type. Support SECRET (Key Pair Authentication), NONE (Authentication Exemption), OAUTH, APP (Application Authentication). The default is NONE.", }, "protocol": { @@ -54,7 +57,7 @@ func resourceTencentCloudAPIGatewayAPI() *schema.Resource { Optional: true, ForceNew: true, Default: API_GATEWAY_API_PROTOCOL_HTTP, - ValidateFunc: validateAllowedStringValue(API_GATEWAY_API_PROTOCOLS), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_API_PROTOCOLS), Description: "API frontend request type. Valid values: `HTTP`, `WEBSOCKET`. Default value: `HTTP`.", }, "enable_cors": { @@ -72,7 +75,7 @@ func resourceTencentCloudAPIGatewayAPI() *schema.Resource { Type: schema.TypeString, Optional: true, Default: "GET", - ValidateFunc: validateAllowedStringValue([]string{"GET", "POST", "PUT", "DELETE", "HEAD", "ANY"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"GET", "POST", "PUT", "DELETE", "HEAD", "ANY"}), Description: "Request frontend method configuration. Valid values: `GET`,`POST`,`PUT`,`DELETE`,`HEAD`,`ANY`. Default value: `GET`.", }, "constant_parameters": { @@ -307,7 +310,7 @@ func resourceTencentCloudAPIGatewayAPI() *schema.Resource { Type: schema.TypeString, Optional: true, Default: API_GATEWAY_SERVICE_TYPE_HTTP, - ValidateFunc: validateAllowedStringValue(API_GATEWAY_SERVICE_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_SERVICE_TYPES), Description: "The backend service type of the API. Supports HTTP, MOCK, TSF, SCF, WEBSOCKET, COS, TARGET (internal testing).", }, "service_config_timeout": { @@ -467,7 +470,7 @@ func resourceTencentCloudAPIGatewayAPI() *schema.Resource { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateAllowedStringValue(API_GATEWAY_API_RESPONSE_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_API_RESPONSE_TYPES), Description: "Return type. Valid values: `HTML`, `JSON`, `TEXT`, `BINARY`, `XML`. Default value: `HTML`.", }, "response_success_example": { @@ -672,12 +675,12 @@ func resourceTencentCloudAPIGatewayAPI() *schema.Resource { } func resourceTencentCloudAPIGatewayAPICreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api.create")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api.create")() var ( - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) err error response = apigateway.NewCreateApiResponse() request = apigateway.NewCreateApiRequest() @@ -1092,10 +1095,10 @@ func resourceTencentCloudAPIGatewayAPICreate(d *schema.ResourceData, meta interf testLimit = v.(int) } - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = apiGatewayService.DescribeService(ctx, serviceId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -1105,11 +1108,11 @@ func resourceTencentCloudAPIGatewayAPICreate(d *schema.ResourceData, meta interf return fmt.Errorf("service %s not exist on server", serviceId) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = apiGatewayService.client.UseAPIGatewayClient().CreateApi(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -1148,13 +1151,13 @@ func resourceTencentCloudAPIGatewayAPICreate(d *schema.ResourceData, meta interf } func resourceTencentCloudAPIGatewayAPIRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) apiId = d.Id() serviceId = d.Get("service_id").(string) info apigateway.ApiInfo @@ -1165,10 +1168,10 @@ func resourceTencentCloudAPIGatewayAPIRead(d *schema.ResourceData, meta interfac testLimit int64 ) - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, err = apiGatewayService.DescribeApi(ctx, serviceId, apiId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -1500,12 +1503,12 @@ func resourceTencentCloudAPIGatewayAPIRead(d *schema.ResourceData, meta interfac } func resourceTencentCloudAPIGatewayAPIUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api.update")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api.update")() var ( - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) response = apigateway.NewModifyApiResponse() request = apigateway.NewModifyApiRequest() apiId = d.Id() @@ -1887,11 +1890,11 @@ func resourceTencentCloudAPIGatewayAPIUpdate(d *schema.ResourceData, meta interf } } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = apiGatewayService.client.UseAPIGatewayClient().ModifyApi(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -1947,12 +1950,12 @@ func resourceTencentCloudAPIGatewayAPIUpdate(d *schema.ResourceData, meta interf } func resourceTencentCloudAPIGatewayAPIDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api.delete")() var ( - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) apiId = d.Id() serviceId = d.Get("service_id").(string) limitNumber int64 = QUOTA @@ -1966,10 +1969,10 @@ func resourceTencentCloudAPIGatewayAPIDelete(d *schema.ResourceData, meta interf } } - return resource.Retry(writeRetryTimeout, func() *resource.RetryError { + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err = apiGatewayService.DeleteApi(ctx, serviceId, apiId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) diff --git a/tencentcloud/resource_tc_api_gateway_api_app.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_app.go similarity index 70% rename from tencentcloud/resource_tc_api_gateway_api_app.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_api_app.go index 76ade322e3..7b12fb7ec8 100644 --- a/tencentcloud/resource_tc_api_gateway_api_app.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_app.go @@ -1,17 +1,20 @@ -package tencentcloud +package apigateway import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apiGateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAPIGatewayAPIApp() *schema.Resource { +func ResourceTencentCloudAPIGatewayAPIApp() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayAPIAppCreate, Read: resourceTencentCloudAPIGatewayAPIAppRead, @@ -67,12 +70,12 @@ func resourceTencentCloudAPIGatewayAPIApp() *schema.Resource { } func resourceTencentCloudAPIGatewayAPIAppCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_app.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_app.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request = apiGateway.NewCreateApiAppRequest() response *apiGateway.CreateApiAppResponse apiAppId string @@ -87,10 +90,10 @@ func resourceTencentCloudAPIGatewayAPIAppCreate(d *schema.ResourceData, meta int request.ApiAppDesc = helper.String(v.(string)) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, err := meta.(*TencentCloudClient).apiV3Conn.UseAPIGatewayClient().CreateApiApp(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAPIGatewayClient().CreateApiApp(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -108,8 +111,8 @@ func resourceTencentCloudAPIGatewayAPIAppCreate(d *schema.ResourceData, meta int apiAppId = *response.Response.Result.ApiAppId if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::apigateway:%s:uin/:apiAppId/%s", region, apiAppId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -121,22 +124,22 @@ func resourceTencentCloudAPIGatewayAPIAppCreate(d *schema.ResourceData, meta int } func resourceTencentCloudAPIGatewayAPIAppRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_app.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_app.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} apiAppId = d.Id() apiAppInfo *apiGateway.ApiAppInfos err error ) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { apiAppInfo, err = apiGatewayService.DescribeApiApp(ctx, apiAppId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -179,8 +182,8 @@ func resourceTencentCloudAPIGatewayAPIAppRead(d *schema.ResourceData, meta inter } } - tcClient := meta.(*TencentCloudClient).apiV3Conn - tagService := &TagService{client: meta.(*TencentCloudClient).apiV3Conn} + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() + tagService := &TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} tags, err := tagService.DescribeResourceTags(ctx, "apigateway", "apiAppId", tcClient.Region, apiAppId) if err != nil { return err @@ -192,12 +195,12 @@ func resourceTencentCloudAPIGatewayAPIAppRead(d *schema.ResourceData, meta inter } func resourceTencentCloudAPIGatewayAPIAppUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_app.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_app.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request = apiGateway.NewModifyApiAppRequest() apiAppId = d.Id() err error @@ -216,10 +219,10 @@ func resourceTencentCloudAPIGatewayAPIAppUpdate(d *schema.ResourceData, meta int } } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAPIGatewayClient().ModifyApiApp(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAPIGatewayClient().ModifyApiApp(request) if e != nil { - return retryError(e) + 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()) @@ -233,11 +236,11 @@ func resourceTencentCloudAPIGatewayAPIAppUpdate(d *schema.ResourceData, meta int } if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("apigateway", "apiAppId", tcClient.Region, apiAppId) + resourceName := tccommon.BuildTagResourceName("apigateway", "apiAppId", tcClient.Region, apiAppId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -247,13 +250,13 @@ func resourceTencentCloudAPIGatewayAPIAppUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudAPIGatewayAPIAppDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_app.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_app.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} apiAppId = d.Id() err error ) diff --git a/tencentcloud/resource_tc_api_gateway_api_app_attachment.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_app_attachment.go similarity index 75% rename from tencentcloud/resource_tc_api_gateway_api_app_attachment.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_api_app_attachment.go index a6747938f3..a002bda7ae 100644 --- a/tencentcloud/resource_tc_api_gateway_api_app_attachment.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_app_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package apigateway import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAPIGatewayApiAppAttachment() *schema.Resource { +func ResourceTencentCloudAPIGatewayApiAppAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayApiAppAttachmentCreate, Read: resourceTencentCloudAPIGatewayApiAppAttachmentRead, @@ -50,11 +53,11 @@ func resourceTencentCloudAPIGatewayApiAppAttachment() *schema.Resource { } func resourceTencentCloudAPIGatewayApiAppAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_app_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_app_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = apigateway.NewBindApiAppRequest() apiAppId string environment string @@ -82,10 +85,10 @@ func resourceTencentCloudAPIGatewayApiAppAttachmentCreate(d *schema.ResourceData apiId = v.(string) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAPIGatewayClient().BindApiApp(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAPIGatewayClient().BindApiApp(request) if e != nil { - return retryError(e) + 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()) } @@ -103,21 +106,21 @@ func resourceTencentCloudAPIGatewayApiAppAttachmentCreate(d *schema.ResourceData return err } - d.SetId(strings.Join([]string{apiAppId, environment, serviceId, apiId}, FILED_SP)) + d.SetId(strings.Join([]string{apiAppId, environment, serviceId, apiId}, tccommon.FILED_SP)) return resourceTencentCloudAPIGatewayApiAppAttachmentRead(d, meta) } func resourceTencentCloudAPIGatewayApiAppAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_app_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_app_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("api_gateway_api_app_attachment id is broken, id is %s", d.Id()) } @@ -157,16 +160,16 @@ func resourceTencentCloudAPIGatewayApiAppAttachmentRead(d *schema.ResourceData, } func resourceTencentCloudAPIGatewayApiAppAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_app_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_app_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("api_gateway_api_app_attachment id is broken, id is %s", d.Id()) } diff --git a/tencentcloud/resource_tc_api_gateway_api_app_attachment_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_app_attachment_test.go similarity index 92% rename from tencentcloud/resource_tc_api_gateway_api_app_attachment_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_api_app_attachment_test.go index b1060e51cc..a43dcdb883 100644 --- a/tencentcloud/resource_tc_api_gateway_api_app_attachment_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_app_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudAPIGatewayApiAppAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccAPIGatewayApiAppAttachment, diff --git a/tencentcloud/resource_tc_api_gateway_api_app_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_app_test.go similarity index 78% rename from tencentcloud/resource_tc_api_gateway_api_app_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_api_app_test.go index 7ca7265764..1105fa839e 100644 --- a/tencentcloud/resource_tc_api_gateway_api_app_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_app_test.go @@ -1,14 +1,19 @@ -package tencentcloud +package apigateway_test import ( "context" "fmt" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + svcapigateway "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" ) var testAPIGatewayAPIAppResourceName = "tencentcloud_api_gateway_api_app" @@ -18,8 +23,8 @@ var testAPIGatewayAPIAppResourceKey = testAPIGatewayAPIAppResourceName + ".examp func TestAccTencentCloudAPIGateWayAPIAppResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayAPIAppDestroy, Steps: []resource.TestStep{ { @@ -52,10 +57,10 @@ func testAccCheckAPIGatewayAPIAppDestroy(s *terraform.State) error { if rs.Type != testAPIGatewayAPIAppResourceName { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) apiApp, err := service.DescribeApiApp(ctx, rs.Primary.ID) if err != nil { @@ -79,15 +84,15 @@ func testAccCheckAPIGatewayAPIAppDestroy(s *terraform.State) error { func testAccCheckAPIGatewayAPIAppExists(r string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[r] if !ok { return fmt.Errorf("resource %s is not found", r) } - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) command, err := service.DescribeApiApp(ctx, rs.Primary.ID) if err != nil { if sdkerr, ok := err.(*sdkErrors.TencentCloudSDKError); ok { diff --git a/tencentcloud/resource_tc_api_gateway_api_doc.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_doc.go similarity index 79% rename from tencentcloud/resource_tc_api_gateway_api_doc.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_api_doc.go index a2ef6f5a89..26f44e547a 100644 --- a/tencentcloud/resource_tc_api_gateway_api_doc.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_doc.go @@ -1,17 +1,20 @@ -package tencentcloud +package apigateway import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apiGateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAPIGatewayAPIDoc() *schema.Resource { +func ResourceTencentCloudAPIGatewayAPIDoc() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayAPIDocCreate, Read: resourceTencentCloudAPIGatewayAPIDocRead, @@ -98,13 +101,13 @@ func resourceTencentCloudAPIGatewayAPIDoc() *schema.Resource { } func resourceTencentCloudAPIGatewayAPIDocCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_doc.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_doc.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = apiGateway.NewCreateAPIDocRequest() response *apiGateway.CreateAPIDocResponse apiDocId string @@ -130,10 +133,10 @@ func resourceTencentCloudAPIGatewayAPIDocCreate(d *schema.ResourceData, meta int } } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, err := meta.(*TencentCloudClient).apiV3Conn.UseAPIGatewayClient().CreateAPIDoc(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAPIGatewayClient().CreateAPIDoc(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString()) @@ -149,10 +152,10 @@ func resourceTencentCloudAPIGatewayAPIDocCreate(d *schema.ResourceData, meta int apiDocId = *response.Response.Result.ApiDocId - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { apiDocInfo, err := apiGatewayService.DescribeApiDoc(ctx, apiDocId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if apiDocInfo == nil { err = fmt.Errorf("api_doc_id %s not exists", apiDocId) @@ -182,13 +185,13 @@ func resourceTencentCloudAPIGatewayAPIDocCreate(d *schema.ResourceData, meta int } func resourceTencentCloudAPIGatewayAPIDocRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_doc.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_doc.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} apiDocId = d.Id() apiDocInfo *apiGateway.APIDocInfo err error @@ -272,13 +275,13 @@ func resourceTencentCloudAPIGatewayAPIDocRead(d *schema.ResourceData, meta inter } func resourceTencentCloudAPIGatewayAPIDocUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_doc.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_doc.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = apiGateway.NewModifyAPIDocRequest() apiDocId = d.Id() err error @@ -305,10 +308,10 @@ func resourceTencentCloudAPIGatewayAPIDocUpdate(d *schema.ResourceData, meta int } } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAPIGatewayClient().ModifyAPIDoc(request) + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAPIGatewayClient().ModifyAPIDoc(request) if e != nil { - return retryError(e) + 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()) @@ -321,10 +324,10 @@ func resourceTencentCloudAPIGatewayAPIDocUpdate(d *schema.ResourceData, meta int return err } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { apiDocInfo, err := apiGatewayService.DescribeApiDoc(ctx, apiDocId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if apiDocInfo == nil { err = fmt.Errorf("api_doc_id %s not exists", apiDocId) @@ -352,13 +355,13 @@ func resourceTencentCloudAPIGatewayAPIDocUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudAPIGatewayAPIDocDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_doc.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_doc.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} apiDocId = d.Id() err error ) diff --git a/tencentcloud/resource_tc_api_gateway_api_doc_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_doc_test.go similarity index 79% rename from tencentcloud/resource_tc_api_gateway_api_doc_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_api_doc_test.go index 47b81c4bf4..acc25339f3 100644 --- a/tencentcloud/resource_tc_api_gateway_api_doc_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_doc_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package apigateway_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcapigateway "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" + "context" "fmt" "testing" @@ -17,8 +21,8 @@ var testAPIGatewayAPIDocResourceKey = testAPIGatewayAPIDocResourceName + ".test" func TestAccTencentCloudAPIGateWayAPIDocResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayAPIDocDestroy, Steps: []resource.TestStep{ { @@ -52,10 +56,10 @@ func testAccCheckAPIGatewayAPIDocDestroy(s *terraform.State) error { if rs.Type != testAPIGatewayAPIDocResourceName { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) apiDoc, err := service.DescribeApiDoc(ctx, rs.Primary.ID) if err != nil { @@ -76,15 +80,15 @@ func testAccCheckAPIGatewayAPIDocDestroy(s *terraform.State) error { func testAccCheckAPIGatewayAPIDocExists(r string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[r] if !ok { return fmt.Errorf("resource %s is not found", r) } - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) command, err := service.DescribeApiDoc(ctx, rs.Primary.ID) if err != nil { if sdkerr, ok := err.(*sdkErrors.TencentCloudSDKError); ok { diff --git a/tencentcloud/resource_tc_api_gateway_api_key.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_key.go similarity index 70% rename from tencentcloud/resource_tc_api_gateway_api_key.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_api_key.go index 6bd5f678e7..6a32a777e6 100644 --- a/tencentcloud/resource_tc_api_gateway_api_key.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_key.go @@ -1,10 +1,12 @@ -package tencentcloud +package apigateway import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" @@ -12,7 +14,7 @@ import ( apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" ) -func resourceTencentCloudAPIGatewayAPIKey() *schema.Resource { +func ResourceTencentCloudAPIGatewayAPIKey() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayAPIKeyCreate, Read: resourceTencentCloudAPIGatewayAPIKeyRead, @@ -32,13 +34,13 @@ func resourceTencentCloudAPIGatewayAPIKey() *schema.Resource { Type: schema.TypeString, Optional: true, Default: API_GATEWAY_KEY_ENABLED, - ValidateFunc: validateAllowedStringValue(API_GATEWAY_KEYS), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_KEYS), Description: "Key status. Valid values: `on`, `off`.", }, "access_key_type": { Optional: true, Default: API_GATEWAY_KEY_TYPE_AUTO, - ValidateFunc: validateAllowedStringValue(API_GATEWAY_KEYS_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_KEYS_TYPE), Type: schema.TypeString, Description: "Key type, supports both auto and manual (custom keys), defaults to auto.", }, @@ -46,14 +48,14 @@ func resourceTencentCloudAPIGatewayAPIKey() *schema.Resource { Optional: true, Computed: true, Type: schema.TypeString, - ValidateFunc: validateStringLengthInRange(5, 50), + ValidateFunc: tccommon.ValidateStringLengthInRange(5, 50), Description: "User defined key ID, required when access_key_type is manual. The length is 5-50 characters, consisting of letters, numbers, and English underscores.", }, "access_key_secret": { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateStringLengthInRange(10, 50), + ValidateFunc: tccommon.ValidateStringLengthInRange(10, 50), Description: "The user-defined key must be passed when the access_key_type is manual. The length is 10-50 characters, consisting of letters, numbers, and English underscores.", }, // Computed values. @@ -72,12 +74,12 @@ func resourceTencentCloudAPIGatewayAPIKey() *schema.Resource { } func resourceTencentCloudAPIGatewayAPIKeyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_key.create")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_key.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} request = apigateway.NewCreateApiKeyRequest() response = apigateway.NewCreateApiKeyResponse() statusStr string @@ -117,10 +119,10 @@ func resourceTencentCloudAPIGatewayAPIKeyCreate(d *schema.ResourceData, meta int request.AccessKeySecret = &accessKeySecret } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAPIGatewayClient().CreateApiKey(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAPIGatewayClient().CreateApiKey(request) if e != nil { - return retryError(e) + 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()) } @@ -136,9 +138,9 @@ func resourceTencentCloudAPIGatewayAPIKeyCreate(d *schema.ResourceData, meta int //set status to disable if statusStr == API_GATEWAY_KEY_DISABLED { - if err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err = apiGatewayService.DisableApiKey(ctx, accessKeyId); err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }); err != nil { @@ -152,23 +154,23 @@ func resourceTencentCloudAPIGatewayAPIKeyCreate(d *schema.ResourceData, meta int } func resourceTencentCloudAPIGatewayAPIKeyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_key.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_key.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} accessKeyId = d.Id() apiKey *apigateway.ApiKey err error has bool ) - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { apiKey, has, err = apiGatewayService.DescribeApiKey(ctx, accessKeyId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -192,13 +194,13 @@ func resourceTencentCloudAPIGatewayAPIKeyRead(d *schema.ResourceData, meta inter } func resourceTencentCloudAPIGatewayAPIKeyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_key.update")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_key.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request = apigateway.NewUpdateApiKeyRequest() - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} accessKeyId = d.Id() ) @@ -220,10 +222,10 @@ func resourceTencentCloudAPIGatewayAPIKeyUpdate(d *schema.ResourceData, meta int request.AccessKeySecret = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAPIGatewayClient().UpdateApiKey(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAPIGatewayClient().UpdateApiKey(request) if e != nil { - return retryError(e) + 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()) } @@ -243,14 +245,14 @@ func resourceTencentCloudAPIGatewayAPIKeyUpdate(d *schema.ResourceData, meta int err error ) - if err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if statusStr == API_GATEWAY_KEY_DISABLED { err = apiGatewayService.DisableApiKey(ctx, accessKeyId) } else { err = apiGatewayService.EnableApiKey(ctx, accessKeyId) } if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }); err != nil { @@ -262,20 +264,20 @@ func resourceTencentCloudAPIGatewayAPIKeyUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudAPIGatewayAPIKeyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_key.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_key.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} accessKeyId = d.Id() ) //set status to disable before delete if d.Get("status") != API_GATEWAY_KEY_DISABLED { - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err := apiGatewayService.DisableApiKey(ctx, accessKeyId); err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }); err != nil { @@ -283,10 +285,10 @@ func resourceTencentCloudAPIGatewayAPIKeyDelete(d *schema.ResourceData, meta int } } - return resource.Retry(writeRetryTimeout, func() *resource.RetryError { + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := apiGatewayService.DeleteApiKey(ctx, accessKeyId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) diff --git a/tencentcloud/resource_tc_api_gateway_api_key_attachment.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_key_attachment.go similarity index 64% rename from tencentcloud/resource_tc_api_gateway_api_key_attachment.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_api_key_attachment.go index 5501d1c12e..24f2e21c3b 100644 --- a/tencentcloud/resource_tc_api_gateway_api_key_attachment.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_key_attachment.go @@ -1,16 +1,18 @@ -package tencentcloud +package apigateway import ( "context" "fmt" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" ) -func resourceTencentCloudAPIGatewayAPIKeyAttachment() *schema.Resource { +func ResourceTencentCloudAPIGatewayAPIKeyAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayAPIKeyAttachmentCreate, Read: resourceTencentCloudAPIGatewayAPIKeyAttachmentRead, @@ -37,12 +39,12 @@ func resourceTencentCloudAPIGatewayAPIKeyAttachment() *schema.Resource { } func resourceTencentCloudAPIGatewayAPIKeyAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_key_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_key_attachment.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} apiKeyId = d.Get("api_key_id").(string) usagePlanId = d.Get("usage_plan_id").(string) has bool @@ -50,10 +52,10 @@ func resourceTencentCloudAPIGatewayAPIKeyAttachmentCreate(d *schema.ResourceData ) //check usage plan is exist - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = apiGatewayService.DescribeUsagePlan(ctx, usagePlanId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -65,10 +67,10 @@ func resourceTencentCloudAPIGatewayAPIKeyAttachmentCreate(d *schema.ResourceData } //check API key is exist - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = apiGatewayService.DescribeApiKey(ctx, apiKeyId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -78,9 +80,9 @@ func resourceTencentCloudAPIGatewayAPIKeyAttachmentCreate(d *schema.ResourceData return fmt.Errorf("API key %s is not exist", apiKeyId) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err = apiGatewayService.BindSecretId(ctx, usagePlanId, apiKeyId); err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -90,10 +92,10 @@ func resourceTencentCloudAPIGatewayAPIKeyAttachmentCreate(d *schema.ResourceData //waiting bind success var info apigateway.UsagePlanInfo - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, err = apiGatewayService.DescribeUsagePlan(ctx, usagePlanId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } if !has { return nil @@ -113,25 +115,25 @@ func resourceTencentCloudAPIGatewayAPIKeyAttachmentCreate(d *schema.ResourceData if !has { return fmt.Errorf("usage plan %s has been deleted", usagePlanId) } - d.SetId(strings.Join([]string{apiKeyId, usagePlanId}, FILED_SP)) + d.SetId(strings.Join([]string{apiKeyId, usagePlanId}, tccommon.FILED_SP)) return resourceTencentCloudAPIGatewayAPIKeyAttachmentRead(d, meta) } func resourceTencentCloudAPIGatewayAPIKeyAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_key_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_key_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} info apigateway.UsagePlanInfo err error has bool ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -141,10 +143,10 @@ func resourceTencentCloudAPIGatewayAPIKeyAttachmentRead(d *schema.ResourceData, return fmt.Errorf("id is broken,%s", d.Id()) } - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, err = apiGatewayService.DescribeUsagePlan(ctx, usagePlanId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -166,17 +168,17 @@ func resourceTencentCloudAPIGatewayAPIKeyAttachmentRead(d *schema.ResourceData, } func resourceTencentCloudAPIGatewayAPIKeyAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_api_key_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_api_key_attachment.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} info apigateway.UsagePlanInfo err error has bool ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -186,10 +188,10 @@ func resourceTencentCloudAPIGatewayAPIKeyAttachmentDelete(d *schema.ResourceData return fmt.Errorf("id is broken,%s", d.Id()) } - if err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err = apiGatewayService.UnBindSecretId(ctx, usagePlanId, apiKeyId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }); err != nil { @@ -197,10 +199,10 @@ func resourceTencentCloudAPIGatewayAPIKeyAttachmentDelete(d *schema.ResourceData } //waiting delete ok - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, err = apiGatewayService.DescribeUsagePlan(ctx, usagePlanId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } if !has { return nil diff --git a/tencentcloud/resource_tc_api_gateway_api_key_attachment_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_key_attachment_test.go similarity index 77% rename from tencentcloud/resource_tc_api_gateway_api_key_attachment_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_api_key_attachment_test.go index 28e956f0c3..696f95efc8 100644 --- a/tencentcloud/resource_tc_api_gateway_api_key_attachment_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_key_attachment_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package apigateway_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcapigateway "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" + "context" "fmt" "strings" @@ -16,8 +20,8 @@ var testAPIGatewayAPIKeyAttachmentResourceKey = testAPIGatewayAPIKeyAttachmentRe func TestAccTencentCloudAPIGateWayAPIKeyAttachmentResource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayAPIKeyAttachmentDestroy, Steps: []resource.TestStep{ { @@ -42,10 +46,10 @@ func testAccCheckAPIGatewayAPIKeyAttachmentDestroy(s *terraform.State) error { if rs.Type != testAPIGatewayAPIKeyAttachmentResourceName { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -54,7 +58,7 @@ func testAccCheckAPIGatewayAPIKeyAttachmentDestroy(s *terraform.State) error { if apiKeyId == "" || usagePlanId == "" { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) info, has, err := service.DescribeUsagePlan(ctx, usagePlanId) if err != nil { @@ -84,10 +88,10 @@ func testAccCheckAPIGatewayAPIKeyAttachmentExists(n string) resource.TestCheckFu if !ok { return fmt.Errorf("resource %s is not found", n) } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } @@ -96,7 +100,7 @@ func testAccCheckAPIGatewayAPIKeyAttachmentExists(n string) resource.TestCheckFu if apiKeyId == "" || usagePlanId == "" { return fmt.Errorf("id is broken,%s", rs.Primary.ID) } - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) info, has, err := service.DescribeUsagePlan(ctx, usagePlanId) if err != nil { diff --git a/tencentcloud/resource_tc_api_gateway_api_key_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_key_test.go similarity index 87% rename from tencentcloud/resource_tc_api_gateway_api_key_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_api_key_test.go index 16b42952de..f06bba8e96 100644 --- a/tencentcloud/resource_tc_api_gateway_api_key_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_key_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package apigateway_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcapigateway "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" + "context" "fmt" "testing" @@ -17,8 +21,8 @@ var testAPIGatewayAPIKeyResourceKeyManual = testAPIGatewayAPIKeyResourceName + " func TestAccTencentCloudAPIGateWayAPIKeyResource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayAPIKeyDestroy, Steps: []resource.TestStep{ { @@ -92,10 +96,10 @@ func testAccCheckAPIGatewayAPIKeyDestroy(s *terraform.State) error { if rs.Type != testAPIGatewayAPIKeyResourceName { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeApiKey(ctx, rs.Primary.ID) if err != nil { @@ -119,10 +123,10 @@ func testAccCheckAPIGatewayAPIKeyExists(n string) resource.TestCheckFunc { if !ok { return fmt.Errorf("resource %s is not found", n) } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeApiKey(ctx, rs.Primary.ID) if err != nil { diff --git a/tencentcloud/resource_tc_api_gateway_api_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_test.go similarity index 90% rename from tencentcloud/resource_tc_api_gateway_api_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_api_test.go index 8475e4b24d..94de0f4e16 100644 --- a/tencentcloud/resource_tc_api_gateway_api_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_api_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package apigateway_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcapigateway "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" + "context" "fmt" "testing" @@ -16,8 +20,8 @@ var testAPIGatewayAPIResourceKey = testAPIGatewayAPIResourceName + ".api" func TestAccTencentCloudAPIGateWayAPIResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayAPIDestroy, Steps: []resource.TestStep{ { @@ -83,9 +87,9 @@ func testAccCheckAPIGatewayAPIDestroy(s *terraform.State) error { } var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) apiId = rs.Primary.ID serviceId = rs.Primary.Attributes["service_id"] ) @@ -114,9 +118,9 @@ func testAccCheckAPIGatewayAPIExists(n string) resource.TestCheckFunc { } var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) apiId = rs.Primary.ID serviceId = rs.Primary.Attributes["service_id"] ) diff --git a/tencentcloud/resource_tc_api_gateway_custom_domain.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_custom_domain.go similarity index 78% rename from tencentcloud/resource_tc_api_gateway_custom_domain.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_custom_domain.go index bcb70f90f7..ac24a0f123 100644 --- a/tencentcloud/resource_tc_api_gateway_custom_domain.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_custom_domain.go @@ -1,15 +1,18 @@ -package tencentcloud +package apigateway import ( "context" "fmt" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAPIGatewayCustomDomain() *schema.Resource { +func ResourceTencentCloudAPIGatewayCustomDomain() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayCustomDomainCreate, Read: resourceTencentCloudAPIGatewayCustomDomainRead, @@ -20,7 +23,7 @@ func resourceTencentCloudAPIGatewayCustomDomain() *schema.Resource { "service_id": { Type: schema.TypeString, Required: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, ForceNew: true, Description: "Unique service ID.", }, @@ -32,13 +35,13 @@ func resourceTencentCloudAPIGatewayCustomDomain() *schema.Resource { "protocol": { Type: schema.TypeString, Required: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, Description: "Protocol supported by service. Valid values: `http`, `https`, `http&https`.", }, "net_type": { Type: schema.TypeString, Required: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, Description: "Network type. Valid values: `OUTER`, `INNER`.", }, "is_default_mapping": { @@ -50,7 +53,7 @@ func resourceTencentCloudAPIGatewayCustomDomain() *schema.Resource { "default_domain": { Type: schema.TypeString, Required: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, Description: "Default domain name.", }, "certificate_id": { @@ -83,12 +86,12 @@ func resourceTencentCloudAPIGatewayCustomDomain() *schema.Resource { } func resourceTencentCloudAPIGatewayCustomDomainCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_custom_domain.create")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_custom_domain.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} serviceId = d.Get("service_id").(string) subDomain = d.Get("sub_domain").(string) protocol = d.Get("protocol").(string) @@ -113,24 +116,24 @@ func resourceTencentCloudAPIGatewayCustomDomainCreate(d *schema.ResourceData, me return err } - d.SetId(strings.Join([]string{serviceId, subDomain}, FILED_SP)) + d.SetId(strings.Join([]string{serviceId, subDomain}, tccommon.FILED_SP)) return resourceTencentCloudAPIGatewayCustomDomainRead(d, meta) } func resourceTencentCloudAPIGatewayCustomDomainRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_custom_domain.read")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_custom_domain.read")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() err error ) - results := strings.Split(id, FILED_SP) + results := strings.Split(id, tccommon.FILED_SP) if len(results) != 2 { return fmt.Errorf("ids param is error. id: %s", id) } @@ -153,7 +156,7 @@ func resourceTencentCloudAPIGatewayCustomDomainRead(d *schema.ResourceData, meta } pathMap := make([]string, 0, len(info.PathMappingSet)) for _, v := range info.PathMappingSet { - pathMap = append(pathMap, strings.Join([]string{*v.Path, *v.Environment}, FILED_SP)) + pathMap = append(pathMap, strings.Join([]string{*v.Path, *v.Environment}, tccommon.FILED_SP)) } _ = d.Set("path_mappings", pathMap) @@ -169,12 +172,12 @@ func resourceTencentCloudAPIGatewayCustomDomainRead(d *schema.ResourceData, meta } func resourceTencentCloudAPIGatewayCustomDomainUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_custom_domain.update")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_custom_domain.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() subDomain string isDefaultMapping bool @@ -186,7 +189,7 @@ func resourceTencentCloudAPIGatewayCustomDomainUpdate(d *schema.ResourceData, me hasChange bool ) - results := strings.Split(id, FILED_SP) + results := strings.Split(id, tccommon.FILED_SP) if len(results) != 2 { return fmt.Errorf("ids param is error. setId: %s", id) } @@ -243,16 +246,16 @@ func resourceTencentCloudAPIGatewayCustomDomainUpdate(d *schema.ResourceData, me } func resourceTencentCloudAPIGatewayCustomDomainDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_custom_domain.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_custom_domain.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) id = d.Id() - apigatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + apigatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - results := strings.Split(id, FILED_SP) + results := strings.Split(id, tccommon.FILED_SP) if len(results) != 2 { return fmt.Errorf("ids param is error. setId: %s", id) } diff --git a/tencentcloud/resource_tc_api_gateway_custom_domain_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_custom_domain_test.go similarity index 80% rename from tencentcloud/resource_tc_api_gateway_custom_domain_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_custom_domain_test.go index 94d0702237..80ab3d12a6 100644 --- a/tencentcloud/resource_tc_api_gateway_custom_domain_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_custom_domain_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package apigateway_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcapigateway "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" + "context" "fmt" "strings" @@ -14,8 +18,8 @@ import ( func TestAccTencentCloudAPIGateWayCustomDomain_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckCustomDomainDestroy, Steps: []resource.TestStep{ { @@ -50,16 +54,16 @@ func TestAccTencentCloudAPIGateWayCustomDomain_basic(t *testing.T) { func testAccCheckCustomDomainDestroy(s *terraform.State) error { var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apigatewayService = APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apigatewayService = svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) ) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_api_gateway_custom_domain" { continue } - params := strings.Split(rs.Primary.ID, FILED_SP) + params := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(params) != 2 { return fmt.Errorf("ids param is error. id: %s", rs.Primary.ID) } @@ -80,9 +84,9 @@ func testAccCheckCustomDomainDestroy(s *terraform.State) error { func testAccCheckCustomDomainExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apigatewayService = APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apigatewayService = svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) ) rs, ok := s.RootModule().Resources[n] @@ -93,7 +97,7 @@ func testAccCheckCustomDomainExists(n string) resource.TestCheckFunc { return fmt.Errorf("API getway custom domain id is not set") } - params := strings.Split(rs.Primary.ID, FILED_SP) + params := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(params) != 2 { return fmt.Errorf("ids param is error. id: %s", rs.Primary.ID) } diff --git a/tencentcloud/resource_tc_api_gateway_import_open_api.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_import_open_api.go similarity index 95% rename from tencentcloud/resource_tc_api_gateway_import_open_api.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_import_open_api.go index 8917a1bf8b..c55469fb08 100644 --- a/tencentcloud/resource_tc_api_gateway_import_open_api.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_import_open_api.go @@ -1,4 +1,4 @@ -package tencentcloud +package apigateway import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apiGateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudApiGatewayImportOpenApi() *schema.Resource { +func ResourceTencentCloudApiGatewayImportOpenApi() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudApiGatewayImportOpenApiCreate, Read: resourceTencentCloudApiGatewayImportOpenApiRead, @@ -36,7 +39,7 @@ func resourceTencentCloudApiGatewayImportOpenApi() *schema.Resource { ForceNew: true, Type: schema.TypeString, Default: IMPORT_OPEN_API_ENCODE_TYPE_YAML, - ValidateFunc: validateAllowedStringValue(IMPORT_OPEN_API_ENCODE_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(IMPORT_OPEN_API_ENCODE_TYPE), Description: "The Content format can only be YAML or JSON, and the default is YAML.", }, "content_version": { @@ -543,11 +546,11 @@ func resourceTencentCloudApiGatewayImportOpenApi() *schema.Resource { } func resourceTencentCloudApiGatewayImportOpenApiCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_import_open_api.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_import_open_api.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = apiGateway.NewImportOpenApiRequest() response = apiGateway.NewImportOpenApiResponse() serviceId string @@ -571,10 +574,10 @@ func resourceTencentCloudApiGatewayImportOpenApiCreate(d *schema.ResourceData, m request.ContentVersion = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAPIGatewayClient().ImportOpenApi(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAPIGatewayClient().ImportOpenApi(request) if e != nil { - return retryError(e) + 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()) } @@ -598,21 +601,21 @@ func resourceTencentCloudApiGatewayImportOpenApiCreate(d *schema.ResourceData, m } apiId = *response.Response.Result.ApiSet[0].ApiId - d.SetId(strings.Join([]string{serviceId, apiId}, FILED_SP)) + d.SetId(strings.Join([]string{serviceId, apiId}, tccommon.FILED_SP)) return resourceTencentCloudApiGatewayImportOpenApiRead(d, meta) } func resourceTencentCloudApiGatewayImportOpenApiRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_import_open_api.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_import_open_api.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } @@ -911,16 +914,16 @@ func resourceTencentCloudApiGatewayImportOpenApiRead(d *schema.ResourceData, met } func resourceTencentCloudApiGatewayImportOpenApiDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_import_open_api.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_import_open_api.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("id is broken,%s", idSplit) } diff --git a/tencentcloud/resource_tc_api_gateway_import_open_api_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_import_open_api_test.go similarity index 91% rename from tencentcloud/resource_tc_api_gateway_import_open_api_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_import_open_api_test.go index 378653ddaa..3fa3386c0b 100644 --- a/tencentcloud/resource_tc_api_gateway_import_open_api_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_import_open_api_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudApiGatewayImportOpenApiResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccApiGatewayImportOpenApi, diff --git a/tencentcloud/resource_tc_api_gateway_ip_strategy.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_ip_strategy.go similarity index 64% rename from tencentcloud/resource_tc_api_gateway_ip_strategy.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_ip_strategy.go index 5bd57e6b3b..28a04dc7c3 100644 --- a/tencentcloud/resource_tc_api_gateway_ip_strategy.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_ip_strategy.go @@ -1,16 +1,18 @@ -package tencentcloud +package apigateway import ( "context" "fmt" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" ) -func resourceTencentCloudAPIGatewayIPStrategy() *schema.Resource { +func ResourceTencentCloudAPIGatewayIPStrategy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayIPStrategyCreate, Read: resourceTencentCloudAPIGatewayIPStrategyRead, @@ -25,27 +27,27 @@ func resourceTencentCloudAPIGatewayIPStrategy() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, Description: "The ID of the API gateway service.", }, "strategy_name": { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, Description: "User defined strategy name.", }, "strategy_type": { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, Description: "Blacklist or whitelist.", }, "strategy_data": { Type: schema.TypeString, Required: true, - ValidateFunc: validateIp, + ValidateFunc: tccommon.ValidateIp, Description: "IP address data.", }, // Computed values. @@ -64,12 +66,12 @@ func resourceTencentCloudAPIGatewayIPStrategy() *schema.Resource { } func resourceTencentCloudAPIGatewayIPStrategyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_ip_strategy.create")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_ip_strategy.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} serviceId = d.Get("service_id").(string) strategyName = d.Get("strategy_name").(string) strategyType = d.Get("strategy_type").(string) @@ -77,10 +79,10 @@ func resourceTencentCloudAPIGatewayIPStrategyCreate(d *schema.ResourceData, meta strategyId string err error ) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { strategyId, err = apiGatewayService.CreateIPStrategy(ctx, serviceId, strategyName, strategyType, strategyData) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -88,13 +90,13 @@ func resourceTencentCloudAPIGatewayIPStrategyCreate(d *schema.ResourceData, meta return err } - d.SetId(strings.Join([]string{serviceId, strategyId}, FILED_SP)) + d.SetId(strings.Join([]string{serviceId, strategyId}, tccommon.FILED_SP)) //wait ip strategy create ok - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err := apiGatewayService.DescribeIPStrategyStatus(ctx, serviceId, strategyId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } if has { return nil @@ -109,30 +111,30 @@ func resourceTencentCloudAPIGatewayIPStrategyCreate(d *schema.ResourceData, meta } func resourceTencentCloudAPIGatewayIPStrategyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_ip_strategy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_ip_strategy.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() IpStatus *apigateway.IPStrategy err error has bool ) - idSplit := strings.Split(id, FILED_SP) + idSplit := strings.Split(id, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("IP strategy is can't read, id is borken, id is %s", d.Id()) } serviceId := idSplit[0] strategyId := idSplit[1] - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { IpStatus, has, err = apiGatewayService.DescribeIPStrategyStatus(ctx, serviceId, strategyId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -154,16 +156,16 @@ func resourceTencentCloudAPIGatewayIPStrategyRead(d *schema.ResourceData, meta i } func resourceTencentCloudAPIGatewayIPStrategyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_ip_strategy.update")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_ip_strategy.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() ) - idSplit := strings.Split(id, FILED_SP) + idSplit := strings.Split(id, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("IP strategy is can't update, id is borken, id is %s", d.Id()) } @@ -176,11 +178,11 @@ func resourceTencentCloudAPIGatewayIPStrategyUpdate(d *schema.ResourceData, meta err error ) - if err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err = apiGatewayService.UpdateIPStrategy(ctx, serviceId, strategyId, strategyData) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }); err != nil { @@ -192,27 +194,27 @@ func resourceTencentCloudAPIGatewayIPStrategyUpdate(d *schema.ResourceData, meta } func resourceTencentCloudAPIGatewayIPStrategyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_ip_strategy.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_ip_strategy.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() err error ) - idSplit := strings.Split(id, FILED_SP) + idSplit := strings.Split(id, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("IP strategy is can't delete, id is borken, id is %s", d.Id()) } serviceId := idSplit[0] strategyId := idSplit[1] - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err = apiGatewayService.DeleteIPStrategy(ctx, serviceId, strategyId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) diff --git a/tencentcloud/resource_tc_api_gateway_ip_strategy_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_ip_strategy_test.go similarity index 78% rename from tencentcloud/resource_tc_api_gateway_ip_strategy_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_ip_strategy_test.go index f312984824..2c1197fcc1 100644 --- a/tencentcloud/resource_tc_api_gateway_ip_strategy_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_ip_strategy_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package apigateway_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcapigateway "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" + "context" "fmt" "strings" @@ -13,8 +17,8 @@ import ( func TestAccTencentCloudAPIGateWayIPStrategy_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testApiIPStrategyDestroy, Steps: []resource.TestStep{ { @@ -47,15 +51,15 @@ func TestAccTencentCloudAPIGateWayIPStrategy_basic(t *testing.T) { } func testApiIPStrategyDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_api_gateway_ip_strategy" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("IP strategy id is borken, id is %s", rs.Primary.ID) } @@ -76,9 +80,9 @@ func testApiIPStrategyDestroy(s *terraform.State) error { func testApiIPStrategyExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[n] if !ok { @@ -87,7 +91,7 @@ func testApiIPStrategyExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][IP strategy][Exists] check: id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 2 { return fmt.Errorf("IP strategy id is borken, id is %s", rs.Primary.ID) } diff --git a/tencentcloud/resource_tc_api_gateway_plugin.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_plugin.go similarity index 74% rename from tencentcloud/resource_tc_api_gateway_plugin.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_plugin.go index b451c8b88d..f9dbe897ac 100644 --- a/tencentcloud/resource_tc_api_gateway_plugin.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_plugin.go @@ -1,17 +1,20 @@ -package tencentcloud +package apigateway import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apiGateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAPIGatewayPlugin() *schema.Resource { +func ResourceTencentCloudAPIGatewayPlugin() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayPluginCreate, Read: resourceTencentCloudAPIGatewayPluginRead, @@ -46,11 +49,11 @@ func resourceTencentCloudAPIGatewayPlugin() *schema.Resource { } func resourceTencentCloudAPIGatewayPluginCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_plugin.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_plugin.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = apiGateway.NewCreatePluginRequest() response = apiGateway.NewCreatePluginResponse() ) @@ -71,10 +74,10 @@ func resourceTencentCloudAPIGatewayPluginCreate(d *schema.ResourceData, meta int request.Description = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAPIGatewayClient().CreatePlugin(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAPIGatewayClient().CreatePlugin(request) if e != nil { - return retryError(e) + 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()) } @@ -94,13 +97,13 @@ func resourceTencentCloudAPIGatewayPluginCreate(d *schema.ResourceData, meta int } func resourceTencentCloudAPIGatewayPluginRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_plugin.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_plugin.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} pluginId = d.Id() ) @@ -134,11 +137,11 @@ func resourceTencentCloudAPIGatewayPluginRead(d *schema.ResourceData, meta inter } func resourceTencentCloudAPIGatewayPluginUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_plugin.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_plugin.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = apiGateway.NewModifyPluginRequest() pluginId = d.Id() ) @@ -170,10 +173,10 @@ func resourceTencentCloudAPIGatewayPluginUpdate(d *schema.ResourceData, meta int } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAPIGatewayClient().ModifyPlugin(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAPIGatewayClient().ModifyPlugin(request) if e != nil { - return retryError(e) + 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()) } @@ -189,13 +192,13 @@ func resourceTencentCloudAPIGatewayPluginUpdate(d *schema.ResourceData, meta int } func resourceTencentCloudAPIGatewayPluginDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_plugin.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_plugin.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} pluginId = d.Id() ) diff --git a/tencentcloud/resource_tc_api_gateway_plugin_attachment.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_plugin_attachment.go similarity index 74% rename from tencentcloud/resource_tc_api_gateway_plugin_attachment.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_plugin_attachment.go index dc34eb70e9..e0aa369059 100644 --- a/tencentcloud/resource_tc_api_gateway_plugin_attachment.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_plugin_attachment.go @@ -1,4 +1,4 @@ -package tencentcloud +package apigateway import ( "context" @@ -6,13 +6,16 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apiGateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAPIGatewayPluginAttachment() *schema.Resource { +func ResourceTencentCloudAPIGatewayPluginAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayPluginAttachmentCreate, Read: resourceTencentCloudAPIGatewayPluginAttachmentRead, @@ -50,11 +53,11 @@ func resourceTencentCloudAPIGatewayPluginAttachment() *schema.Resource { } func resourceTencentCloudAPIGatewayPluginAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_plugin_attachment.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_plugin_attachment.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = apiGateway.NewAttachPluginRequest() pluginId string serviceId string @@ -82,10 +85,10 @@ func resourceTencentCloudAPIGatewayPluginAttachmentCreate(d *schema.ResourceData request.ApiIds = []*string{helper.String(v.(string))} } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAPIGatewayClient().AttachPlugin(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAPIGatewayClient().AttachPlugin(request) if e != nil { - return retryError(e) + 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()) } @@ -103,21 +106,21 @@ func resourceTencentCloudAPIGatewayPluginAttachmentCreate(d *schema.ResourceData return err } - d.SetId(strings.Join([]string{pluginId, serviceId, environmentName, apiId}, FILED_SP)) + d.SetId(strings.Join([]string{pluginId, serviceId, environmentName, apiId}, tccommon.FILED_SP)) return resourceTencentCloudAPIGatewayPluginAttachmentRead(d, meta) } func resourceTencentCloudAPIGatewayPluginAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_plugin_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_plugin_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("id is broken,%s", d.Id()) } @@ -154,16 +157,16 @@ func resourceTencentCloudAPIGatewayPluginAttachmentRead(d *schema.ResourceData, } func resourceTencentCloudAPIGatewayPluginAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_plugin_attachment.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_plugin_attachment.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} ) - idSplit := strings.Split(d.Id(), FILED_SP) + idSplit := strings.Split(d.Id(), tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("id is broken,%s", d.Id()) } diff --git a/tencentcloud/resource_tc_api_gateway_plugin_attachment_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_plugin_attachment_test.go similarity index 93% rename from tencentcloud/resource_tc_api_gateway_plugin_attachment_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_plugin_attachment_test.go index 050d470ff5..663ca5c022 100644 --- a/tencentcloud/resource_tc_api_gateway_plugin_attachment_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_plugin_attachment_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudApiGatewayPluginAttachmentResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccApiGatewayPluginAttachment, diff --git a/tencentcloud/resource_tc_api_gateway_plugin_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_plugin_test.go similarity index 92% rename from tencentcloud/resource_tc_api_gateway_plugin_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_plugin_test.go index b5fe1e2a60..bcf601b7cc 100644 --- a/tencentcloud/resource_tc_api_gateway_plugin_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_plugin_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudApiGatewayPluginResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccApiGatewayPlugin, diff --git a/tencentcloud/resource_tc_api_gateway_service.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_service.go similarity index 82% rename from tencentcloud/resource_tc_api_gateway_service.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_service.go index 3c210e96ba..f58228279e 100644 --- a/tencentcloud/resource_tc_api_gateway_service.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_service.go @@ -1,17 +1,20 @@ -package tencentcloud +package apigateway import ( "context" "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAPIGatewayService() *schema.Resource { +func ResourceTencentCloudAPIGatewayService() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayServiceCreate, Read: resourceTencentCloudAPIGatewayServiceRead, @@ -30,7 +33,7 @@ func resourceTencentCloudAPIGatewayService() *schema.Resource { "protocol": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(API_GATEWAY_SERVICE_PROTOCOLS), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_SERVICE_PROTOCOLS), Description: "Service frontend request type. Valid values: `http`, `https`, `http&https`.", }, "service_desc": { @@ -51,7 +54,7 @@ func resourceTencentCloudAPIGatewayService() *schema.Resource { MinItems: 1, Elem: &schema.Schema{ Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue([]string{API_GATEWAY_NET_TYPE_INNER, API_GATEWAY_NET_TYPE_OUTER}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{API_GATEWAY_NET_TYPE_INNER, API_GATEWAY_NET_TYPE_OUTER}), }, Description: "Network type list, which is used to specify the supported network types. Valid values: `INNER`, `OUTER`. " + "`INNER` indicates access over private network, and `OUTER` indicates access over public network.", @@ -61,7 +64,7 @@ func resourceTencentCloudAPIGatewayService() *schema.Resource { Optional: true, ForceNew: true, Default: "IPv4", - ValidateFunc: validateAllowedStringValue(API_GATEWAY_NET_IP_VERSIONS), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_NET_IP_VERSIONS), Description: "IP version number. Valid values: `IPv4`, `IPv6`. Default value: `IPv4`.", }, "tags": { @@ -197,12 +200,12 @@ func resourceTencentCloudAPIGatewayService() *schema.Resource { } func resourceTencentCloudAPIGatewayServiceCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_service.create")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_service.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} serviceName = d.Get("service_name").(string) protocol = d.Get("protocol").(string) serviceDesc = d.Get("service_desc").(string) @@ -227,7 +230,7 @@ func resourceTencentCloudAPIGatewayServiceCreate(d *schema.ResourceData, meta in vpcId = v.(string) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { serviceId, err = apiGatewayService.CreateService(ctx, serviceName, protocol, @@ -247,7 +250,7 @@ func resourceTencentCloudAPIGatewayServiceCreate(d *schema.ResourceData, meta in return resource.NonRetryableError(err) } } - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -256,10 +259,10 @@ func resourceTencentCloudAPIGatewayServiceCreate(d *schema.ResourceData, meta in } //wait service create ok - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, inErr := apiGatewayService.DescribeService(ctx, serviceId) if inErr != nil { - return retryError(inErr, InternalError) + return tccommon.RetryError(inErr, tccommon.InternalError) } if has { return nil @@ -304,8 +307,8 @@ func resourceTencentCloudAPIGatewayServiceCreate(d *schema.ResourceData, meta in } if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::apigw:%s:uin/:service/%s", region, serviceId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -318,14 +321,14 @@ func resourceTencentCloudAPIGatewayServiceCreate(d *schema.ResourceData, meta in } func resourceTencentCloudAPIGatewayServiceRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_service.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_service.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) serviceId = d.Id() - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} info apigateway.DescribeServiceResponse has bool err error @@ -335,10 +338,10 @@ func resourceTencentCloudAPIGatewayServiceRead(d *schema.ResourceData, meta inte testLimit int64 ) - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, err = apiGatewayService.DescribeService(ctx, serviceId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -368,10 +371,10 @@ func resourceTencentCloudAPIGatewayServiceRead(d *schema.ResourceData, meta inte var hasContains = make(map[string]bool) //from service - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { plans, err = apiGatewayService.DescribeServiceUsagePlan(ctx, serviceId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -393,10 +396,10 @@ func resourceTencentCloudAPIGatewayServiceRead(d *schema.ResourceData, meta inte } //from API - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { plans, err = apiGatewayService.DescribeApiUsagePlan(ctx, serviceId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -465,7 +468,7 @@ func resourceTencentCloudAPIGatewayServiceRead(d *schema.ResourceData, meta inte _ = d.Set("test_limit", testLimit) _ = d.Set("release_limit", releaseLimit) - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "apigw", "service", tcClient.Region, serviceId) if err != nil { @@ -478,12 +481,12 @@ func resourceTencentCloudAPIGatewayServiceRead(d *schema.ResourceData, meta inte } func resourceTencentCloudAPIGatewayServiceUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_service.update")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_service.update")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} serviceName = d.Get("service_name").(string) protocol = d.Get("protocol").(string) serviceDesc = d.Get("service_desc").(string) @@ -496,14 +499,14 @@ func resourceTencentCloudAPIGatewayServiceUpdate(d *schema.ResourceData, meta in testLimit int ) d.Partial(true) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err = apiGatewayService.ModifyService(ctx, serviceId, serviceName, protocol, serviceDesc, netTypes); err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -551,11 +554,11 @@ func resourceTencentCloudAPIGatewayServiceUpdate(d *schema.ResourceData, meta in } if d.HasChange("tags") { - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("apigw", "service", tcClient.Region, serviceId) + resourceName := tccommon.BuildTagResourceName("apigw", "service", tcClient.Region, serviceId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -566,20 +569,20 @@ func resourceTencentCloudAPIGatewayServiceUpdate(d *schema.ResourceData, meta in } func resourceTencentCloudAPIGatewayServiceDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_service.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_service.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} serviceId = d.Id() err error ) // del tags if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::apigw:%s:uin/:service/%s", region, serviceId) tmpList := make([]string, 0) for k := range tags { @@ -591,9 +594,9 @@ func resourceTencentCloudAPIGatewayServiceDelete(d *schema.ResourceData, meta in } for _, env := range API_GATEWAY_SERVICE_ENVS { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err = apiGatewayService.UnReleaseService(ctx, serviceId, env); err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -602,9 +605,9 @@ func resourceTencentCloudAPIGatewayServiceDelete(d *schema.ResourceData, meta in } } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err = apiGatewayService.DeleteService(ctx, serviceId); err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) diff --git a/tencentcloud/resource_tc_api_gateway_service_release.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_service_release.go similarity index 69% rename from tencentcloud/resource_tc_api_gateway_service_release.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_service_release.go index a096017c64..3ba01536e4 100644 --- a/tencentcloud/resource_tc_api_gateway_service_release.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_service_release.go @@ -1,16 +1,18 @@ -package tencentcloud +package apigateway import ( "context" "fmt" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" ) -func resourceTencentCloudAPIGatewayServiceRelease() *schema.Resource { +func ResourceTencentCloudAPIGatewayServiceRelease() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayServiceReleaseCreate, Read: resourceTencentCloudAPIGatewayServiceReleaseRead, @@ -30,7 +32,7 @@ func resourceTencentCloudAPIGatewayServiceRelease() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue(API_GATEWAY_SERVICE_ENVS), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_SERVICE_ENVS), Description: "API gateway service environment name to be released. Valid values: `test`, `prepub`, `release`.", }, "release_desc": { @@ -50,12 +52,12 @@ func resourceTencentCloudAPIGatewayServiceRelease() *schema.Resource { } func resourceTencentCloudAPIGatewayServiceReleaseCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_service_release.create")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_service_release.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} serviceId = d.Get("service_id").(string) environmentName = d.Get("environment_name").(string) releaseDesc = d.Get("release_desc").(string) @@ -67,10 +69,10 @@ func resourceTencentCloudAPIGatewayServiceReleaseCreate(d *schema.ResourceData, ) //check API gateway serviceid and service contains api - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { checkServiceResponse, has, err = apiGatewayService.DescribeService(ctx, serviceId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } if has { return nil @@ -89,10 +91,10 @@ func resourceTencentCloudAPIGatewayServiceReleaseCreate(d *schema.ResourceData, } //wait service release ok - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { serviceResponse, has, err = apiGatewayService.DescribeService(ctx, serviceId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } if has { return nil @@ -113,25 +115,25 @@ func resourceTencentCloudAPIGatewayServiceReleaseCreate(d *schema.ResourceData, return fmt.Errorf("API gateway service not release success") } - d.SetId(strings.Join([]string{serviceId, environmentName, *releaseResponse.Response.Result.ReleaseVersion}, FILED_SP)) + d.SetId(strings.Join([]string{serviceId, environmentName, *releaseResponse.Response.Result.ReleaseVersion}, tccommon.FILED_SP)) return resourceTencentCloudAPIGatewayServiceReleaseRead(d, meta) } func resourceTencentCloudAPIGatewayServiceReleaseRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_service_release.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_service_release.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() info []*apigateway.ServiceReleaseHistoryInfo err error ) - ids := strings.Split(id, FILED_SP) + ids := strings.Split(id, tccommon.FILED_SP) if len(ids) != 3 { return fmt.Errorf("id is broken, id is %s", id) } @@ -141,10 +143,10 @@ func resourceTencentCloudAPIGatewayServiceReleaseRead(d *schema.ResourceData, me envVersion = ids[2] ) - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, _, err = apiGatewayService.DescribeServiceEnvironmentReleaseHistory(ctx, serviceId, envName) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -168,17 +170,17 @@ func resourceTencentCloudAPIGatewayServiceReleaseRead(d *schema.ResourceData, me } func resourceTencentCloudAPIGatewayServiceReleaseDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_service_release.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_service_release.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() err error ) - ids := strings.Split(id, FILED_SP) + ids := strings.Split(id, tccommon.FILED_SP) if len(ids) != 3 { return fmt.Errorf("id is broken, id is %s", id) } @@ -187,9 +189,9 @@ func resourceTencentCloudAPIGatewayServiceReleaseDelete(d *schema.ResourceData, envName = ids[1] ) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { if err = apiGatewayService.UnReleaseService(ctx, serviceId, envName); err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) diff --git a/tencentcloud/resource_tc_api_gateway_service_release_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_service_release_test.go similarity index 82% rename from tencentcloud/resource_tc_api_gateway_service_release_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_service_release_test.go index b4f3d25176..a73fd43e64 100644 --- a/tencentcloud/resource_tc_api_gateway_service_release_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_service_release_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package apigateway_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcapigateway "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" + "context" "fmt" "strings" @@ -19,8 +23,8 @@ var ( func TestAccTencentCloudAPIGatewayServiceRelease(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayServiceReleaseDestroy, Steps: []resource.TestStep{ { @@ -49,15 +53,15 @@ func testAccCheckAPIGatewayServiceReleaseDestroy(s *terraform.State) error { } var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) info []*apigateway.ServiceReleaseHistoryInfo err error has bool ) - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(ids) != 3 { return fmt.Errorf("id is broken, id is %s", rs.Primary.ID) } @@ -96,15 +100,15 @@ func testAccCheckAPIGatewayServiceReleaseExists(n string) resource.TestCheckFunc } var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) info []*apigateway.ServiceReleaseHistoryInfo err error has bool ) - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(ids) != 3 { return fmt.Errorf("id is broken, id is %s", rs.Primary.ID) } diff --git a/tencentcloud/resource_tc_api_gateway_service_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_service_test.go similarity index 85% rename from tencentcloud/resource_tc_api_gateway_service_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_service_test.go index c30391b9be..0227394db7 100644 --- a/tencentcloud/resource_tc_api_gateway_service_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_service_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package apigateway_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcapigateway "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" + "context" "fmt" "testing" @@ -16,8 +20,8 @@ var testAPIGatewayServiceResourceKey = testAPIGatewayServiceResourceName + ".ser func TestAccTencentCloudApiGateWayServiceResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayServiceDestroy, Steps: []resource.TestStep{ { @@ -71,10 +75,10 @@ func testAccCheckAPIGatewayServiceDestroy(s *terraform.State) error { if rs.Type != testAPIGatewayServiceResourceName { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeService(ctx, rs.Primary.ID) if err != nil { @@ -98,10 +102,10 @@ func testAccCheckAPIGatewayServiceExists(n string) resource.TestCheckFunc { if !ok { return fmt.Errorf("resource %s is not found", n) } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeService(ctx, rs.Primary.ID) if err != nil { diff --git a/tencentcloud/resource_tc_api_gateway_strategy_attachment.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_strategy_attachment.go similarity index 65% rename from tencentcloud/resource_tc_api_gateway_strategy_attachment.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_strategy_attachment.go index 515caf52e9..36e5bdb4f7 100644 --- a/tencentcloud/resource_tc_api_gateway_strategy_attachment.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_strategy_attachment.go @@ -1,15 +1,17 @@ -package tencentcloud +package apigateway import ( "context" "fmt" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -func resourceTencentCloudAPIGatewayStrategyAttachment() *schema.Resource { +func ResourceTencentCloudAPIGatewayStrategyAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayStrategyAttachmentCreate, Read: resourceTencentCloudAPIGatewayStrategyAttachmentRead, @@ -23,28 +25,28 @@ func resourceTencentCloudAPIGatewayStrategyAttachment() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, Description: "The ID of the API gateway service.", }, "strategy_id": { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, Description: "The ID of the API gateway strategy.", }, "environment_name": { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue(API_GATEWAY_SERVICE_ENVS), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_SERVICE_ENVS), Description: "The environment of the strategy association. Valid values: `test`, `release`, `prepub`.", }, "bind_api_id": { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateNotEmpty, + ValidateFunc: tccommon.ValidateNotEmpty, Description: "The API that needs to be bound.", }, }, @@ -52,12 +54,12 @@ func resourceTencentCloudAPIGatewayStrategyAttachment() *schema.Resource { } func resourceTencentCloudAPIGatewayStrategyAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_strategy_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_strategy_attachment.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} serviceId = d.Get("service_id").(string) strategyId = d.Get("strategy_id").(string) envName = d.Get("environment_name").(string) @@ -66,10 +68,10 @@ func resourceTencentCloudAPIGatewayStrategyAttachmentCreate(d *schema.ResourceDa has bool ) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { _, err = apiGatewayService.CreateStrategyAttachment(ctx, serviceId, strategyId, envName, bindApiId) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -77,18 +79,18 @@ func resourceTencentCloudAPIGatewayStrategyAttachmentCreate(d *schema.ResourceDa return err } - d.SetId(strings.Join([]string{serviceId, strategyId, bindApiId, envName}, FILED_SP)) + d.SetId(strings.Join([]string{serviceId, strategyId, bindApiId, envName}, tccommon.FILED_SP)) //wait IP strategy create ok - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { has, err = apiGatewayService.DescribeStrategyAttachment(ctx, serviceId, strategyId, bindApiId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } if has { return nil } - return resource.RetryableError(fmt.Errorf("IP strategy attachment %s not found on server", strings.Join([]string{strategyId, bindApiId}, FILED_SP))) + return resource.RetryableError(fmt.Errorf("IP strategy attachment %s not found on server", strings.Join([]string{strategyId, bindApiId}, tccommon.FILED_SP))) }); err != nil { return err } @@ -97,19 +99,19 @@ func resourceTencentCloudAPIGatewayStrategyAttachmentCreate(d *schema.ResourceDa } func resourceTencentCloudAPIGatewayStrategyAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_strategy_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_strategy_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} attachmentId = d.Id() err error has bool ) - idSplit := strings.Split(attachmentId, FILED_SP) + idSplit := strings.Split(attachmentId, tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("IP strategy attachment id is broken, id is %s", attachmentId) } @@ -118,10 +120,10 @@ func resourceTencentCloudAPIGatewayStrategyAttachmentRead(d *schema.ResourceData bindApiId := idSplit[2] envname := idSplit[3] - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { has, err = apiGatewayService.DescribeStrategyAttachment(ctx, serviceId, strategyId, bindApiId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -142,12 +144,12 @@ func resourceTencentCloudAPIGatewayStrategyAttachmentRead(d *schema.ResourceData } func resourceTencentCloudAPIGatewayStrategyAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_strategy_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_strategy_attachment.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} serviceId = d.Get("service_id").(string) strategyId = d.Get("strategy_id").(string) envName = d.Get("environment_name").(string) diff --git a/tencentcloud/resource_tc_api_gateway_strategy_attachment_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_strategy_attachment_test.go similarity index 83% rename from tencentcloud/resource_tc_api_gateway_strategy_attachment_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_strategy_attachment_test.go index 01e9784870..f1bc844810 100644 --- a/tencentcloud/resource_tc_api_gateway_strategy_attachment_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_strategy_attachment_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package apigateway_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcapigateway "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" + "context" "fmt" "strings" @@ -15,8 +19,8 @@ import ( func TestAccTencentCloudAPIGateWayStrategyAttachment_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testApiStrategyAttachmentDestroy, Steps: []resource.TestStep{ { @@ -39,15 +43,15 @@ func TestAccTencentCloudAPIGateWayStrategyAttachment_basic(t *testing.T) { } func testApiStrategyAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_api_gateway_strategy_attachment" { continue } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("IP strategy attachment id is broken, id is %s", rs.Primary.ID) } @@ -74,9 +78,9 @@ func testApiStrategyAttachmentDestroy(s *terraform.State) error { func testApiStrategyAttachmentExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) rs, ok := s.RootModule().Resources[n] if !ok { @@ -85,7 +89,7 @@ func testApiStrategyAttachmentExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][IP strategy][Exists] check: id is not set") } - idSplit := strings.Split(rs.Primary.ID, FILED_SP) + idSplit := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(idSplit) != 4 { return fmt.Errorf("IP strategy attachment id is broken, id is %s", rs.Primary.ID) } diff --git a/tencentcloud/resource_tc_api_gateway_update_api_app_key.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_update_api_app_key.go similarity index 72% rename from tencentcloud/resource_tc_api_gateway_update_api_app_key.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_update_api_app_key.go index 9dcd684d95..936c1cad44 100644 --- a/tencentcloud/resource_tc_api_gateway_update_api_app_key.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_update_api_app_key.go @@ -1,15 +1,18 @@ -package tencentcloud +package apigateway import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apiGateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudApiGatewayUpdateApiAppKey() *schema.Resource { +func ResourceTencentCloudApiGatewayUpdateApiAppKey() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudApiGatewayUpdateApiAppKeyCreate, Read: resourceTencentCloudApiGatewayUpdateApiAppKeyRead, @@ -39,11 +42,11 @@ func resourceTencentCloudApiGatewayUpdateApiAppKey() *schema.Resource { } func resourceTencentCloudApiGatewayUpdateApiAppKeyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_update_api_app_key.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_update_api_app_key.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = apiGateway.NewUpdateApiAppKeyRequest() apiAppId string ) @@ -61,10 +64,10 @@ func resourceTencentCloudApiGatewayUpdateApiAppKeyCreate(d *schema.ResourceData, // request.ApiAppSecret = helper.String(v.(string)) //} - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAPIGatewayClient().UpdateApiAppKey(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAPIGatewayClient().UpdateApiAppKey(request) if e != nil { - return retryError(e) + 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()) } @@ -82,15 +85,15 @@ func resourceTencentCloudApiGatewayUpdateApiAppKeyCreate(d *schema.ResourceData, } func resourceTencentCloudApiGatewayUpdateApiAppKeyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_update_api_app_key.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_update_api_app_key.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudApiGatewayUpdateApiAppKeyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_update_api_app_key.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_update_api_app_key.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_api_gateway_update_api_app_key_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_update_api_app_key_test.go similarity index 82% rename from tencentcloud/resource_tc_api_gateway_update_api_app_key_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_update_api_app_key_test.go index 106d245b7d..e1d8d1d475 100644 --- a/tencentcloud/resource_tc_api_gateway_update_api_app_key_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_update_api_app_key_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,8 +13,8 @@ func TestAccTencentCloudAPIGateWayUpdateApiAppKey_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccUpdateApiAppKey, diff --git a/tencentcloud/resource_tc_api_gateway_upstream.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_upstream.go similarity index 92% rename from tencentcloud/resource_tc_api_gateway_upstream.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_upstream.go index a55ad8d70c..1ce58d4a85 100644 --- a/tencentcloud/resource_tc_api_gateway_upstream.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_upstream.go @@ -1,17 +1,20 @@ -package tencentcloud +package apigateway import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAPIGatewayUpstream() *schema.Resource { +func ResourceTencentCloudAPIGatewayUpstream() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayUpstreamCreate, Read: resourceTencentCloudAPIGatewayUpstreamRead, @@ -24,7 +27,7 @@ func resourceTencentCloudAPIGatewayUpstream() *schema.Resource { "scheme": { Required: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(API_GATEWAY_UPSTREAM_SCHEME), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_UPSTREAM_SCHEME), Description: "Backend protocol, value range: HTTP, HTTPS, gRPC, gRPCs.", }, "algorithm": { @@ -50,7 +53,7 @@ func resourceTencentCloudAPIGatewayUpstream() *schema.Resource { "upstream_type": { Optional: true, Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(API_GATEWAY_UPSTREAM_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_UPSTREAM_TYPE), Description: "Backend access type, value range: IP_PORT, K8S.", }, "retries": { @@ -261,11 +264,11 @@ func resourceTencentCloudAPIGatewayUpstream() *schema.Resource { } func resourceTencentCloudAPIGatewayUpstreamCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_upstream.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_upstream.create")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = apigateway.NewCreateUpstreamRequest() response = apigateway.NewCreateUpstreamResponse() upstreamId string @@ -461,10 +464,10 @@ func resourceTencentCloudAPIGatewayUpstreamCreate(d *schema.ResourceData, meta i } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAPIGatewayClient().CreateUpstream(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAPIGatewayClient().CreateUpstream(request) if e != nil { - return retryError(e) + 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()) } @@ -480,10 +483,10 @@ func resourceTencentCloudAPIGatewayUpstreamCreate(d *schema.ResourceData, meta i upstreamId = *response.Response.UpstreamId - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) if tags := helper.GetTags(d, "tags"); len(tags) > 0 { - tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn} - region := meta.(*TencentCloudClient).apiV3Conn.Region + tagService := TagService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} + region := meta.(tccommon.ProviderMeta).GetAPIV3Conn().Region resourceName := fmt.Sprintf("qcs::apigateway:%s:uin/:upstreamId/%s", region, upstreamId) if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil { return err @@ -495,13 +498,13 @@ func resourceTencentCloudAPIGatewayUpstreamCreate(d *schema.ResourceData, meta i } func resourceTencentCloudAPIGatewayUpstreamRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_upstream.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_upstream.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} upstreamId = d.Id() upstreamType string ) @@ -717,7 +720,7 @@ func resourceTencentCloudAPIGatewayUpstreamRead(d *schema.ResourceData, meta int } - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "apigateway", "upstreamId", tcClient.Region, upstreamId) if err != nil { @@ -730,11 +733,11 @@ func resourceTencentCloudAPIGatewayUpstreamRead(d *schema.ResourceData, meta int } func resourceTencentCloudAPIGatewayUpstreamUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_upstream.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_upstream.update")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) request = apigateway.NewModifyUpstreamRequest() upstreamId = d.Id() upstreamType string @@ -951,10 +954,10 @@ func resourceTencentCloudAPIGatewayUpstreamUpdate(d *schema.ResourceData, meta i } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAPIGatewayClient().ModifyUpstream(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAPIGatewayClient().ModifyUpstream(request) if e != nil { - return retryError(e) + 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()) } @@ -968,12 +971,12 @@ func resourceTencentCloudAPIGatewayUpstreamUpdate(d *schema.ResourceData, meta i } if d.HasChange("tags") { - ctx := context.WithValue(context.TODO(), logIdKey, logId) - tcClient := meta.(*TencentCloudClient).apiV3Conn + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} oldTags, newTags := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldTags.(map[string]interface{}), newTags.(map[string]interface{})) - resourceName := BuildTagResourceName("apigateway", "upstreamId", tcClient.Region, upstreamId) + resourceName := tccommon.BuildTagResourceName("apigateway", "upstreamId", tcClient.Region, upstreamId) if err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags); err != nil { return err } @@ -983,13 +986,13 @@ func resourceTencentCloudAPIGatewayUpstreamUpdate(d *schema.ResourceData, meta i } func resourceTencentCloudAPIGatewayUpstreamDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_upstream.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_upstream.delete")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - service = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + service = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} upstreamId = d.Id() ) diff --git a/tencentcloud/resource_tc_api_gateway_upstream_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_upstream_test.go similarity index 96% rename from tencentcloud/resource_tc_api_gateway_upstream_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_upstream_test.go index 201122c46c..3d8db3d90d 100644 --- a/tencentcloud/resource_tc_api_gateway_upstream_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_upstream_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package apigateway_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -11,9 +13,9 @@ func TestAccTencentCloudApigatewayUpstreamResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccApigatewayUpstreamCvm, diff --git a/tencentcloud/resource_tc_api_gateway_usage_plan.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_usage_plan.go similarity index 77% rename from tencentcloud/resource_tc_api_gateway_usage_plan.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_usage_plan.go index 16646167a1..c8cb6685bf 100644 --- a/tencentcloud/resource_tc_api_gateway_usage_plan.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_usage_plan.go @@ -1,16 +1,19 @@ -package tencentcloud +package apigateway import ( "context" "fmt" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAPIGatewayUsagePlan() *schema.Resource { +func ResourceTencentCloudAPIGatewayUsagePlan() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayUsagePlanCreate, Read: resourceTencentCloudAPIGatewayUsagePlanRead, @@ -39,7 +42,7 @@ func resourceTencentCloudAPIGatewayUsagePlan() *schema.Resource { if value := int64(i.(int)); value == -1 { return } - return validateIntegerInRange(1, 99999999)(i, s) + return tccommon.ValidateIntegerInRange(1, 99999999)(i, s) }, Description: "Total number of requests allowed. Valid values: -1, [1,99999999]. The default value is -1, which indicates no limit.", }, @@ -51,7 +54,7 @@ func resourceTencentCloudAPIGatewayUsagePlan() *schema.Resource { if value := int64(i.(int)); value == -1 { return } - return validateIntegerInRange(1, 2000)(i, s) + return tccommon.ValidateIntegerInRange(1, 2000)(i, s) }, Description: "Limit of requests per second. Valid values: -1, [1,2000]. The default value is -1, which indicates no limit.", }, @@ -131,12 +134,12 @@ func resourceTencentCloudAPIGatewayUsagePlan() *schema.Resource { } func resourceTencentCloudAPIGatewayUsagePlanCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_usage_plan.create")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_usage_plan.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} usagePlanName = d.Get("usage_plan_name").(string) maxRequestNum = int64(d.Get("max_request_num").(int)) maxRequestNumPreSec = int64(d.Get("max_request_num_pre_sec").(int)) @@ -155,10 +158,10 @@ func resourceTencentCloudAPIGatewayUsagePlanCreate(d *schema.ResourceData, meta d.SetId(usagePlanId) //wait usage plan create ok - if outErr := resource.Retry(readRetryTimeout, func() *resource.RetryError { + if outErr := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, inErr := apiGatewayService.DescribeUsagePlan(ctx, usagePlanId) if inErr != nil { - return retryError(inErr, InternalError) + return tccommon.RetryError(inErr, tccommon.InternalError) } if has { return nil @@ -173,13 +176,13 @@ func resourceTencentCloudAPIGatewayUsagePlanCreate(d *schema.ResourceData, meta } func resourceTencentCloudAPIGatewayUsagePlanRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_usage_plan.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_usage_plan.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} usagePlanId = d.Id() info apigateway.UsagePlanInfo attachList []*apigateway.UsagePlanEnvironment @@ -187,10 +190,10 @@ func resourceTencentCloudAPIGatewayUsagePlanRead(d *schema.ResourceData, meta in has bool ) - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { info, has, err = apiGatewayService.DescribeUsagePlan(ctx, usagePlanId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -203,10 +206,10 @@ func resourceTencentCloudAPIGatewayUsagePlanRead(d *schema.ResourceData, meta in //service attach and API for _, bindType := range API_GATEWAY_TYPES { - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { list, inErr := apiGatewayService.DescribeUsagePlanEnvironments(ctx, usagePlanId, bindType) if inErr != nil { - return retryError(inErr, InternalError) + return tccommon.RetryError(inErr, tccommon.InternalError) } attachList = append(attachList, list...) return nil @@ -248,13 +251,13 @@ func resourceTencentCloudAPIGatewayUsagePlanRead(d *schema.ResourceData, meta in } func resourceTencentCloudAPIGatewayUsagePlanUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_usage_plan.update")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_usage_plan.update")() var ( - logId = getLogId(contextNil) + logId = tccommon.GetLogId(tccommon.ContextNil) usagePlanId = d.Id() - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} usagePlanName = d.Get("usage_plan_name").(string) maxRequestNum = int64(d.Get("max_request_num").(int)) maxRequestNumPreSec = int64(d.Get("max_request_num_pre_sec").(int)) @@ -269,7 +272,7 @@ func resourceTencentCloudAPIGatewayUsagePlanUpdate(d *schema.ResourceData, meta if d.HasChange("usage_plan_name") || d.HasChange("usage_plan_desc") || d.HasChange("max_request_num") || d.HasChange("max_request_num_pre_sec") { - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { err = apiGatewayService.ModifyUsagePlan(ctx, usagePlanId, usagePlanName, @@ -278,7 +281,7 @@ func resourceTencentCloudAPIGatewayUsagePlanUpdate(d *schema.ResourceData, meta maxRequestNumPreSec) if nil != err { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -291,19 +294,19 @@ func resourceTencentCloudAPIGatewayUsagePlanUpdate(d *schema.ResourceData, meta } func resourceTencentCloudAPIGatewayUsagePlanDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_usage_plan.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_usage_plan.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} usagePlanId = d.Id() ) - return resource.Retry(writeRetryTimeout, func() *resource.RetryError { + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := apiGatewayService.DeleteUsagePlan(ctx, usagePlanId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }) diff --git a/tencentcloud/resource_tc_api_gateway_usage_plan_attachment.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_usage_plan_attachment.go similarity index 76% rename from tencentcloud/resource_tc_api_gateway_usage_plan_attachment.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_usage_plan_attachment.go index 9b8700ee47..77176b8cc9 100644 --- a/tencentcloud/resource_tc_api_gateway_usage_plan_attachment.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_usage_plan_attachment.go @@ -1,16 +1,18 @@ -package tencentcloud +package apigateway import ( "context" "fmt" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" ) -func resourceTencentCloudAPIGatewayUsagePlanAttachment() *schema.Resource { +func ResourceTencentCloudAPIGatewayUsagePlanAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAPIGatewayUsagePlanAttachmentCreate, Read: resourceTencentCloudAPIGatewayUsagePlanAttachmentRead, @@ -36,7 +38,7 @@ func resourceTencentCloudAPIGatewayUsagePlanAttachment() *schema.Resource { Type: schema.TypeString, Required: true, ForceNew: true, - ValidateFunc: validateAllowedStringValue(API_GATEWAY_SERVICE_ENVS), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_SERVICE_ENVS), Description: "The environment to be bound. Valid values: `test`, `prepub`, `release`.", }, "bind_type": { @@ -44,7 +46,7 @@ func resourceTencentCloudAPIGatewayUsagePlanAttachment() *schema.Resource { Optional: true, ForceNew: true, Default: API_GATEWAY_TYPE_SERVICE, - ValidateFunc: validateAllowedStringValue(API_GATEWAY_TYPES), + ValidateFunc: tccommon.ValidateAllowedStringValue(API_GATEWAY_TYPES), Description: "Binding type. Valid values: `API`, `SERVICE`. Default value is `SERVICE`.", }, "api_id": { @@ -65,12 +67,12 @@ func resourceTencentCloudAPIGatewayUsagePlanAttachment() *schema.Resource { } func resourceTencentCloudAPIGatewayUsagePlanAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_usage_plan_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_usage_plan_attachment.create")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} usagePlanId = d.Get("usage_plan_id").(string) serviceId = d.Get("service_id").(string) environment = d.Get("environment").(string) @@ -124,24 +126,24 @@ func resourceTencentCloudAPIGatewayUsagePlanAttachmentCreate(d *schema.ResourceD } } - accessKeysStr := strings.Join(accessKeys, COMMA_SP) - d.SetId(strings.Join([]string{usagePlanId, serviceId, environment, bindType, apiId, accessKeysStr}, FILED_SP)) + accessKeysStr := strings.Join(accessKeys, tccommon.COMMA_SP) + d.SetId(strings.Join([]string{usagePlanId, serviceId, environment, bindType, apiId, accessKeysStr}, tccommon.FILED_SP)) return resourceTencentCloudAPIGatewayUsagePlanAttachmentRead(d, meta) } func resourceTencentCloudAPIGatewayUsagePlanAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_usage_plan_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_usage_plan_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() err error ) - ids := strings.Split(id, FILED_SP) + ids := strings.Split(id, tccommon.FILED_SP) if len(ids) != 6 { return fmt.Errorf("id is broken, id is %s", id) } @@ -174,20 +176,20 @@ func resourceTencentCloudAPIGatewayUsagePlanAttachmentRead(d *schema.ResourceDat plans := make([]*apigateway.ApiUsagePlan, 0) if bindType == API_GATEWAY_TYPE_API { - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { plans, err = apiGatewayService.DescribeApiUsagePlan(ctx, serviceId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { return err } } else { - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { plans, err = apiGatewayService.DescribeServiceUsagePlan(ctx, serviceId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -218,10 +220,10 @@ func resourceTencentCloudAPIGatewayUsagePlanAttachmentRead(d *schema.ResourceDat if bindType == API_GATEWAY_TYPE_API && apiId != "" && accessKeysStr != "" { var accessKeyList []*apigateway.UsagePlanBindSecret - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { accessKeyList, err = apiGatewayService.DescribeApiUsagePlanSecretIds(ctx, usagePlanId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil @@ -242,17 +244,17 @@ func resourceTencentCloudAPIGatewayUsagePlanAttachmentRead(d *schema.ResourceDat } func resourceTencentCloudAPIGatewayUsagePlanAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_api_gateway_usage_plan_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_api_gateway_usage_plan_attachment.delete")() var ( - logId = getLogId(contextNil) - ctx = context.WithValue(context.TODO(), logIdKey, logId) - apiGatewayService = APIGatewayService{client: meta.(*TencentCloudClient).apiV3Conn} + logId = tccommon.GetLogId(tccommon.ContextNil) + ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + apiGatewayService = APIGatewayService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} id = d.Id() err error ) - ids := strings.Split(id, FILED_SP) + ids := strings.Split(id, tccommon.FILED_SP) if len(ids) != 6 { return fmt.Errorf("id is broken, id is %s", id) } @@ -275,7 +277,7 @@ func resourceTencentCloudAPIGatewayUsagePlanAttachmentDelete(d *schema.ResourceD if bindType == API_GATEWAY_TYPE_API && apiId != "" && accessKeysStr != "" { // UnBindSecretIds - accessKeyList := strings.Split(accessKeysStr, COMMA_SP) + accessKeyList := strings.Split(accessKeysStr, tccommon.COMMA_SP) if err = apiGatewayService.UnBindSecretIds(ctx, usagePlanId, accessKeyList); err != nil { return err } @@ -294,10 +296,10 @@ func checkUsagePlan(ctx context.Context, api APIGatewayService, usagePlanId stri err error has bool ) - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = api.DescribeUsagePlan(ctx, usagePlanId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -316,10 +318,10 @@ func checkService(ctx context.Context, api APIGatewayService, serviceId string) err error has bool ) - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { _, has, err = api.DescribeService(ctx, serviceId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -339,10 +341,10 @@ func checkApiAuthType(ctx context.Context, api APIGatewayService, serviceId, api err error has bool ) - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { res, has, err = api.DescribeApi(ctx, serviceId, apiId) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil diff --git a/tencentcloud/resource_tc_api_gateway_usage_plan_attachment_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_usage_plan_attachment_test.go similarity index 84% rename from tencentcloud/resource_tc_api_gateway_usage_plan_attachment_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_usage_plan_attachment_test.go index c577927125..2c78754c9b 100644 --- a/tencentcloud/resource_tc_api_gateway_usage_plan_attachment_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_usage_plan_attachment_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package apigateway_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcapigateway "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" + "context" "fmt" "strings" @@ -18,8 +22,8 @@ var testAPIGatewayUsagePlanAttachmentResourceKey = testAPIGatewayUsagePlanAttach func TestAccTencentCloudAPIGateWayUsagePlanAttachmentResource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayUsagePlanAttachmentDestroy, Steps: []resource.TestStep{ { @@ -42,7 +46,7 @@ func TestAccTencentCloudAPIGateWayUsagePlanAttachmentResource(t *testing.T) { } func base(ctx context.Context, rs *terraform.ResourceState) (plans []*apigateway.ApiUsagePlan, err error) { - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) if len(ids) != 6 { return nil, fmt.Errorf("id is broken, id is %s", rs.Primary.ID) } @@ -61,11 +65,11 @@ func base(ctx context.Context, rs *terraform.ResourceState) (plans []*apigateway if usagePlanId == "" || serviceId == "" || environment == "" || bindType == "" { return nil, fmt.Errorf("id is broken, id is %s", rs.Primary.ID) } - if bindType == API_GATEWAY_TYPE_API && apiId == "" { + if bindType == svcapigateway.API_GATEWAY_TYPE_API && apiId == "" { return nil, fmt.Errorf("id is broken, id is %s", rs.Primary.ID) } - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, outErr = service.DescribeUsagePlan(ctx, usagePlanId) if outErr != nil { @@ -89,7 +93,7 @@ func base(ctx context.Context, rs *terraform.ResourceState) (plans []*apigateway return nil, nil } - if bindType == API_GATEWAY_TYPE_API { + if bindType == svcapigateway.API_GATEWAY_TYPE_API { plans, outErr = service.DescribeApiUsagePlan(ctx, serviceId) if outErr != nil { plans, outErr = service.DescribeApiUsagePlan(ctx, serviceId) @@ -115,15 +119,15 @@ func testAccCheckAPIGatewayUsagePlanAttachmentDestroy(s *terraform.State) error if rs.Type != testAPIGatewayUsagePlanAttachmentResourceName { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) plans, err := base(ctx, rs) if err != nil { return err } - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) var ( usagePlanId = ids[0] environment = ids[2] @@ -134,7 +138,7 @@ func testAccCheckAPIGatewayUsagePlanAttachmentDestroy(s *terraform.State) error for _, plan := range plans { if *plan.UsagePlanId == usagePlanId && *plan.Environment == environment { - if bindType == API_GATEWAY_TYPE_API { + if bindType == svcapigateway.API_GATEWAY_TYPE_API { if plan.ApiId != nil && *plan.ApiId == apiId { return fmt.Errorf("attachment %s still exist on server", rs.Primary.ID) } @@ -155,15 +159,15 @@ func testAccCheckAPIGatewayUsagePlanAttachmentExists(n string) resource.TestChec if !ok { return fmt.Errorf("resource %s is not found", n) } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) plans, err := base(ctx, rs) if err != nil { return err } - ids := strings.Split(rs.Primary.ID, FILED_SP) + ids := strings.Split(rs.Primary.ID, tccommon.FILED_SP) var ( usagePlanId = ids[0] environment = ids[2] @@ -173,7 +177,7 @@ func testAccCheckAPIGatewayUsagePlanAttachmentExists(n string) resource.TestChec for _, plan := range plans { if *plan.UsagePlanId == usagePlanId && *plan.Environment == environment { - if bindType == API_GATEWAY_TYPE_API { + if bindType == svcapigateway.API_GATEWAY_TYPE_API { if plan.ApiId != nil && *plan.ApiId == apiId { return nil } diff --git a/tencentcloud/resource_tc_api_gateway_usage_plan_test.go b/tencentcloud/services/apigateway/resource_tc_api_gateway_usage_plan_test.go similarity index 81% rename from tencentcloud/resource_tc_api_gateway_usage_plan_test.go rename to tencentcloud/services/apigateway/resource_tc_api_gateway_usage_plan_test.go index 6425e80412..b6703da6f5 100644 --- a/tencentcloud/resource_tc_api_gateway_usage_plan_test.go +++ b/tencentcloud/services/apigateway/resource_tc_api_gateway_usage_plan_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package apigateway_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcapigateway "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" + "context" "fmt" "testing" @@ -18,8 +22,8 @@ var ( func TestAccTencentCloudAPIGateWayUsagePlanResource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAPIGatewayUsagePlanDestroy, Steps: []resource.TestStep{ { @@ -59,10 +63,10 @@ func testAccCheckAPIGatewayUsagePlanDestroy(s *terraform.State) error { if rs.Type != testAPIGatewayUsagePlanResourceName { continue } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeUsagePlan(ctx, rs.Primary.ID) if err != nil { @@ -86,10 +90,10 @@ func testAccCheckAPIGatewayUsagePlanExists(n string) resource.TestCheckFunc { if !ok { return fmt.Errorf("resource %s is not found", n) } - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := APIGatewayService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + service := svcapigateway.NewAPIGatewayService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := service.DescribeUsagePlan(ctx, rs.Primary.ID) if err != nil { diff --git a/tencentcloud/service_tencentcloud_api_gateway.go b/tencentcloud/services/apigateway/service_tencentcloud_api_gateway.go similarity index 96% rename from tencentcloud/service_tencentcloud_api_gateway.go rename to tencentcloud/services/apigateway/service_tencentcloud_api_gateway.go index 8780408e37..647203840e 100644 --- a/tencentcloud/service_tencentcloud_api_gateway.go +++ b/tencentcloud/services/apigateway/service_tencentcloud_api_gateway.go @@ -1,4 +1,4 @@ -package tencentcloud +package apigateway import ( "context" @@ -6,14 +6,21 @@ import ( "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" apigateway "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apigateway/v20180808" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) +func NewAPIGatewayService(client *connectivity.TencentCloudClient) APIGatewayService { + return APIGatewayService{client: client} +} + type APIGatewayService struct { client *connectivity.TencentCloudClient } @@ -157,7 +164,7 @@ func (me *APIGatewayService) DeleteApiKey(ctx context.Context, accessKeyId strin func (me *APIGatewayService) CreateUsagePlan(ctx context.Context, usagePlanName string, usagePlanDesc *string, maxRequestNum, maxRequestNumPreSec int64) (usagePlanId string, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := apigateway.NewCreateUsagePlanRequest() request.UsagePlanName = &usagePlanName @@ -167,13 +174,13 @@ func (me *APIGatewayService) CreateUsagePlan(ctx context.Context, usagePlanName request.UsagePlanDesc = usagePlanDesc } - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err := me.client.UseAPIGatewayClient().CreateUsagePlan(request) if err != nil { log.Printf("[CRITAL]%s API[%s] fail, reason:%s", logId, request.GetAction(), err.Error()) - return retryError(err) + return tccommon.RetryError(err) } if response.Response.Result == nil { return resource.NonRetryableError(fmt.Errorf("TencentCloud SDK %s return empty response", request.GetAction())) @@ -757,7 +764,7 @@ func (me *APIGatewayService) DescribeApiUsagePlanSecretIds(ctx context.Context, func (me *APIGatewayService) BindEnvironment(ctx context.Context, serviceId, environment, bindType, usagePlanId, apiId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := apigateway.NewBindEnvironmentRequest() request.ServiceId = &serviceId request.UsagePlanIds = []*string{&usagePlanId} @@ -768,13 +775,13 @@ func (me *APIGatewayService) BindEnvironment(ctx context.Context, request.ApiIds = []*string{&apiId} } - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err := me.client.UseAPIGatewayClient().BindEnvironment(request) if err != nil { log.Printf("[CRITAL]%s API[%s] fail, reason:%s", logId, request.GetAction(), err.Error()) - return retryError(err) + return tccommon.RetryError(err) } if response.Response.Result == nil { @@ -792,7 +799,7 @@ func (me *APIGatewayService) BindEnvironment(ctx context.Context, } func (me *APIGatewayService) UnBindSecretIds(ctx context.Context, usagePlanId string, accessKeyList []string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := apigateway.NewUnBindSecretIdsRequest() request.UsagePlanId = &usagePlanId @@ -831,12 +838,12 @@ func (me *APIGatewayService) UnBindEnvironment(ctx context.Context, request.ApiIds = []*string{&apiId} } - errRet = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + errRet = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, errRet := me.client.UseAPIGatewayClient().UnBindEnvironment(request) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } if response.Response.Result == nil { @@ -1001,7 +1008,7 @@ func (me *APIGatewayService) DescribeApisStatus(ctx context.Context, } } -//limit & domain +// limit & domain func (me *APIGatewayService) DescribeServiceEnvironmentStrategyList(ctx context.Context, serviceId string) (environmentList []*apigateway.ServiceEnvironmentStrategy, errRet error) { var ( @@ -1022,11 +1029,11 @@ func (me *APIGatewayService) DescribeServiceEnvironmentStrategyList(ctx context. for { request.Limit = &limit request.Offset = &offset - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseAPIGatewayClient().DescribeServiceEnvironmentStrategy(request) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -1083,11 +1090,11 @@ func (me *APIGatewayService) DescribeApiEnvironmentStrategyList(ctx context.Cont for { request.Limit = &limit request.Offset = &offset - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseAPIGatewayClient().DescribeApiEnvironmentStrategy(request) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -1129,11 +1136,11 @@ func (me *APIGatewayService) ModifyApiEnvironmentStrategy(ctx context.Context, request.EnvironmentName = &environmentName request.ApiIds = append(request.ApiIds, helper.Strings(apiIDs)...) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseAPIGatewayClient().ModifyApiEnvironmentStrategy(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -1167,11 +1174,11 @@ func (me *APIGatewayService) ModifyServiceEnvironmentStrategy(ctx context.Contex request.Strategy = &strategy request.EnvironmentNames = append(request.EnvironmentNames, helper.Strings(environmentName)...) - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseAPIGatewayClient().ModifyServiceEnvironmentStrategy(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -1218,7 +1225,7 @@ func (me *APIGatewayService) BindSubDomainService(ctx context.Context, request.PathMappingSet = append(request.PathMappingSet, pathTmp) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) _, err = me.client.UseAPIGatewayClient().BindSubDomain(request) if err != nil { @@ -1229,7 +1236,7 @@ func (me *APIGatewayService) BindSubDomainService(ctx context.Context, return resource.NonRetryableError(ee) } } - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -1254,11 +1261,11 @@ func (me *APIGatewayService) DescribeServiceSubDomainsService(ctx context.Contex for { request.Limit = &limit request.Offset = &offset - err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseAPIGatewayClient().DescribeServiceSubDomains(request) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }) @@ -1290,11 +1297,11 @@ func (me *APIGatewayService) DescribeServiceSubDomainMappings(ctx context.Contex request.ServiceId = &serviceId request.SubDomain = &subDomain - if err = resource.Retry(readRetryTimeout, func() *resource.RetryError { + if err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseAPIGatewayClient().DescribeServiceSubDomainMappings(request) if err != nil { - return retryError(err, InternalError) + return tccommon.RetryError(err, tccommon.InternalError) } return nil }); err != nil { @@ -1341,11 +1348,11 @@ func (me *APIGatewayService) ModifySubDomainService(ctx context.Context, request.PathMappingSet = append(request.PathMappingSet, pathTmp) } - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseAPIGatewayClient().ModifySubDomain(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -1376,11 +1383,11 @@ func (me *APIGatewayService) UnBindSubDomainService(ctx context.Context, request.ServiceId = &serviceId request.SubDomain = &subDomain - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseAPIGatewayClient().UnBindSubDomain(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } return nil }) @@ -1615,11 +1622,11 @@ func (me *APIGatewayService) ReleaseService(ctx context.Context, request.EnvironmentName = &environmentName request.ReleaseDesc = &releaseDesc - err = resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err = me.client.UseAPIGatewayClient().ReleaseService(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if response == nil || response.Response.Result == nil || response.Response.Result.ReleaseVersion == nil { return resource.NonRetryableError(fmt.Errorf("ReleaseService response is nil")) @@ -1669,7 +1676,7 @@ func (me *APIGatewayService) DescribeServiceEnvironmentReleaseHistory(ctx contex } func (me *APIGatewayService) DescribeApiGatewayPluginById(ctx context.Context, pluginId string) (plugin *apigateway.Plugin, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := apigateway.NewDescribePluginsRequest() request.PluginIds = []*string{&pluginId} @@ -1698,7 +1705,7 @@ func (me *APIGatewayService) DescribeApiGatewayPluginById(ctx context.Context, p } func (me *APIGatewayService) DeleteApiGatewayPluginById(ctx context.Context, pluginId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := apigateway.NewDeletePluginRequest() request.PluginId = &pluginId @@ -1722,7 +1729,7 @@ func (me *APIGatewayService) DeleteApiGatewayPluginById(ctx context.Context, plu } func (me *APIGatewayService) DescribeApiGatewayPluginAttachmentById(ctx context.Context, pluginId string, serviceId string, environmentName string, apiId string) (pluginAttachment *apigateway.AttachedApiInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := apigateway.NewDescribePluginApisRequest() request.PluginId = &pluginId @@ -1756,7 +1763,7 @@ func (me *APIGatewayService) DescribeApiGatewayPluginAttachmentById(ctx context. } func (me *APIGatewayService) DeleteApiGatewayPluginAttachmentById(ctx context.Context, pluginId string, serviceId string, environmentName string, apiId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := apigateway.NewDetachPluginRequest() request.PluginId = &pluginId @@ -1784,7 +1791,7 @@ func (me *APIGatewayService) DeleteApiGatewayPluginAttachmentById(ctx context.Co func (me *APIGatewayService) DescribeApiDoc(ctx context.Context, apiDocId string) (apiDoc *apigateway.APIDocInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = apigateway.NewDescribeAPIDocDetailRequest() ) @@ -1817,7 +1824,7 @@ func (me *APIGatewayService) DescribeApiDoc(ctx context.Context, apiDocId string func (me *APIGatewayService) DescribeApiDocList(ctx context.Context) (apiDoc []*apigateway.APIDoc, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = apigateway.NewDescribeAPIDocsRequest() ) @@ -1861,7 +1868,7 @@ func (me *APIGatewayService) DescribeApiDocList(ctx context.Context) (apiDoc []* } func (me *APIGatewayService) DeleteAPIGatewayAPIDocById(ctx context.Context, apiDocId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := apigateway.NewDeleteAPIDocRequest() request.ApiDocId = &apiDocId @@ -1886,7 +1893,7 @@ func (me *APIGatewayService) DeleteAPIGatewayAPIDocById(ctx context.Context, api func (me *APIGatewayService) DescribeApiApp(ctx context.Context, apiAppId string) (apiDoc *apigateway.ApiAppInfos, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = apigateway.NewDescribeApiAppsStatusRequest() ) @@ -1925,7 +1932,7 @@ func (me *APIGatewayService) DescribeApiApp(ctx context.Context, apiAppId string func (me *APIGatewayService) DescribeApiAppList(ctx context.Context, apiAppId, apiAppName string) (apiApp []*apigateway.ApiAppInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = apigateway.NewDescribeApiAppsStatusRequest() ) @@ -1983,7 +1990,7 @@ func (me *APIGatewayService) DescribeApiAppList(ctx context.Context, apiAppId, a } func (me *APIGatewayService) DeleteAPIGatewayAPIAppById(ctx context.Context, apiAppId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := apigateway.NewDeleteApiAppRequest() request.ApiAppId = &apiAppId @@ -2007,7 +2014,7 @@ func (me *APIGatewayService) DeleteAPIGatewayAPIAppById(ctx context.Context, api } func (me *APIGatewayService) DescribeAPIGatewayApiAppAttachmentById(ctx context.Context, apiAppId, environment, serviceId, apiId string) (apiAppAttachment *apigateway.ApiAppApiInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := apigateway.NewDescribeApiAppBindApisStatusRequest() request.ApiAppId = &apiAppId @@ -2050,7 +2057,7 @@ func (me *APIGatewayService) DescribeAPIGatewayApiAppAttachmentById(ctx context. } func (me *APIGatewayService) DeleteAPIGatewayApiAppAttachmentById(ctx context.Context, apiAppId, environment, serviceId, apiId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := apigateway.NewUnbindApiAppRequest() request.ApiAppId = &apiAppId @@ -2078,7 +2085,7 @@ func (me *APIGatewayService) DeleteAPIGatewayApiAppAttachmentById(ctx context.Co } func (me *APIGatewayService) DescribeApigatewayUpstreamById(ctx context.Context, upstreamId string) (upstreamInfo *apigateway.UpstreamInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := apigateway.NewDescribeUpstreamsRequest() request.Filters = []*apigateway.Filter{ @@ -2115,7 +2122,7 @@ func (me *APIGatewayService) DescribeApigatewayUpstreamById(ctx context.Context, } func (me *APIGatewayService) DeleteApigatewayUpstreamById(ctx context.Context, upstreamId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := apigateway.NewDeleteUpstreamRequest() request.UpstreamId = &upstreamId @@ -2141,7 +2148,7 @@ func (me *APIGatewayService) DeleteApigatewayUpstreamById(ctx context.Context, u func (me *APIGatewayService) DescribeAPIGatewayPluginByFilter(ctx context.Context, param map[string]interface{}) (plugin []*apigateway.AvailableApiInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = apigateway.NewDescribeAllPluginApisRequest() ) @@ -2196,7 +2203,7 @@ func (me *APIGatewayService) DescribeAPIGatewayPluginByFilter(ctx context.Contex func (me *APIGatewayService) DescribeAPIGatewayUpstreamByFilter(ctx context.Context, param map[string]interface{}) (upstream []*apigateway.BindApiInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = apigateway.NewDescribeUpstreamBindApisRequest() ) @@ -2248,7 +2255,7 @@ func (me *APIGatewayService) DescribeAPIGatewayUpstreamByFilter(ctx context.Cont func (me *APIGatewayService) DescribeAPIGatewayApiUsagePlanByFilter(ctx context.Context, param map[string]interface{}) (ApiUsagePlan []*apigateway.ApiUsagePlan, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = apigateway.NewDescribeApiUsagePlanRequest() ) @@ -2299,7 +2306,7 @@ func (me *APIGatewayService) DescribeAPIGatewayApiUsagePlanByFilter(ctx context. func (me *APIGatewayService) DescribeAPIGatewayApiAppServiceByFilter(ctx context.Context, param map[string]interface{}) (apiAppService *apigateway.DescribeServiceForApiAppResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = apigateway.NewDescribeServiceForApiAppRequest() ) @@ -2339,7 +2346,7 @@ func (me *APIGatewayService) DescribeAPIGatewayApiAppServiceByFilter(ctx context func (me *APIGatewayService) DescribeApiGatewayBindApiAppsStatusByFilter(ctx context.Context, param map[string]interface{}) (bindApiAppsStatus []*apigateway.ApiAppApiInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = apigateway.NewDescribeApiBindApiAppsStatusRequest() ) @@ -2397,7 +2404,7 @@ func (me *APIGatewayService) DescribeApiGatewayBindApiAppsStatusByFilter(ctx con func (me *APIGatewayService) DescribeApiGatewayApiAppApiByFilter(ctx context.Context, param map[string]interface{}) (apiAppApi *apigateway.ApiInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = apigateway.NewDescribeApiForApiAppRequest() ) @@ -2441,7 +2448,7 @@ func (me *APIGatewayService) DescribeApiGatewayApiAppApiByFilter(ctx context.Con func (me *APIGatewayService) DescribeApiGatewayApiPluginsByFilter(ctx context.Context, param map[string]interface{}) (ApiPlugins []*apigateway.AttachedPluginInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = apigateway.NewDescribePluginsByApiRequest() ) @@ -2498,7 +2505,7 @@ func (me *APIGatewayService) DescribeApiGatewayApiPluginsByFilter(ctx context.Co } func (me *APIGatewayService) DescribeApiGatewayImportOpenApiById(ctx context.Context, serviceId, apiId string) (importOpenApi *apigateway.ApiInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := apigateway.NewDescribeApiRequest() request.ServiceId = &serviceId @@ -2529,7 +2536,7 @@ func (me *APIGatewayService) DescribeApiGatewayImportOpenApiById(ctx context.Con } func (me *APIGatewayService) DeleteApiGatewayImportOpenApiById(ctx context.Context, serviceId, apiId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := apigateway.NewDeleteApiRequest() request.ServiceId = &serviceId @@ -2556,7 +2563,7 @@ func (me *APIGatewayService) DeleteApiGatewayImportOpenApiById(ctx context.Conte func (me *APIGatewayService) DescribeApiGatewayServiceReleaseVersionsByFilter(ctx context.Context, param map[string]interface{}) (versionList []*apigateway.DescribeServiceReleaseVersionResultVersionListInfo, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = apigateway.NewDescribeServiceReleaseVersionRequest() ) @@ -2606,7 +2613,7 @@ func (me *APIGatewayService) DescribeApiGatewayServiceReleaseVersionsByFilter(ct func (me *APIGatewayService) DescribeApiGatewayServiceEnvironmentListByFilter(ctx context.Context, param map[string]interface{}) (environmentList []*apigateway.Environment, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = apigateway.NewDescribeServiceEnvironmentListRequest() ) diff --git a/tencentcloud/services/apigateway/service_tencentcloud_tag.go b/tencentcloud/services/apigateway/service_tencentcloud_tag.go new file mode 100644 index 0000000000..1754b78261 --- /dev/null +++ b/tencentcloud/services/apigateway/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package apigateway + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 6d49b0cc0ee0bb63cbddf5fae21ab5871a208e61 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 16:29:39 +0800 Subject: [PATCH 28/31] refactor: migrate package tencentcloud/services/as --- tencentcloud/provider.go | 47 +- .../as}/data_source_tc_as_advices.go | 23 +- .../as}/data_source_tc_as_advices_test.go | 10 +- .../as}/data_source_tc_as_instances.go | 23 +- .../as}/data_source_tc_as_instances_test.go | 12 +- .../as}/data_source_tc_as_last_activity.go | 23 +- .../data_source_tc_as_last_activity_test.go | 10 +- .../as}/data_source_tc_as_limits.go | 23 +- .../as}/data_source_tc_as_limits_test.go | 10 +- .../as}/data_source_tc_as_scaling_configs.go | 17 +- .../data_source_tc_as_scaling_configs_test.go | 26 +- .../as}/data_source_tc_as_scaling_groups.go | 17 +- .../data_source_tc_as_scaling_groups_test.go | 16 +- .../as}/data_source_tc_as_scaling_policies.go | 17 +- ...data_source_tc_as_scaling_policies_test.go | 12 +- tencentcloud/services/as/extension_as.go | 180 ++++ tencentcloud/services/as/extension_cvm.go | 118 +++ tencentcloud/services/as/extension_tags.go | 3 + .../as}/resource_tc_as_attachment.go | 49 +- .../as}/resource_tc_as_attachment_test.go | 42 +- .../as}/resource_tc_as_complete_lifecycle.go | 27 +- .../resource_tc_as_complete_lifecycle_test.go | 8 +- .../resource_tc_as_execute_scaling_policy.go | 27 +- ...ource_tc_as_execute_scaling_policy_test.go | 8 +- .../as}/resource_tc_as_lifecycle_hook.go | 49 +- .../as}/resource_tc_as_lifecycle_hook_test.go | 24 +- .../as}/resource_tc_as_notification.go | 41 +- .../as}/resource_tc_as_protect_instances.go | 27 +- .../as}/resource_tc_as_remove_instances.go | 27 +- .../as}/resource_tc_as_scale_in_instances.go | 27 +- .../resource_tc_as_scale_in_instances_test.go | 8 +- .../as}/resource_tc_as_scale_out_instances.go | 27 +- ...resource_tc_as_scale_out_instances_test.go | 8 +- .../as}/resource_tc_as_scaling_config.go | 67 +- .../as}/resource_tc_as_scaling_config_test.go | 65 +- .../as}/resource_tc_as_scaling_group.go | 83 +- .../resource_tc_as_scaling_group_status.go | 42 +- ...esource_tc_as_scaling_group_status_test.go | 8 +- .../as}/resource_tc_as_scaling_group_test.go | 50 +- .../as}/resource_tc_as_scaling_policy.go | 53 +- .../as}/resource_tc_as_scaling_policy_test.go | 32 +- .../as}/resource_tc_as_schedule.go | 47 +- .../as}/resource_tc_as_schedule_test.go | 24 +- .../as}/resource_tc_as_start_instances.go | 33 +- .../as}/resource_tc_as_stop_instances.go | 33 +- .../services/as/service_tencentcloud_as.go | 775 ++++++++++++++++++ .../services/as/service_tencentcloud_tag.go | 415 ++++++++++ 47 files changed, 2153 insertions(+), 560 deletions(-) rename tencentcloud/{ => services/as}/data_source_tc_as_advices.go (86%) rename tencentcloud/{ => services/as}/data_source_tc_as_advices_test.go (59%) rename tencentcloud/{ => services/as}/data_source_tc_as_instances.go (91%) rename tencentcloud/{ => services/as}/data_source_tc_as_instances_test.go (84%) rename tencentcloud/{ => services/as}/data_source_tc_as_last_activity.go (96%) rename tencentcloud/{ => services/as}/data_source_tc_as_last_activity_test.go (60%) rename tencentcloud/{ => services/as}/data_source_tc_as_limits.go (80%) rename tencentcloud/{ => services/as}/data_source_tc_as_limits_test.go (57%) rename tencentcloud/{ => services/as}/data_source_tc_as_scaling_configs.go (93%) rename tencentcloud/{ => services/as}/data_source_tc_as_scaling_configs_test.go (90%) rename tencentcloud/{ => services/as}/data_source_tc_as_scaling_groups.go (94%) rename tencentcloud/{ => services/as}/data_source_tc_as_scaling_groups_test.go (96%) rename tencentcloud/{ => services/as}/data_source_tc_as_scaling_policies.go (90%) rename tencentcloud/{ => services/as}/data_source_tc_as_scaling_policies_test.go (95%) create mode 100644 tencentcloud/services/as/extension_as.go create mode 100644 tencentcloud/services/as/extension_cvm.go create mode 100644 tencentcloud/services/as/extension_tags.go rename tencentcloud/{ => services/as}/resource_tc_as_attachment.go (68%) rename tencentcloud/{ => services/as}/resource_tc_as_attachment_test.go (84%) rename tencentcloud/{ => services/as}/resource_tc_as_complete_lifecycle.go (76%) rename tencentcloud/{ => services/as}/resource_tc_as_complete_lifecycle_test.go (79%) rename tencentcloud/{ => services/as}/resource_tc_as_execute_scaling_policy.go (76%) rename tencentcloud/{ => services/as}/resource_tc_as_execute_scaling_policy_test.go (83%) rename tencentcloud/{ => services/as}/resource_tc_as_lifecycle_hook.go (82%) rename tencentcloud/{ => services/as}/resource_tc_as_lifecycle_hook_test.go (87%) rename tencentcloud/{ => services/as}/resource_tc_as_notification.go (78%) rename tencentcloud/{ => services/as}/resource_tc_as_protect_instances.go (75%) rename tencentcloud/{ => services/as}/resource_tc_as_remove_instances.go (73%) rename tencentcloud/{ => services/as}/resource_tc_as_scale_in_instances.go (71%) rename tencentcloud/{ => services/as}/resource_tc_as_scale_in_instances_test.go (81%) rename tencentcloud/{ => services/as}/resource_tc_as_scale_out_instances.go (72%) rename tencentcloud/{ => services/as}/resource_tc_as_scale_out_instances_test.go (82%) rename tencentcloud/{ => services/as}/resource_tc_as_scaling_config.go (92%) rename tencentcloud/{ => services/as}/resource_tc_as_scaling_config_test.go (87%) rename tencentcloud/{ => services/as}/resource_tc_as_scaling_group.go (89%) rename tencentcloud/{ => services/as}/resource_tc_as_scaling_group_status.go (70%) rename tencentcloud/{ => services/as}/resource_tc_as_scaling_group_status_test.go (82%) rename tencentcloud/{ => services/as}/resource_tc_as_scaling_group_test.go (86%) rename tencentcloud/{ => services/as}/resource_tc_as_scaling_policy.go (83%) rename tencentcloud/{ => services/as}/resource_tc_as_scaling_policy_test.go (86%) rename tencentcloud/{ => services/as}/resource_tc_as_schedule.go (81%) rename tencentcloud/{ => services/as}/resource_tc_as_schedule_test.go (87%) rename tencentcloud/{ => services/as}/resource_tc_as_start_instances.go (73%) rename tencentcloud/{ => services/as}/resource_tc_as_stop_instances.go (75%) create mode 100644 tencentcloud/services/as/service_tencentcloud_as.go create mode 100644 tencentcloud/services/as/service_tencentcloud_tag.go diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 60c57f6912..59538a83dc 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,6 +1,7 @@ package tencentcloud import ( + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/as" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" "encoding/json" "fmt" @@ -332,9 +333,9 @@ func Provider() *schema.Provider { "tencentcloud_redis_instance_zone_info": crs.DataSourceTencentCloudRedisInstanceZoneInfo(), "tencentcloud_redis_instance_task_list": crs.DataSourceTencentCloudRedisInstanceTaskList(), "tencentcloud_redis_instance_node_info": crs.DataSourceTencentCloudRedisInstanceNodeInfo(), - "tencentcloud_as_scaling_configs": dataSourceTencentCloudAsScalingConfigs(), - "tencentcloud_as_scaling_groups": dataSourceTencentCloudAsScalingGroups(), - "tencentcloud_as_scaling_policies": dataSourceTencentCloudAsScalingPolicies(), + "tencentcloud_as_scaling_configs": as.DataSourceTencentCloudAsScalingConfigs(), + "tencentcloud_as_scaling_groups": as.DataSourceTencentCloudAsScalingGroups(), + "tencentcloud_as_scaling_policies": as.DataSourceTencentCloudAsScalingPolicies(), "tencentcloud_cbs_storages": cbs.DataSourceTencentCloudCbsStorages(), "tencentcloud_cbs_storages_set": cbs.DataSourceTencentCloudCbsStoragesSet(), "tencentcloud_cbs_snapshots": cbs.DataSourceTencentCloudCbsSnapshots(), @@ -743,10 +744,10 @@ func Provider() *schema.Provider { "tencentcloud_tcmq_queue": dataSourceTencentCloudTcmqQueue(), "tencentcloud_tcmq_topic": dataSourceTencentCloudTcmqTopic(), "tencentcloud_tcmq_subscribe": dataSourceTencentCloudTcmqSubscribe(), - "tencentcloud_as_instances": dataSourceTencentCloudAsInstances(), - "tencentcloud_as_advices": dataSourceTencentCloudAsAdvices(), - "tencentcloud_as_limits": dataSourceTencentCloudAsLimits(), - "tencentcloud_as_last_activity": dataSourceTencentCloudAsLastActivity(), + "tencentcloud_as_instances": as.DataSourceTencentCloudAsInstances(), + "tencentcloud_as_advices": as.DataSourceTencentCloudAsAdvices(), + "tencentcloud_as_limits": as.DataSourceTencentCloudAsLimits(), + "tencentcloud_as_last_activity": as.DataSourceTencentCloudAsLastActivity(), "tencentcloud_cynosdb_accounts": cynosdb.DataSourceTencentCloudCynosdbAccounts(), "tencentcloud_cynosdb_cluster_instance_groups": cynosdb.DataSourceTencentCloudCynosdbClusterInstanceGroups(), "tencentcloud_cynosdb_cluster_params": cynosdb.DataSourceTencentCloudCynosdbClusterParams(), @@ -1124,22 +1125,22 @@ func Provider() *schema.Provider { "tencentcloud_redis_backup_operation": crs.ResourceTencentCloudRedisBackupOperation(), "tencentcloud_redis_security_group_attachment": crs.ResourceTencentCloudRedisSecurityGroupAttachment(), "tencentcloud_as_load_balancer": resourceTencentCloudAsLoadBalancer(), - "tencentcloud_as_scaling_config": resourceTencentCloudAsScalingConfig(), - "tencentcloud_as_scaling_group": resourceTencentCloudAsScalingGroup(), - "tencentcloud_as_scaling_group_status": resourceTencentCloudAsScalingGroupStatus(), - "tencentcloud_as_attachment": resourceTencentCloudAsAttachment(), - "tencentcloud_as_scaling_policy": resourceTencentCloudAsScalingPolicy(), - "tencentcloud_as_schedule": resourceTencentCloudAsSchedule(), - "tencentcloud_as_lifecycle_hook": resourceTencentCloudAsLifecycleHook(), - "tencentcloud_as_notification": resourceTencentCloudAsNotification(), - "tencentcloud_as_remove_instances": resourceTencentCloudAsRemoveInstances(), - "tencentcloud_as_protect_instances": resourceTencentCloudAsProtectInstances(), - "tencentcloud_as_start_instances": resourceTencentCloudAsStartInstances(), - "tencentcloud_as_stop_instances": resourceTencentCloudAsStopInstances(), - "tencentcloud_as_scale_in_instances": resourceTencentCloudAsScaleInInstances(), - "tencentcloud_as_scale_out_instances": resourceTencentCloudAsScaleOutInstances(), - "tencentcloud_as_execute_scaling_policy": resourceTencentCloudAsExecuteScalingPolicy(), - "tencentcloud_as_complete_lifecycle": resourceTencentCloudAsCompleteLifecycle(), + "tencentcloud_as_scaling_config": as.ResourceTencentCloudAsScalingConfig(), + "tencentcloud_as_scaling_group": as.ResourceTencentCloudAsScalingGroup(), + "tencentcloud_as_scaling_group_status": as.ResourceTencentCloudAsScalingGroupStatus(), + "tencentcloud_as_attachment": as.ResourceTencentCloudAsAttachment(), + "tencentcloud_as_scaling_policy": as.ResourceTencentCloudAsScalingPolicy(), + "tencentcloud_as_schedule": as.ResourceTencentCloudAsSchedule(), + "tencentcloud_as_lifecycle_hook": as.ResourceTencentCloudAsLifecycleHook(), + "tencentcloud_as_notification": as.ResourceTencentCloudAsNotification(), + "tencentcloud_as_remove_instances": as.ResourceTencentCloudAsRemoveInstances(), + "tencentcloud_as_protect_instances": as.ResourceTencentCloudAsProtectInstances(), + "tencentcloud_as_start_instances": as.ResourceTencentCloudAsStartInstances(), + "tencentcloud_as_stop_instances": as.ResourceTencentCloudAsStopInstances(), + "tencentcloud_as_scale_in_instances": as.ResourceTencentCloudAsScaleInInstances(), + "tencentcloud_as_scale_out_instances": as.ResourceTencentCloudAsScaleOutInstances(), + "tencentcloud_as_execute_scaling_policy": as.ResourceTencentCloudAsExecuteScalingPolicy(), + "tencentcloud_as_complete_lifecycle": as.ResourceTencentCloudAsCompleteLifecycle(), "tencentcloud_mongodb_instance": resourceTencentCloudMongodbInstance(), "tencentcloud_mongodb_sharding_instance": resourceTencentCloudMongodbShardingInstance(), "tencentcloud_mongodb_instance_account": resourceTencentCloudMongodbInstanceAccount(), diff --git a/tencentcloud/data_source_tc_as_advices.go b/tencentcloud/services/as/data_source_tc_as_advices.go similarity index 86% rename from tencentcloud/data_source_tc_as_advices.go rename to tencentcloud/services/as/data_source_tc_as_advices.go index 43fb9bb245..4eecf23061 100644 --- a/tencentcloud/data_source_tc_as_advices.go +++ b/tencentcloud/services/as/data_source_tc_as_advices.go @@ -1,15 +1,18 @@ -package tencentcloud +package as import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAsAdvices() *schema.Resource { +func DataSourceTencentCloudAsAdvices() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAsAdvicesRead, Schema: map[string]*schema.Schema{ @@ -76,12 +79,12 @@ func dataSourceTencentCloudAsAdvices() *schema.Resource { } func dataSourceTencentCloudAsAdvicesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_as_advices.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_as_advices.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("auto_scaling_group_ids"); ok { @@ -89,14 +92,14 @@ func dataSourceTencentCloudAsAdvicesRead(d *schema.ResourceData, meta interface{ paramMap["AutoScalingGroupIds"] = helper.InterfacesStringsPoint(autoScalingGroupIdsSet) } - service := AsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := AsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var autoScalingAdviceSet []*as.AutoScalingAdvice - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeAsAdvices(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } autoScalingAdviceSet = result return nil @@ -153,7 +156,7 @@ func dataSourceTencentCloudAsAdvicesRead(d *schema.ResourceData, meta interface{ d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_as_advices_test.go b/tencentcloud/services/as/data_source_tc_as_advices_test.go similarity index 59% rename from tencentcloud/data_source_tc_as_advices_test.go rename to tencentcloud/services/as/data_source_tc_as_advices_test.go index 63a8883057..de518509f5 100644 --- a/tencentcloud/data_source_tc_as_advices_test.go +++ b/tencentcloud/services/as/data_source_tc_as_advices_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package as_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudAsAdvicesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccAsAdvicesDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_as_advices.advices")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_as_advices.advices")), }, }, }) diff --git a/tencentcloud/data_source_tc_as_instances.go b/tencentcloud/services/as/data_source_tc_as_instances.go similarity index 91% rename from tencentcloud/data_source_tc_as_instances.go rename to tencentcloud/services/as/data_source_tc_as_instances.go index a63a4a9cdf..a0baf35629 100644 --- a/tencentcloud/data_source_tc_as_instances.go +++ b/tencentcloud/services/as/data_source_tc_as_instances.go @@ -1,15 +1,18 @@ -package tencentcloud +package as import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAsInstances() *schema.Resource { +func DataSourceTencentCloudAsInstances() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAsInstancesRead, Schema: map[string]*schema.Schema{ @@ -130,12 +133,12 @@ func dataSourceTencentCloudAsInstances() *schema.Resource { } func dataSourceTencentCloudAsInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_as_instances.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_as_instances.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("instance_ids"); ok { @@ -163,14 +166,14 @@ func dataSourceTencentCloudAsInstancesRead(d *schema.ResourceData, meta interfac paramMap["filters"] = tmpSet } - service := AsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := AsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var instanceList []*as.Instance - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeAsInstancesByFilter(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } instanceList = result return nil @@ -248,7 +251,7 @@ func dataSourceTencentCloudAsInstancesRead(d *schema.ResourceData, meta interfac d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_as_instances_test.go b/tencentcloud/services/as/data_source_tc_as_instances_test.go similarity index 84% rename from tencentcloud/data_source_tc_as_instances_test.go rename to tencentcloud/services/as/data_source_tc_as_instances_test.go index 29b6456190..d634d708f0 100644 --- a/tencentcloud/data_source_tc_as_instances_test.go +++ b/tencentcloud/services/as/data_source_tc_as_instances_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package as_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,14 +12,14 @@ func TestAccTencentCloudAsInstancesDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccAsInstancesDataSource_basic(), Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_as_instances.instances"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_as_instances.instances"), resource.TestCheckResourceAttrSet("data.tencentcloud_as_instances.instances", "instance_list.#"), ), }, @@ -26,7 +28,7 @@ func TestAccTencentCloudAsInstancesDataSource_basic(t *testing.T) { } func testAccAsInstancesDataSource_basic() string { - return defaultAsVariable + ` + return tcacctest.DefaultAsVariable + ` resource "tencentcloud_vpc" "vpc" { name = "tf-as-vpc" cidr_block = "10.2.0.0/16" diff --git a/tencentcloud/data_source_tc_as_last_activity.go b/tencentcloud/services/as/data_source_tc_as_last_activity.go similarity index 96% rename from tencentcloud/data_source_tc_as_last_activity.go rename to tencentcloud/services/as/data_source_tc_as_last_activity.go index 00c6a0aad2..b58ba14a84 100644 --- a/tencentcloud/data_source_tc_as_last_activity.go +++ b/tencentcloud/services/as/data_source_tc_as_last_activity.go @@ -1,15 +1,18 @@ -package tencentcloud +package as import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAsLastActivity() *schema.Resource { +func DataSourceTencentCloudAsLastActivity() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAsLastActivityRead, Schema: map[string]*schema.Schema{ @@ -243,12 +246,12 @@ func dataSourceTencentCloudAsLastActivity() *schema.Resource { } func dataSourceTencentCloudAsLastActivityRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_as_last_activity.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_as_last_activity.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) paramMap := make(map[string]interface{}) if v, ok := d.GetOk("auto_scaling_group_ids"); ok { @@ -256,14 +259,14 @@ func dataSourceTencentCloudAsLastActivityRead(d *schema.ResourceData, meta inter paramMap["AutoScalingGroupIds"] = helper.InterfacesStringsPoint(autoScalingGroupIdsSet) } - service := AsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := AsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var activitySet []*as.Activity - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeAsLastActivity(ctx, paramMap) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } activitySet = result return nil @@ -465,7 +468,7 @@ func dataSourceTencentCloudAsLastActivityRead(d *schema.ResourceData, meta inter d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), tmpList); e != nil { + if e := tccommon.WriteToFile(output.(string), tmpList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_as_last_activity_test.go b/tencentcloud/services/as/data_source_tc_as_last_activity_test.go similarity index 60% rename from tencentcloud/data_source_tc_as_last_activity_test.go rename to tencentcloud/services/as/data_source_tc_as_last_activity_test.go index b8f4c48e32..97c898dd25 100644 --- a/tencentcloud/data_source_tc_as_last_activity_test.go +++ b/tencentcloud/services/as/data_source_tc_as_last_activity_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package as_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudAsLastActivityDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccAsLastActivityDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_as_last_activity.last_activity")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_as_last_activity.last_activity")), }, }, }) diff --git a/tencentcloud/data_source_tc_as_limits.go b/tencentcloud/services/as/data_source_tc_as_limits.go similarity index 80% rename from tencentcloud/data_source_tc_as_limits.go rename to tencentcloud/services/as/data_source_tc_as_limits.go index 1da7414b92..6b6019312a 100644 --- a/tencentcloud/data_source_tc_as_limits.go +++ b/tencentcloud/services/as/data_source_tc_as_limits.go @@ -1,15 +1,18 @@ -package tencentcloud +package as import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAsLimits() *schema.Resource { +func DataSourceTencentCloudAsLimits() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAsLimitsRead, Schema: map[string]*schema.Schema{ @@ -47,21 +50,21 @@ func dataSourceTencentCloudAsLimits() *schema.Resource { } func dataSourceTencentCloudAsLimitsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_as_limits.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_as_limits.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := AsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} var limit *as.DescribeAccountLimitsResponseParams - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, e := service.DescribeAsLimits(ctx) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } limit = result return nil @@ -95,7 +98,7 @@ func dataSourceTencentCloudAsLimitsRead(d *schema.ResourceData, meta interface{} d.SetId(helper.DataResourceIdsHash(ids)) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), asLimitMap); e != nil { + if e := tccommon.WriteToFile(output.(string), asLimitMap); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_as_limits_test.go b/tencentcloud/services/as/data_source_tc_as_limits_test.go similarity index 57% rename from tencentcloud/data_source_tc_as_limits_test.go rename to tencentcloud/services/as/data_source_tc_as_limits_test.go index bfc8efc11c..409f3b9d27 100644 --- a/tencentcloud/data_source_tc_as_limits_test.go +++ b/tencentcloud/services/as/data_source_tc_as_limits_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package as_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,13 +12,13 @@ func TestAccTencentCloudAsLimitsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccAsLimitsDataSource, - Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_as_limits.limits")), + Check: resource.ComposeTestCheckFunc(tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_as_limits.limits")), }, }, }) diff --git a/tencentcloud/data_source_tc_as_scaling_configs.go b/tencentcloud/services/as/data_source_tc_as_scaling_configs.go similarity index 93% rename from tencentcloud/data_source_tc_as_scaling_configs.go rename to tencentcloud/services/as/data_source_tc_as_scaling_configs.go index 3ac0a920f4..700eabc88a 100644 --- a/tencentcloud/data_source_tc_as_scaling_configs.go +++ b/tencentcloud/services/as/data_source_tc_as_scaling_configs.go @@ -1,14 +1,17 @@ -package tencentcloud +package as import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAsScalingConfigs() *schema.Resource { +func DataSourceTencentCloudAsScalingConfigs() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAsScalingConfigRead, @@ -169,13 +172,13 @@ func dataSourceTencentCloudAsScalingConfigs() *schema.Resource { } func dataSourceTencentCloudAsScalingConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_as_scaling_configs.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_as_scaling_configs.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } configurationId := "" configurationName := "" @@ -228,7 +231,7 @@ func dataSourceTencentCloudAsScalingConfigRead(d *schema.ResourceData, meta inte output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err = writeToFile(output.(string), configurationList); err != nil { + if err = tccommon.WriteToFile(output.(string), configurationList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_as_scaling_configs_test.go b/tencentcloud/services/as/data_source_tc_as_scaling_configs_test.go similarity index 90% rename from tencentcloud/data_source_tc_as_scaling_configs_test.go rename to tencentcloud/services/as/data_source_tc_as_scaling_configs_test.go index a67d1ed010..04168565bf 100644 --- a/tencentcloud/data_source_tc_as_scaling_configs_test.go +++ b/tencentcloud/services/as/data_source_tc_as_scaling_configs_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package as_test import ( "fmt" @@ -6,6 +6,8 @@ import ( "regexp" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -15,8 +17,8 @@ var scalingConfigNameFullRE = regexp.MustCompile("tf-as-config-full") func TestAccTencentCloudAsScalingConfigsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAsScalingConfigDestroy, Steps: []resource.TestStep{ { @@ -26,13 +28,13 @@ func TestAccTencentCloudAsScalingConfigsDataSource_basic(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.#", "1"), resource.TestCheckResourceAttrSet("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.configuration_id"), resource.TestMatchResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.configuration_name", scalingConfigNameRE), - resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.image_id", defaultTkeOSImageId), + resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.image_id", tcacctest.DefaultTkeOSImageId), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.instance_types.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.instance_types.0", "SA1.SMALL1"), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs_name", "configuration_list.#", "1"), resource.TestCheckResourceAttrSet("data.tencentcloud_as_scaling_configs.scaling_configs_name", "configuration_list.0.configuration_id"), resource.TestMatchResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs_name", "configuration_list.0.configuration_name", scalingConfigNameRE), - resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs_name", "configuration_list.0.image_id", defaultTkeOSImageId), + resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs_name", "configuration_list.0.image_id", tcacctest.DefaultTkeOSImageId), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs_name", "configuration_list.0.instance_types.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs_name", "configuration_list.0.instance_types.0", "SA1.SMALL1"), ), @@ -43,8 +45,8 @@ func TestAccTencentCloudAsScalingConfigsDataSource_basic(t *testing.T) { func TestAccTencentCloudAsScalingConfigsDataSource_full(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAsScalingConfigDestroy, Steps: []resource.TestStep{ { @@ -54,7 +56,7 @@ func TestAccTencentCloudAsScalingConfigsDataSource_full(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.#", "1"), resource.TestMatchResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.configuration_name", scalingConfigNameFullRE), - resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.image_id", defaultTkeOSImageId), + resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.image_id", tcacctest.DefaultTkeOSImageId), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.instance_types.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.instance_types.0", "SA1.SMALL1"), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.project_id", "0"), @@ -63,7 +65,7 @@ func TestAccTencentCloudAsScalingConfigsDataSource_full(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.data_disk.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.data_disk.0.disk_type", "CLOUD_PREMIUM"), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.data_disk.0.disk_size", "50"), - resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.internet_charge_type", "TRAFFIC_POSTPAID_BY_HOUR"), + resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.internet_charge_type", "TRAFFIC_tcacctest.POSTPAID_BY_HOUR"), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.internet_max_bandwidth_out", "10"), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.public_ip_assigned", "true"), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.enhanced_security_service", "false"), @@ -91,7 +93,7 @@ data "tencentcloud_as_scaling_configs" "scaling_configs" { data "tencentcloud_as_scaling_configs" "scaling_configs_name" { configuration_name = tencentcloud_as_scaling_config.launch_configuration.configuration_name } -`, rand.Intn(1000), defaultTkeOSImageId) +`, rand.Intn(1000), tcacctest.DefaultTkeOSImageId) } func testAccAsScalingConfigsDataSource_full() string { @@ -109,7 +111,7 @@ resource "tencentcloud_as_scaling_config" "launch_configuration" { disk_size = 50 } - internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" + internet_charge_type = "TRAFFIC_tcacctest.POSTPAID_BY_HOUR" internet_max_bandwidth_out = 10 public_ip_assigned = true password = "test123#" @@ -126,5 +128,5 @@ resource "tencentcloud_as_scaling_config" "launch_configuration" { data "tencentcloud_as_scaling_configs" "scaling_configs" { configuration_id = tencentcloud_as_scaling_config.launch_configuration.id } -`, rand.Intn(1000), defaultTkeOSImageId) +`, rand.Intn(1000), tcacctest.DefaultTkeOSImageId) } diff --git a/tencentcloud/data_source_tc_as_scaling_groups.go b/tencentcloud/services/as/data_source_tc_as_scaling_groups.go similarity index 94% rename from tencentcloud/data_source_tc_as_scaling_groups.go rename to tencentcloud/services/as/data_source_tc_as_scaling_groups.go index 1e9eaa562f..efd4067956 100644 --- a/tencentcloud/data_source_tc_as_scaling_groups.go +++ b/tencentcloud/services/as/data_source_tc_as_scaling_groups.go @@ -1,14 +1,17 @@ -package tencentcloud +package as import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAsScalingGroups() *schema.Resource { +func DataSourceTencentCloudAsScalingGroups() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAsScalingGroupRead, @@ -196,13 +199,13 @@ func dataSourceTencentCloudAsScalingGroups() *schema.Resource { } func dataSourceTencentCloudAsScalingGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_as_scaling_groups.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_as_scaling_groups.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } scalingGroupId := "" @@ -284,7 +287,7 @@ func dataSourceTencentCloudAsScalingGroupRead(d *schema.ResourceData, meta inter output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err := writeToFile(output.(string), scalingGroupList); err != nil { + if err := tccommon.WriteToFile(output.(string), scalingGroupList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_as_scaling_groups_test.go b/tencentcloud/services/as/data_source_tc_as_scaling_groups_test.go similarity index 96% rename from tencentcloud/data_source_tc_as_scaling_groups_test.go rename to tencentcloud/services/as/data_source_tc_as_scaling_groups_test.go index da3aa557c3..c7d50cb6d9 100644 --- a/tencentcloud/data_source_tc_as_scaling_groups_test.go +++ b/tencentcloud/services/as/data_source_tc_as_scaling_groups_test.go @@ -1,17 +1,19 @@ -package tencentcloud +package as_test import ( "regexp" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudAsScalingGroupsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAsScalingGroupDestroy, Steps: []resource.TestStep{ { @@ -57,8 +59,8 @@ func TestAccTencentCloudAsScalingGroupsDataSource_basic(t *testing.T) { func TestAccTencentCloudAsScalingGroupsDataSource_full(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAsScalingGroupDestroy, Steps: []resource.TestStep{ { @@ -88,7 +90,7 @@ func TestAccTencentCloudAsScalingGroupsDataSource_full(t *testing.T) { // todo func testAccAsScalingGroupsDataSource_basic() string { - return defaultAsVariable + ` + return tcacctest.DefaultAsVariable + ` resource "tencentcloud_vpc" "vpc" { name = "tf-as-vpc" cidr_block = "10.2.0.0/16" @@ -135,7 +137,7 @@ data "tencentcloud_as_scaling_groups" "scaling_groups_tags" { } func testAccAsScalingGroupsDataSource_full() string { - return defaultAsVariable + ` + return tcacctest.DefaultAsVariable + ` resource "tencentcloud_vpc" "vpc" { name = "tf-as-vpc" cidr_block = "10.2.0.0/16" diff --git a/tencentcloud/data_source_tc_as_scaling_policies.go b/tencentcloud/services/as/data_source_tc_as_scaling_policies.go similarity index 90% rename from tencentcloud/data_source_tc_as_scaling_policies.go rename to tencentcloud/services/as/data_source_tc_as_scaling_policies.go index d22863f658..336227f5dd 100644 --- a/tencentcloud/data_source_tc_as_scaling_policies.go +++ b/tencentcloud/services/as/data_source_tc_as_scaling_policies.go @@ -1,14 +1,17 @@ -package tencentcloud +package as import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAsScalingPolicies() *schema.Resource { +func DataSourceTencentCloudAsScalingPolicies() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAsScalingPolicyRead, @@ -108,13 +111,13 @@ func dataSourceTencentCloudAsScalingPolicies() *schema.Resource { } func dataSourceTencentCloudAsScalingPolicyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_as_scaling_policies.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_as_scaling_policies.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } scalingPolicyId := "" scalingGroupId := "" @@ -161,7 +164,7 @@ func dataSourceTencentCloudAsScalingPolicyRead(d *schema.ResourceData, meta inte output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if err = writeToFile(output.(string), scalingPolicyList); err != nil { + if err = tccommon.WriteToFile(output.(string), scalingPolicyList); err != nil { return err } } diff --git a/tencentcloud/data_source_tc_as_scaling_policies_test.go b/tencentcloud/services/as/data_source_tc_as_scaling_policies_test.go similarity index 95% rename from tencentcloud/data_source_tc_as_scaling_policies_test.go rename to tencentcloud/services/as/data_source_tc_as_scaling_policies_test.go index 470a6e4472..4c138c3d79 100644 --- a/tencentcloud/data_source_tc_as_scaling_policies_test.go +++ b/tencentcloud/services/as/data_source_tc_as_scaling_policies_test.go @@ -1,15 +1,17 @@ -package tencentcloud +package as_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) func TestAccTencentCloudAsScalingPoliciesDataSource(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAsScalingPolicyDestroy, Steps: []resource.TestStep{ { @@ -47,9 +49,9 @@ func TestAccTencentCloudAsScalingPoliciesDataSource(t *testing.T) { }) } -//todo +// todo func testAccAsScalingPoliciesDataSource() string { - return defaultAsVariable + ` + return tcacctest.DefaultAsVariable + ` resource "tencentcloud_vpc" "vpc" { name = "tf-as-vpc" cidr_block = "10.2.0.0/16" diff --git a/tencentcloud/services/as/extension_as.go b/tencentcloud/services/as/extension_as.go new file mode 100644 index 0000000000..6de40ce67b --- /dev/null +++ b/tencentcloud/services/as/extension_as.go @@ -0,0 +1,180 @@ +package as + +const ( + SYSTEM_DISK_TYPE_LOCAL_BASIC = "LOCAL_BASIC" + SYSTEM_DISK_TYPE_LOCAL_SSD = "LOCAL_SSD" + SYSTEM_DISK_TYPE_CLOUD_BASIC = "CLOUD_BASIC" + SYSTEM_DISK_TYPE_CLOUD_PREMIUM = "CLOUD_PREMIUM" + SYSTEM_DISK_TYPE_CLOUD_SSD = "CLOUD_SSD" + SYSTEM_DISK_TYPE_CLOUD_HSSD = "CLOUD_HSSD" + SYSTEM_DISK_TYPE_CLOUD_BSSD = "CLOUD_BSSD" + SYSTEM_DISK_TYPE_CLOUD_TSSD = "CLOUD_TSSD" +) + +var SYSTEM_DISK_ALLOW_TYPE = []string{ + SYSTEM_DISK_TYPE_LOCAL_BASIC, + SYSTEM_DISK_TYPE_LOCAL_SSD, + SYSTEM_DISK_TYPE_CLOUD_BASIC, + SYSTEM_DISK_TYPE_CLOUD_PREMIUM, + SYSTEM_DISK_TYPE_CLOUD_SSD, + SYSTEM_DISK_TYPE_CLOUD_HSSD, + SYSTEM_DISK_TYPE_CLOUD_TSSD, + SYSTEM_DISK_TYPE_CLOUD_BSSD, +} + +const ( + INTERNET_CHARGE_TYPE_BANDWIDTH_PREPAID = "BANDWIDTH_PREPAID" + INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID_BY_HOUR = "TRAFFIC_POSTPAID_BY_HOUR" + INTERNET_CHARGE_TYPE_BANDWIDTH_POSTPAID_BY_HOUR = "BANDWIDTH_POSTPAID_BY_HOUR" + INTERNET_CHARGE_TYPE_BANDWIDTH_PACKAGE = "BANDWIDTH_PACKAGE" +) + +var INTERNET_CHARGE_ALLOW_TYPE = []string{ + INTERNET_CHARGE_TYPE_BANDWIDTH_PREPAID, + INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID_BY_HOUR, + INTERNET_CHARGE_TYPE_BANDWIDTH_POSTPAID_BY_HOUR, + INTERNET_CHARGE_TYPE_BANDWIDTH_PACKAGE, +} + +const ( + INSTANCE_CHARGE_TYPE_POSTPAID = "POSTPAID_BY_HOUR" + INSTANCE_CHARGE_TYPE_SPOTPAID = "SPOTPAID" + INSTANCE_CHARGE_TYPE_PREPAID = "PREPAID" +) + +const ( + SCALING_GROUP_TERMINATION_POLICY_NEWEST_INSTANCE = "NEWEST_INSTANCE" + SCALING_GROUP_TERMINATION_POLICY_OLDEST_INSTANCE = "OLDEST_INSTANCE" +) + +const ( + SCALING_GROUP_RETRY_POLICY_IMMEDIATE_RETRY = "IMMEDIATE_RETRY" + SCALING_GROUP_RETRY_POLICY_NO_RETRY = "NO_RETRY" + SCALING_GROUP_RETRY_POLICY_INCREMENTAL_INTERVALS = "INCREMENTAL_INTERVALS" +) + +const ( + SCALING_DISK_TYPE_POLICY_ORIGINAL = "ORIGINAL" + SCALING_DISK_TYPE_POLICY_AUTOMATIC = "AUTOMATIC" +) + +var SCALING_DISK_TYPE_ALLOW_POLICY = []string{ + SCALING_DISK_TYPE_POLICY_ORIGINAL, + SCALING_DISK_TYPE_POLICY_AUTOMATIC, +} + +const ( + INSTANCE_NAME_ORIGINAL = "ORIGINAL" + INSTANCE_NAME_UNIQUE = "UNIQUE" +) + +var INSTANCE_NAME_STYLE = []string{ + INSTANCE_NAME_ORIGINAL, + INSTANCE_NAME_UNIQUE, +} + +const ( + SCALING_GROUP_ADJUSTMENT_TYPE_CHANGE_IN_CAPACITY = "CHANGE_IN_CAPACITY" + SCALING_GROUP_ADJUSTMENT_TYPE_EXACT_CAPACITY = "EXACT_CAPACITY" + SCALING_GROUP_ADJUSTMENT_TYPE_PERCENT_CHANGE_IN_CAPACITY = "PERCENT_CHANGE_IN_CAPACITY" +) + +var SCALING_GROUP_ADJUSTMENT_TYPE = []string{ + SCALING_GROUP_ADJUSTMENT_TYPE_CHANGE_IN_CAPACITY, + SCALING_GROUP_ADJUSTMENT_TYPE_EXACT_CAPACITY, + SCALING_GROUP_ADJUSTMENT_TYPE_PERCENT_CHANGE_IN_CAPACITY, +} + +const ( + SCALING_GROUP_COMPARISON_OPERATOR_GREATER = "GREATER_THAN" + SCALING_GROUP_COMPARISON_OPERATOR_GREATER_EQUAL = "GREATER_THAN_OR_EQUAL_TO" + SCALING_GROUP_COMPARISON_OPERATOR_LESS = "LESS_THAN" + SCALING_GROUP_COMPARISON_OPERATOR_LESS_EQUAL = "LESS_THAN_OR_EQUAL_TO" + SCALING_GROUP_COMPARISON_OPERATOR_EQUAL = "EQUAL_TO" + SCALING_GROUP_COMPARISON_OPERATOR_NOT_EQUAL = "NOT_EQUAL_TO" +) + +var SCALING_GROUP_COMPARISON_OPERATOR = []string{ + SCALING_GROUP_COMPARISON_OPERATOR_GREATER, + SCALING_GROUP_COMPARISON_OPERATOR_GREATER_EQUAL, + SCALING_GROUP_COMPARISON_OPERATOR_LESS, + SCALING_GROUP_COMPARISON_OPERATOR_LESS_EQUAL, + SCALING_GROUP_COMPARISON_OPERATOR_EQUAL, + SCALING_GROUP_COMPARISON_OPERATOR_NOT_EQUAL, +} + +const ( + SCALING_GROUP_METRIC_NAME_CPU_UTILIZATION = "CPU_UTILIZATION" + SCALING_GROUP_METRIC_NAME_MEM_UTILIZATION = "MEM_UTILIZATION" + SCALING_GROUP_METRIC_NAME_LAN_TRAFFIC_OUT = "LAN_TRAFFIC_OUT" + SCALING_GROUP_METRIC_NAME_LAN_TRAFFIC_IN = "LAN_TRAFFIC_IN" + SCALING_GROUP_METRIC_NAME_WAN_TRAFFIC_OUT = "WAN_TRAFFIC_OUT" + SCALING_GROUP_METRIC_NAME_WAN_TRAFFIC_IN = "WAN_TRAFFIC_IN" +) + +var SCALING_GROUP_METRIC_NAME = []string{ + SCALING_GROUP_METRIC_NAME_CPU_UTILIZATION, + SCALING_GROUP_METRIC_NAME_MEM_UTILIZATION, + SCALING_GROUP_METRIC_NAME_LAN_TRAFFIC_OUT, + SCALING_GROUP_METRIC_NAME_LAN_TRAFFIC_IN, + SCALING_GROUP_METRIC_NAME_WAN_TRAFFIC_OUT, + SCALING_GROUP_METRIC_NAME_WAN_TRAFFIC_IN, +} + +const ( + SCALING_GROUP_STATISTIC_AVERAGE = "AVERAGE" + SCALING_GROUP_STATISTIC_MAXIMUM = "MAXIMUM" + SCALING_GROUP_STATISTIC_MINIMUM = "MINIMUM" +) + +var SCALING_GROUP_STATISTIC = []string{ + SCALING_GROUP_STATISTIC_AVERAGE, + SCALING_GROUP_STATISTIC_MAXIMUM, + SCALING_GROUP_STATISTIC_MINIMUM, +} + +const ( + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_OUT_SUCCESS = "SCALE_OUT_SUCCESSFUL" + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_OUT_FAILED = "SCALE_OUT_FAILED" + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_IN_SUCCESS = "SCALE_IN_SUCCESSFUL" + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_IN_FAILED = "SCALE_IN_FAILED" + SCALING_GROUP_NOTIFICATION_TYPE_REPLACE_SUCCESS = "REPLACE_UNHEALTHY_INSTANCE_SUCCESSFUL" + SCALING_GROUP_NOTIFICATION_TYPE_REPLACE_FAILED = "REPLACE_UNHEALTHY_INSTANCE_FAILED" +) + +var SCALING_GROUP_NOTIFICATION_TYPE = []string{ + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_OUT_SUCCESS, + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_OUT_FAILED, + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_IN_SUCCESS, + SCALING_GROUP_NOTIFICATION_TYPE_SCALE_IN_FAILED, + SCALING_GROUP_NOTIFICATION_TYPE_REPLACE_SUCCESS, + SCALING_GROUP_NOTIFICATION_TYPE_REPLACE_FAILED, +} + +const ( + SCALING_GROUP_ACTIVITY_STATUS_INIT = "INIT" + SCALING_GROUP_ACTIVITY_STATUS_RUNNING = "RUNNING" + SCALING_GROUP_ACTIVITY_STATUS_SUCCESSFUL = "SUCCESSFUL" + SCALING_GROUP_ACTIVITY_STATUS_PARTIALLY_SUCCESSFUL = "PARTIALLY_SUCCESSFUL" + SCALING_GROUP_ACTIVITY_STATUS_FAILED = "FAILED" + SCALING_GROUP_ACTIVITY_STATUS_CANCELLED = "CANCELLED" +) + +const ( + AsScheduleNotFound = "ResourceNotFound.ScheduledActionNotFound" + AsScalingGroupInProgress = "ResourceInUse.ActivityInProgress" + AsScalingGroupInstanceInGroup = "ResourceInUse.InstanceInGroup" + AsScalingGroupNotFound = "ResourceNotFound.AutoScalingGroupNotFound" + SCALING_GROUP_IN_ACTIVITY_STATUS = "IN_ACTIVITY" + SCALING_GROUP_NOT_IN_ACTIVITY_STATUS = "NOT_IN_ACTIVITY" +) + +const ( + MultiZoneSubnetPolicyPriority = "PRIORITY" + MultiZoneSubnetPolicyEquality = "EQUALITY" +) + +const ( + SCALING_MODE_CLASSIC = "CLASSIC_SCALING" + SCALING_MODE_WAKE_UP_STOPPED = "WAKE_UP_STOPPED_SCALING" +) diff --git a/tencentcloud/services/as/extension_cvm.go b/tencentcloud/services/as/extension_cvm.go new file mode 100644 index 0000000000..be9053b37b --- /dev/null +++ b/tencentcloud/services/as/extension_cvm.go @@ -0,0 +1,118 @@ +package as + +const ( + CVM_CHARGE_TYPE_PREPAID = "PREPAID" + CVM_CHARGE_TYPE_POSTPAID = "POSTPAID_BY_HOUR" + CVM_CHARGE_TYPE_SPOTPAID = "SPOTPAID" + CVM_CHARGE_TYPE_CDHPAID = "CDHPAID" + + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PREPAID = "BANDWIDTH_PREPAID" + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_POSTPAID = "BANDWIDTH_POSTPAID_BY_HOUR" + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PACKAGE = "BANDWIDTH_PACKAGE" + CVM_INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID = "TRAFFIC_POSTPAID_BY_HOUR" + + CVM_STATUS_RUNNING = "RUNNING" + CVM_STATUS_STOPPED = "STOPPED" + CVM_STATUS_SHUTDOWN = "SHUTDOWN" + CVM_STATUS_TERMINATING = "TERMINATING" + CVM_STATUS_LAUNCH_FAILED = "LAUNCH_FAILED" + + CVM_LATEST_OPERATION_STATE_OPERATING = "OPERATING" + CVM_LATEST_OPERATION_STATE_SUCCESS = "SUCCESS" + CVM_LATEST_OPERATION_STATE_FAILED = "FAILED" + + CVM_PREPAID_RENEW_FLAG_NOTIFY_NOTIFY_AND_AUTO_RENEW = "NOTIFY_AND_AUTO_RENEW" + CVM_PREPAID_RENEW_FLAG_NOTIFY_AND_MANUAL_RENEW = "NOTIFY_AND_MANUAL_RENEW" + CVM_PREPAID_RENEW_FLAG_DISABLE_NOTIFY_AND_MANUAL_RENEW = "DISABLE_NOTIFY_AND_MANUAL_RENEW" + + CVM_DISK_TYPE_LOCAL_BASIC = "LOCAL_BASIC" + CVM_DISK_TYPE_LOCAL_SSD = "LOCAL_SSD" + CVM_DISK_TYPE_CLOUD_BASIC = "CLOUD_BASIC" + CVM_DISK_TYPE_CLOUD_SSD = "CLOUD_SSD" + CVM_DISK_TYPE_CLOUD_PREMIUM = "CLOUD_PREMIUM" + CVM_DISK_TYPE_CLOUD_BSSD = "CLOUD_BSSD" + CVM_DISK_TYPE_CLOUD_HSSD = "CLOUD_HSSD" + CVM_DISK_TYPE_CLOUD_TSSD = "CLOUD_TSSD" + + CVM_PLACEMENT_GROUP_TYPE_HOST = "HOST" + CVM_PLACEMENT_GROUP_TYPE_SW = "SW" + CVM_PLACEMENT_GROUP_TYPE_RACK = "RACK" + + ZONE_STATE_AVAILABLE = "AVAILABLE" + ZONE_STATE_UNAVAILABLE = "UNAVAILABLE" + + CVM_NOT_FOUND_ERROR = "InvalidInstanceId.NotFound" + KEY_PAIR_NOT_SUPPORT_ERROR = "InvalidParameterValue.KeyPairNotSupported" + KYE_PAIR_INVALID_ERROR = "InvalidKeyPair" + + CVM_SPOT_INSTANCE_TYPE_ONE_TIME = "ONE-TIME" + + CVM_MARKET_TYPE_SPOT = "spot" + + CVM_IMAGE_LOGIN = "TRUE" + CVM_IMAGE_LOGIN_NOT = "FALSE" + + // @Deprecated use cvm.INVALIDPARAMETERVALUE_ZONENOTSUPPORTED + CVM_ZONE_NOT_SUPPORT_ERROR = "InvalidParameterValue.ZoneNotSupported" + // @Deprecated use cvm.RESOURCEINSUFFICIENT_CLOUDDISKSOLDOUT instead + CVM_CLOUD_DISK_SOLD_OUT_ERROR = "ResourceInsufficient.CloudDiskSoldOut" + + CVM_STOP_MODE_KEEP_CHARGING = "KEEP_CHARGING" + CVM_STOP_MODE_STOP_CHARGING = "STOP_CHARGING" + CVM_SELL_STATUS = "SELL" + CVM_SOLD_OUT_STATUS = "SOLD_OUT" + MIDLINE = "-" + UNDERLINE = "_" + IMAGE_SHARE_PERMISSION_SHARE = "SHARE" + IMAGE_SHARE_PERMISSION_CANCEL = "CANCEL" +) + +// Only client error can cvm retry, others will directly returns +var CVM_RETRYABLE_ERROR = []string{ + // client + //"ClientError.NetworkError", + "ClientError.HttpStatusCodeError", +} + +var CVM_CHARGE_TYPE = []string{ + CVM_CHARGE_TYPE_PREPAID, + CVM_CHARGE_TYPE_POSTPAID, + CVM_CHARGE_TYPE_SPOTPAID, + CVM_CHARGE_TYPE_CDHPAID, +} + +var CVM_INTERNET_CHARGE_TYPE = []string{ + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PREPAID, + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_POSTPAID, + CVM_INTERNET_CHARGE_TYPE_BANDWIDTH_PACKAGE, + CVM_INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID, +} + +var CVM_PREPAID_PERIOD = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 24, 36} + +var CVM_PREPAID_RENEW_FLAG = []string{ + CVM_PREPAID_RENEW_FLAG_NOTIFY_NOTIFY_AND_AUTO_RENEW, + CVM_PREPAID_RENEW_FLAG_NOTIFY_AND_MANUAL_RENEW, + CVM_PREPAID_RENEW_FLAG_DISABLE_NOTIFY_AND_MANUAL_RENEW, +} + +var CVM_DISK_TYPE = []string{ + CVM_DISK_TYPE_LOCAL_BASIC, + CVM_DISK_TYPE_LOCAL_SSD, + CVM_DISK_TYPE_CLOUD_BASIC, + CVM_DISK_TYPE_CLOUD_SSD, + CVM_DISK_TYPE_CLOUD_PREMIUM, + CVM_DISK_TYPE_CLOUD_BSSD, + CVM_DISK_TYPE_CLOUD_HSSD, + CVM_DISK_TYPE_CLOUD_TSSD, +} + +var CVM_PLACEMENT_GROUP_TYPE = []string{ + CVM_PLACEMENT_GROUP_TYPE_HOST, + CVM_PLACEMENT_GROUP_TYPE_SW, + CVM_PLACEMENT_GROUP_TYPE_RACK, +} + +var CVM_SPOT_INSTANCE_TYPE = []string{ + CVM_SPOT_INSTANCE_TYPE_ONE_TIME, +} diff --git a/tencentcloud/services/as/extension_tags.go b/tencentcloud/services/as/extension_tags.go new file mode 100644 index 0000000000..b0aab301b8 --- /dev/null +++ b/tencentcloud/services/as/extension_tags.go @@ -0,0 +1,3 @@ +package as + +const DESCRIBE_TAGS_LIMIT = 20 diff --git a/tencentcloud/resource_tc_as_attachment.go b/tencentcloud/services/as/resource_tc_as_attachment.go similarity index 68% rename from tencentcloud/resource_tc_as_attachment.go rename to tencentcloud/services/as/resource_tc_as_attachment.go index e9fc5f318e..1006d48c9d 100644 --- a/tencentcloud/resource_tc_as_attachment.go +++ b/tencentcloud/services/as/resource_tc_as_attachment.go @@ -1,14 +1,17 @@ -package tencentcloud +package as import ( "context" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAsAttachment() *schema.Resource { +func ResourceTencentCloudAsAttachment() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsAttachmentCreate, Read: resourceTencentCloudAsAttachmentRead, @@ -34,15 +37,15 @@ func resourceTencentCloudAsAttachment() *schema.Resource { } func resourceTencentCloudAsAttachmentCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_attachment.create")() + defer tccommon.LogElapsed("resource.tencentcloud_as_attachment.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) scalingGroupId := d.Get("scaling_group_id").(string) instanceIds := helper.InterfacesStrings(d.Get("instance_ids").(*schema.Set).List()) asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } err := asService.AttachInstances(ctx, scalingGroupId, instanceIds) if err != nil { @@ -54,21 +57,21 @@ func resourceTencentCloudAsAttachmentCreate(d *schema.ResourceData, meta interfa } func resourceTencentCloudAsAttachmentRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_attachment.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_attachment.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) scalingGroupId := d.Id() asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instanceIds []string - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, errRet := asService.DescribeAutoScalingAttachment(ctx, scalingGroupId, false) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } instanceIds = result return nil @@ -85,10 +88,10 @@ func resourceTencentCloudAsAttachmentRead(d *schema.ResourceData, meta interface } func resourceTencentCloudAsAttachmentUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_attachment.update")() + defer tccommon.LogElapsed("resource.tencentcloud_as_attachment.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) scalingGroupId := d.Id() if d.HasChange("instance_ids") { @@ -99,7 +102,7 @@ func resourceTencentCloudAsAttachmentUpdate(d *schema.ResourceData, meta interfa add := helper.InterfacesStrings(newInstances.Difference(oldInstances).List()) asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } if len(add) > 0 { err := asService.AttachInstances(ctx, scalingGroupId, add) @@ -119,20 +122,20 @@ func resourceTencentCloudAsAttachmentUpdate(d *schema.ResourceData, meta interfa } func resourceTencentCloudAsAttachmentDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_attachment.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_as_attachment.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) scalingGroupId := d.Id() asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var instanceIds []string - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, errRet := asService.DescribeAutoScalingAttachment(ctx, scalingGroupId, false) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } instanceIds = result return nil diff --git a/tencentcloud/resource_tc_as_attachment_test.go b/tencentcloud/services/as/resource_tc_as_attachment_test.go similarity index 84% rename from tencentcloud/resource_tc_as_attachment_test.go rename to tencentcloud/services/as/resource_tc_as_attachment_test.go index e169c4d7ef..e8d95576c1 100644 --- a/tencentcloud/resource_tc_as_attachment_test.go +++ b/tencentcloud/services/as/resource_tc_as_attachment_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package as_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcas "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/as" + "context" "fmt" "log" @@ -21,10 +25,10 @@ func init() { // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_as_attachment func testSweepAsAttachment(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - cli, _ := sharedClientForRegion(r) - asService := AsService{client: cli.(*TencentCloudClient).apiV3Conn} + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + cli, _ := tcacctest.SharedClientForRegion(r) + asService := svcas.NewAsService(cli.(tccommon.ProviderMeta).GetAPIV3Conn()) scalingGroups, err := asService.DescribeAutoScalingGroupByFilter(ctx, "", "", "", nil) if err != nil { @@ -39,10 +43,10 @@ func testSweepAsAttachment(r string) error { } var instanceIds []string - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { result, errRet := asService.DescribeAutoScalingAttachment(ctx, scalingGroupId, true) if errRet != nil { - return retryError(errRet) + return tccommon.RetryError(errRet) } instanceIds = result return nil @@ -64,8 +68,8 @@ func testSweepAsAttachment(r string) error { func TestAccTencentCloudAsAttachment(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAsAttachmentDestroy, Steps: []resource.TestStep{ { @@ -91,8 +95,8 @@ func TestAccTencentCloudAsAttachment(t *testing.T) { func testAccCheckAsAttachmentExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -101,7 +105,7 @@ func testAccCheckAsAttachmentExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("auto scaling attachment id is not set") } - asService := AsService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + asService := svcas.NewAsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) instances, err := asService.DescribeAutoScalingAttachment(ctx, rs.Primary.ID, false) if err != nil { return err @@ -114,12 +118,10 @@ func testAccCheckAsAttachmentExists(n string) resource.TestCheckFunc { } func testAccCheckAsAttachmentDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - asService := AsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + asService := svcas.NewAsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_as_attachment" { continue @@ -128,7 +130,7 @@ func testAccCheckAsAttachmentDestroy(s *terraform.State) error { instances, err := asService.DescribeAutoScalingAttachment(ctx, rs.Primary.ID, false) if err != nil { if sdkErr, ok := err.(*errors.TencentCloudSDKError); ok { - if sdkErr.Code == AsScalingGroupNotFound { + if sdkErr.Code == svcas.AsScalingGroupNotFound { return nil } } @@ -142,7 +144,7 @@ func testAccCheckAsAttachmentDestroy(s *terraform.State) error { } func testAccAsAttachment() string { - return defaultAsVariable + ` + return tcacctest.DefaultAsVariable + ` resource "tencentcloud_vpc" "vpc" { name = "tf-as-vpc" cidr_block = "10.2.0.0/16" @@ -188,7 +190,7 @@ resource "tencentcloud_as_attachment" "attachment" { } func testAccAsAttachment_update() string { - return defaultAsVariable + ` + return tcacctest.DefaultAsVariable + ` resource "tencentcloud_vpc" "vpc" { name = "tf-as-vpc" cidr_block = "10.2.0.0/16" diff --git a/tencentcloud/resource_tc_as_complete_lifecycle.go b/tencentcloud/services/as/resource_tc_as_complete_lifecycle.go similarity index 76% rename from tencentcloud/resource_tc_as_complete_lifecycle.go rename to tencentcloud/services/as/resource_tc_as_complete_lifecycle.go index 7802c3446c..87b8e5b902 100644 --- a/tencentcloud/resource_tc_as_complete_lifecycle.go +++ b/tencentcloud/services/as/resource_tc_as_complete_lifecycle.go @@ -1,15 +1,18 @@ -package tencentcloud +package as import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAsCompleteLifecycle() *schema.Resource { +func ResourceTencentCloudAsCompleteLifecycle() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsCompleteLifecycleCreate, Read: resourceTencentCloudAsCompleteLifecycleRead, @@ -50,10 +53,10 @@ func resourceTencentCloudAsCompleteLifecycle() *schema.Resource { } func resourceTencentCloudAsCompleteLifecycleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_complete_lifecycle.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_complete_lifecycle.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = as.NewCompleteLifecycleActionRequest() @@ -76,10 +79,10 @@ func resourceTencentCloudAsCompleteLifecycleCreate(d *schema.ResourceData, meta request.LifecycleActionToken = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().CompleteLifecycleAction(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().CompleteLifecycleAction(request) if e != nil { - return retryError(e) + 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()) } @@ -96,15 +99,15 @@ func resourceTencentCloudAsCompleteLifecycleCreate(d *schema.ResourceData, meta } func resourceTencentCloudAsCompleteLifecycleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_complete_lifecycle.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_complete_lifecycle.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudAsCompleteLifecycleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_complete_lifecycle.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_complete_lifecycle.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_as_complete_lifecycle_test.go b/tencentcloud/services/as/resource_tc_as_complete_lifecycle_test.go similarity index 79% rename from tencentcloud/resource_tc_as_complete_lifecycle_test.go rename to tencentcloud/services/as/resource_tc_as_complete_lifecycle_test.go index eb326b6467..482bbdce9d 100644 --- a/tencentcloud/resource_tc_as_complete_lifecycle_test.go +++ b/tencentcloud/services/as/resource_tc_as_complete_lifecycle_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package as_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixAsCompleteLifecycleResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccAsCompleteLifecycle, diff --git a/tencentcloud/resource_tc_as_execute_scaling_policy.go b/tencentcloud/services/as/resource_tc_as_execute_scaling_policy.go similarity index 76% rename from tencentcloud/resource_tc_as_execute_scaling_policy.go rename to tencentcloud/services/as/resource_tc_as_execute_scaling_policy.go index 9f01f117d4..38fd8d823d 100644 --- a/tencentcloud/resource_tc_as_execute_scaling_policy.go +++ b/tencentcloud/services/as/resource_tc_as_execute_scaling_policy.go @@ -1,15 +1,18 @@ -package tencentcloud +package as import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAsExecuteScalingPolicy() *schema.Resource { +func ResourceTencentCloudAsExecuteScalingPolicy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsExecuteScalingPolicyCreate, Read: resourceTencentCloudAsExecuteScalingPolicyRead, @@ -43,10 +46,10 @@ func resourceTencentCloudAsExecuteScalingPolicy() *schema.Resource { } func resourceTencentCloudAsExecuteScalingPolicyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_execute_scaling_policy.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_execute_scaling_policy.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = as.NewExecuteScalingPolicyRequest() @@ -65,10 +68,10 @@ func resourceTencentCloudAsExecuteScalingPolicyCreate(d *schema.ResourceData, me request.TriggerSource = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().ExecuteScalingPolicy(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().ExecuteScalingPolicy(request) if e != nil { - return retryError(e) + 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()) } @@ -87,15 +90,15 @@ func resourceTencentCloudAsExecuteScalingPolicyCreate(d *schema.ResourceData, me } func resourceTencentCloudAsExecuteScalingPolicyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_execute_scaling_policy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_execute_scaling_policy.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudAsExecuteScalingPolicyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_execute_scaling_policy.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_execute_scaling_policy.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_as_execute_scaling_policy_test.go b/tencentcloud/services/as/resource_tc_as_execute_scaling_policy_test.go similarity index 83% rename from tencentcloud/resource_tc_as_execute_scaling_policy_test.go rename to tencentcloud/services/as/resource_tc_as_execute_scaling_policy_test.go index deda2e764d..c74aea6589 100644 --- a/tencentcloud/resource_tc_as_execute_scaling_policy_test.go +++ b/tencentcloud/services/as/resource_tc_as_execute_scaling_policy_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package as_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixAsExecuteScalingPolicyResource_basic(t *testing.T t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccAsExecuteScalingPolicy, diff --git a/tencentcloud/resource_tc_as_lifecycle_hook.go b/tencentcloud/services/as/resource_tc_as_lifecycle_hook.go similarity index 82% rename from tencentcloud/resource_tc_as_lifecycle_hook.go rename to tencentcloud/services/as/resource_tc_as_lifecycle_hook.go index b076c203d0..44ab420753 100644 --- a/tencentcloud/resource_tc_as_lifecycle_hook.go +++ b/tencentcloud/services/as/resource_tc_as_lifecycle_hook.go @@ -1,17 +1,20 @@ -package tencentcloud +package as import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAsLifecycleHook() *schema.Resource { +func ResourceTencentCloudAsLifecycleHook() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsLifecycleHookCreate, Read: resourceTencentCloudAsLifecycleHookRead, @@ -33,21 +36,21 @@ func resourceTencentCloudAsLifecycleHook() *schema.Resource { "lifecycle_transition": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue([]string{"INSTANCE_LAUNCHING", "INSTANCE_TERMINATING"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"INSTANCE_LAUNCHING", "INSTANCE_TERMINATING"}), Description: "The instance state to which you want to attach the lifecycle hook. Valid values: `INSTANCE_LAUNCHING` and `INSTANCE_TERMINATING`.", }, "default_result": { Type: schema.TypeString, Optional: true, Default: "CONTINUE", - ValidateFunc: validateAllowedStringValue([]string{"CONTINUE", "ABANDON"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"CONTINUE", "ABANDON"}), Description: "Defines the action the AS group should take when the lifecycle hook timeout elapses or if an unexpected failure occurs. Valid values: `CONTINUE` and `ABANDON`. The default value is `CONTINUE`.", }, "heartbeat_timeout": { Type: schema.TypeInt, Optional: true, Default: 300, - ValidateFunc: validateIntegerInRange(30, 7200), + ValidateFunc: tccommon.ValidateIntegerInRange(30, 7200), Description: "Defines the amount of time, in seconds, that can elapse before the lifecycle hook times out. Valid value ranges: (30~7200). and default value is `300`.", }, "notification_metadata": { @@ -59,7 +62,7 @@ func resourceTencentCloudAsLifecycleHook() *schema.Resource { "notification_target_type": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue([]string{"CMQ_QUEUE", "CMQ_TOPIC"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"CMQ_QUEUE", "CMQ_TOPIC"}), Description: "Target type. Valid values: `CMQ_QUEUE`, `CMQ_TOPIC`.", }, "notification_queue_name": { @@ -77,9 +80,9 @@ func resourceTencentCloudAsLifecycleHook() *schema.Resource { } func resourceTencentCloudAsLifecycleHookCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_lifecycle_hook.create")() + defer tccommon.LogElapsed("resource.tencentcloud_as_lifecycle_hook.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := as.NewCreateLifecycleHookRequest() request.AutoScalingGroupId = helper.String(d.Get("scaling_group_id").(string)) @@ -114,7 +117,7 @@ func resourceTencentCloudAsLifecycleHookCreate(d *schema.ResourceData, meta inte } } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().CreateLifecycleHook(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().CreateLifecycleHook(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) @@ -132,20 +135,20 @@ func resourceTencentCloudAsLifecycleHookCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudAsLifecycleHookRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_lifecycle_hook.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_lifecycle_hook.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) lifecycleHookId := d.Id() asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { lifecycleHook, has, e := asService.DescribeLifecycleHookById(ctx, lifecycleHookId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if has == 0 { d.SetId("") @@ -181,9 +184,9 @@ func resourceTencentCloudAsLifecycleHookRead(d *schema.ResourceData, meta interf } func resourceTencentCloudAsLifecycleHookUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_lifecycle_hook.update")() + defer tccommon.LogElapsed("resource.tencentcloud_as_lifecycle_hook.update")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := as.NewUpgradeLifecycleHookRequest() lifecycleHookId := d.Id() @@ -218,7 +221,7 @@ func resourceTencentCloudAsLifecycleHookUpdate(d *schema.ResourceData, meta inte } } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().UpgradeLifecycleHook(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().UpgradeLifecycleHook(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) @@ -231,14 +234,14 @@ func resourceTencentCloudAsLifecycleHookUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudAsLifecycleHookDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_lifecycle_hook.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_as_lifecycle_hook.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) lifecycleHookId := d.Id() asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } err := asService.DeleteLifecycleHook(ctx, lifecycleHookId) if err != nil { diff --git a/tencentcloud/resource_tc_as_lifecycle_hook_test.go b/tencentcloud/services/as/resource_tc_as_lifecycle_hook_test.go similarity index 87% rename from tencentcloud/resource_tc_as_lifecycle_hook_test.go rename to tencentcloud/services/as/resource_tc_as_lifecycle_hook_test.go index d6bd5b61fd..facfad48e5 100644 --- a/tencentcloud/resource_tc_as_lifecycle_hook_test.go +++ b/tencentcloud/services/as/resource_tc_as_lifecycle_hook_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package as_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcas "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/as" + "context" "fmt" "testing" @@ -12,8 +16,8 @@ import ( func TestAccTencentCloudAsLifecycleHook(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAsLifecycleHookDestroy, Steps: []resource.TestStep{ { @@ -47,8 +51,8 @@ func TestAccTencentCloudAsLifecycleHook(t *testing.T) { func testAccCheckAsLifecycleHookExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -57,7 +61,7 @@ func testAccCheckAsLifecycleHookExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("auto scaling lifecycle hook id is not set") } - asService := AsService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + asService := svcas.NewAsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := asService.DescribeLifecycleHookById(ctx, rs.Primary.ID) if err != nil { return err @@ -70,12 +74,10 @@ func testAccCheckAsLifecycleHookExists(n string) resource.TestCheckFunc { } func testAccCheckAsLifecycleHookDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - asService := AsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + asService := svcas.NewAsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_as_lifecycle_hook" { continue diff --git a/tencentcloud/resource_tc_as_notification.go b/tencentcloud/services/as/resource_tc_as_notification.go similarity index 78% rename from tencentcloud/resource_tc_as_notification.go rename to tencentcloud/services/as/resource_tc_as_notification.go index 4929d9fd86..1b4db9546e 100644 --- a/tencentcloud/resource_tc_as_notification.go +++ b/tencentcloud/services/as/resource_tc_as_notification.go @@ -1,17 +1,20 @@ -package tencentcloud +package as import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAsNotification() *schema.Resource { +func ResourceTencentCloudAsNotification() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsNotificationCreate, Read: resourceTencentCloudAsNotificationRead, @@ -32,7 +35,7 @@ func resourceTencentCloudAsNotification() *schema.Resource { Description: "A list of Notification Types that trigger notifications. Acceptable values are `SCALE_OUT_FAILED`, `SCALE_IN_SUCCESSFUL`, `SCALE_IN_FAILED`, `REPLACE_UNHEALTHY_INSTANCE_SUCCESSFUL` and `REPLACE_UNHEALTHY_INSTANCE_FAILED`.", Elem: &schema.Schema{ Type: schema.TypeString, - ValidateFunc: validateAllowedStringValue(SCALING_GROUP_NOTIFICATION_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(SCALING_GROUP_NOTIFICATION_TYPE), }, }, "notification_user_group_ids": { @@ -47,9 +50,9 @@ func resourceTencentCloudAsNotification() *schema.Resource { } func resourceTencentCloudAsNotificationCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_notification.create")() + defer tccommon.LogElapsed("resource.tencentcloud_as_notification.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := as.NewCreateNotificationConfigurationRequest() request.AutoScalingGroupId = helper.String(d.Get("scaling_group_id").(string)) @@ -64,7 +67,7 @@ func resourceTencentCloudAsNotificationCreate(d *schema.ResourceData, meta inter request.NotificationUserGroupIds = append(request.NotificationUserGroupIds, helper.String(value.(string))) } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().CreateNotificationConfiguration(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().CreateNotificationConfiguration(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) @@ -82,19 +85,19 @@ func resourceTencentCloudAsNotificationCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudAsNotificationRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_notification.read")() + defer tccommon.LogElapsed("resource.tencentcloud_as_notification.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) notificationId := d.Id() asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { notification, has, e := asService.DescribeNotificationById(ctx, notificationId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if has == 0 { d.SetId("") @@ -112,9 +115,9 @@ func resourceTencentCloudAsNotificationRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudAsNotificationUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_notification.update")() + defer tccommon.LogElapsed("resource.tencentcloud_as_notification.update")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := as.NewModifyNotificationConfigurationRequest() notificationId := d.Id() @@ -134,7 +137,7 @@ func resourceTencentCloudAsNotificationUpdate(d *schema.ResourceData, meta inter } } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().ModifyNotificationConfiguration(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().ModifyNotificationConfiguration(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) @@ -147,14 +150,14 @@ func resourceTencentCloudAsNotificationUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudAsNotificationDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_notification.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_as_notification.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) notificationId := d.Id() asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } err := asService.DeleteNotification(ctx, notificationId) if err != nil { diff --git a/tencentcloud/resource_tc_as_protect_instances.go b/tencentcloud/services/as/resource_tc_as_protect_instances.go similarity index 75% rename from tencentcloud/resource_tc_as_protect_instances.go rename to tencentcloud/services/as/resource_tc_as_protect_instances.go index 3607e6f68e..3e8bda97f0 100644 --- a/tencentcloud/resource_tc_as_protect_instances.go +++ b/tencentcloud/services/as/resource_tc_as_protect_instances.go @@ -1,15 +1,18 @@ -package tencentcloud +package as import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAsProtectInstances() *schema.Resource { +func ResourceTencentCloudAsProtectInstances() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsProtectInstancesCreate, Read: resourceTencentCloudAsProtectInstancesRead, @@ -43,10 +46,10 @@ func resourceTencentCloudAsProtectInstances() *schema.Resource { } func resourceTencentCloudAsProtectInstancesCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_as_protect_instances.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_as_protect_instances.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = as.NewSetInstancesProtectionRequest() @@ -68,10 +71,10 @@ func resourceTencentCloudAsProtectInstancesCreate(d *schema.ResourceData, meta i request.ProtectedFromScaleIn = helper.Bool(v.(bool)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().SetInstancesProtection(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().SetInstancesProtection(request) if e != nil { - return retryError(e) + 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()) } @@ -89,15 +92,15 @@ func resourceTencentCloudAsProtectInstancesCreate(d *schema.ResourceData, meta i } func resourceTencentCloudAsProtectInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_protect_instances.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_protect_instances.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudAsProtectInstancesDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_protect_instances.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_protect_instances.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_as_remove_instances.go b/tencentcloud/services/as/resource_tc_as_remove_instances.go similarity index 73% rename from tencentcloud/resource_tc_as_remove_instances.go rename to tencentcloud/services/as/resource_tc_as_remove_instances.go index 23a6847113..e234c1c763 100644 --- a/tencentcloud/resource_tc_as_remove_instances.go +++ b/tencentcloud/services/as/resource_tc_as_remove_instances.go @@ -1,15 +1,18 @@ -package tencentcloud +package as import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAsRemoveInstances() *schema.Resource { +func ResourceTencentCloudAsRemoveInstances() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsRemoveInstancesCreate, Read: resourceTencentCloudAsRemoveInstancesRead, @@ -36,10 +39,10 @@ func resourceTencentCloudAsRemoveInstances() *schema.Resource { } func resourceTencentCloudAsRemoveInstancesCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_as_remove_instances.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_as_remove_instances.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = as.NewRemoveInstancesRequest() @@ -58,10 +61,10 @@ func resourceTencentCloudAsRemoveInstancesCreate(d *schema.ResourceData, meta in } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().RemoveInstances(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().RemoveInstances(request) if e != nil { - return retryError(e) + 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()) } @@ -80,15 +83,15 @@ func resourceTencentCloudAsRemoveInstancesCreate(d *schema.ResourceData, meta in } func resourceTencentCloudAsRemoveInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_remove_instances.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_remove_instances.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudAsRemoveInstancesDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_remove_instances.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_remove_instances.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_as_scale_in_instances.go b/tencentcloud/services/as/resource_tc_as_scale_in_instances.go similarity index 71% rename from tencentcloud/resource_tc_as_scale_in_instances.go rename to tencentcloud/services/as/resource_tc_as_scale_in_instances.go index 05e93ea7c1..2b8fd5994e 100644 --- a/tencentcloud/resource_tc_as_scale_in_instances.go +++ b/tencentcloud/services/as/resource_tc_as_scale_in_instances.go @@ -1,15 +1,18 @@ -package tencentcloud +package as import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAsScaleInInstances() *schema.Resource { +func ResourceTencentCloudAsScaleInInstances() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsScaleInInstancesCreate, Read: resourceTencentCloudAsScaleInInstancesRead, @@ -33,10 +36,10 @@ func resourceTencentCloudAsScaleInInstances() *schema.Resource { } func resourceTencentCloudAsScaleInInstancesCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scale_in_instances.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_scale_in_instances.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = as.NewScaleInInstancesRequest() @@ -51,10 +54,10 @@ func resourceTencentCloudAsScaleInInstancesCreate(d *schema.ResourceData, meta i request.ScaleInNumber = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().ScaleInInstances(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().ScaleInInstances(request) if e != nil { - return retryError(e) + 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()) } @@ -73,15 +76,15 @@ func resourceTencentCloudAsScaleInInstancesCreate(d *schema.ResourceData, meta i } func resourceTencentCloudAsScaleInInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scale_in_instances.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_scale_in_instances.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudAsScaleInInstancesDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scale_in_instances.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_scale_in_instances.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_as_scale_in_instances_test.go b/tencentcloud/services/as/resource_tc_as_scale_in_instances_test.go similarity index 81% rename from tencentcloud/resource_tc_as_scale_in_instances_test.go rename to tencentcloud/services/as/resource_tc_as_scale_in_instances_test.go index 446353b90f..4836f4167b 100644 --- a/tencentcloud/resource_tc_as_scale_in_instances_test.go +++ b/tencentcloud/services/as/resource_tc_as_scale_in_instances_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package as_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixAsScaleInInstancesResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccAsScaleInInstances, diff --git a/tencentcloud/resource_tc_as_scale_out_instances.go b/tencentcloud/services/as/resource_tc_as_scale_out_instances.go similarity index 72% rename from tencentcloud/resource_tc_as_scale_out_instances.go rename to tencentcloud/services/as/resource_tc_as_scale_out_instances.go index 9860b6b7b0..102a85e110 100644 --- a/tencentcloud/resource_tc_as_scale_out_instances.go +++ b/tencentcloud/services/as/resource_tc_as_scale_out_instances.go @@ -1,15 +1,18 @@ -package tencentcloud +package as import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAsScaleOutInstances() *schema.Resource { +func ResourceTencentCloudAsScaleOutInstances() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsScaleOutInstancesCreate, Read: resourceTencentCloudAsScaleOutInstancesRead, @@ -36,10 +39,10 @@ func resourceTencentCloudAsScaleOutInstances() *schema.Resource { } func resourceTencentCloudAsScaleOutInstancesCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scale_out_instances.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_scale_out_instances.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = as.NewScaleOutInstancesRequest() @@ -54,10 +57,10 @@ func resourceTencentCloudAsScaleOutInstancesCreate(d *schema.ResourceData, meta request.ScaleOutNumber = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().ScaleOutInstances(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().ScaleOutInstances(request) if e != nil { - return retryError(e) + 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()) } @@ -76,15 +79,15 @@ func resourceTencentCloudAsScaleOutInstancesCreate(d *schema.ResourceData, meta } func resourceTencentCloudAsScaleOutInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scale_out_instances.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_scale_out_instances.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudAsScaleOutInstancesDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scale_out_instances.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_scale_out_instances.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_as_scale_out_instances_test.go b/tencentcloud/services/as/resource_tc_as_scale_out_instances_test.go similarity index 82% rename from tencentcloud/resource_tc_as_scale_out_instances_test.go rename to tencentcloud/services/as/resource_tc_as_scale_out_instances_test.go index 509abe3218..13f4f63676 100644 --- a/tencentcloud/resource_tc_as_scale_out_instances_test.go +++ b/tencentcloud/services/as/resource_tc_as_scale_out_instances_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package as_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudNeedFixAsScaleOutInstancesResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccAsScaleOutInstances, diff --git a/tencentcloud/resource_tc_as_scaling_config.go b/tencentcloud/services/as/resource_tc_as_scaling_config.go similarity index 92% rename from tencentcloud/resource_tc_as_scaling_config.go rename to tencentcloud/services/as/resource_tc_as_scaling_config.go index ea31f17ed1..df50e2b948 100644 --- a/tencentcloud/resource_tc_as_scaling_config.go +++ b/tencentcloud/services/as/resource_tc_as_scaling_config.go @@ -1,17 +1,20 @@ -package tencentcloud +package as import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAsScalingConfig() *schema.Resource { +func ResourceTencentCloudAsScalingConfig() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsScalingConfigCreate, Read: resourceTencentCloudAsScalingConfigRead, @@ -25,7 +28,7 @@ func resourceTencentCloudAsScalingConfig() *schema.Resource { "configuration_name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "Name of a launch configuration.", }, "image_id": { @@ -51,14 +54,14 @@ func resourceTencentCloudAsScalingConfig() *schema.Resource { Type: schema.TypeString, Optional: true, Default: SYSTEM_DISK_TYPE_CLOUD_PREMIUM, - ValidateFunc: validateAllowedStringValue(SYSTEM_DISK_ALLOW_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(SYSTEM_DISK_ALLOW_TYPE), Description: "Type of a CVM disk. Valid values: `CLOUD_PREMIUM` and `CLOUD_SSD`. Default is `CLOUD_PREMIUM`. valid when disk_type_policy is ORIGINAL.", }, "system_disk_size": { Type: schema.TypeInt, Optional: true, Default: 50, - ValidateFunc: validateIntegerInRange(50, 500), + ValidateFunc: tccommon.ValidateIntegerInRange(50, 500), Description: "Volume of system disk in GB. Default is `50`.", }, "data_disk": { @@ -72,7 +75,7 @@ func resourceTencentCloudAsScalingConfig() *schema.Resource { Type: schema.TypeString, Optional: true, Default: SYSTEM_DISK_TYPE_CLOUD_PREMIUM, - ValidateFunc: validateAllowedStringValue(SYSTEM_DISK_ALLOW_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(SYSTEM_DISK_ALLOW_TYPE), Description: "Types of disk. Valid values: `CLOUD_PREMIUM` and `CLOUD_SSD`. valid when disk_type_policy is ORIGINAL.", }, "disk_size": { @@ -103,33 +106,33 @@ func resourceTencentCloudAsScalingConfig() *schema.Resource { "instance_charge_type_prepaid_period": { Type: schema.TypeInt, Optional: true, - ValidateFunc: validateAllowedIntValue(CVM_PREPAID_PERIOD), + ValidateFunc: tccommon.ValidateAllowedIntValue(CVM_PREPAID_PERIOD), Description: "The tenancy (in month) of the prepaid instance, NOTE: it only works when instance_charge_type is set to `PREPAID`. Valid values are `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12`, `24`, `36`.", }, "instance_charge_type_prepaid_renew_flag": { Type: schema.TypeString, Optional: true, Computed: true, - ValidateFunc: validateAllowedStringValue(CVM_PREPAID_RENEW_FLAG), + ValidateFunc: tccommon.ValidateAllowedStringValue(CVM_PREPAID_RENEW_FLAG), Description: "Auto renewal flag. Valid values: `NOTIFY_AND_AUTO_RENEW`: notify upon expiration and renew automatically, `NOTIFY_AND_MANUAL_RENEW`: notify upon expiration but do not renew automatically, `DISABLE_NOTIFY_AND_MANUAL_RENEW`: neither notify upon expiration nor renew automatically. Default value: `NOTIFY_AND_MANUAL_RENEW`. If this parameter is specified as `NOTIFY_AND_AUTO_RENEW`, the instance will be automatically renewed on a monthly basis if the account balance is sufficient. NOTE: it only works when instance_charge_type is set to `PREPAID`.", }, "spot_instance_type": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue([]string{"one-time"}), + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{"one-time"}), Description: "Type of spot instance, only support `one-time` now. Note: it only works when instance_charge_type is set to `SPOTPAID`.", }, "spot_max_price": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateStringNumber, + ValidateFunc: tccommon.ValidateStringNumber, Description: "Max price of a spot instance, is the format of decimal string, for example \"0.50\". Note: it only works when instance_charge_type is set to `SPOTPAID`.", }, "internet_charge_type": { Type: schema.TypeString, Optional: true, Default: INTERNET_CHARGE_TYPE_TRAFFIC_POSTPAID_BY_HOUR, - ValidateFunc: validateAllowedStringValue(INTERNET_CHARGE_ALLOW_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(INTERNET_CHARGE_ALLOW_TYPE), Description: "Charge types for network traffic. Valid values: `BANDWIDTH_PREPAID`, `TRAFFIC_POSTPAID_BY_HOUR` and `BANDWIDTH_PACKAGE`.", }, "internet_max_bandwidth_out": { @@ -147,7 +150,7 @@ func resourceTencentCloudAsScalingConfig() *schema.Resource { Type: schema.TypeString, Optional: true, Sensitive: true, - ValidateFunc: validateAsConfigPassword, + ValidateFunc: tccommon.ValidateAsConfigPassword, ConflictsWith: []string{"keep_image_login"}, Description: "Password to access.", }, @@ -196,7 +199,7 @@ func resourceTencentCloudAsScalingConfig() *schema.Resource { Type: schema.TypeString, Optional: true, Default: SCALING_DISK_TYPE_POLICY_ORIGINAL, - ValidateFunc: validateAllowedStringValue(SCALING_DISK_TYPE_ALLOW_POLICY), + ValidateFunc: tccommon.ValidateAllowedStringValue(SCALING_DISK_TYPE_ALLOW_POLICY), Description: "Policy of cloud disk type. Valid values: `ORIGINAL` and `AUTOMATIC`. Default is `ORIGINAL`.", }, "cam_role_name": { @@ -239,7 +242,7 @@ func resourceTencentCloudAsScalingConfig() *schema.Resource { "instance_name_style": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue(INSTANCE_NAME_STYLE), + ValidateFunc: tccommon.ValidateAllowedStringValue(INSTANCE_NAME_STYLE), Default: INSTANCE_NAME_ORIGINAL, Description: "Type of CVM instance name. Valid values: `ORIGINAL` and `UNIQUE`. Default is `ORIGINAL`.", }, @@ -262,9 +265,9 @@ func resourceTencentCloudAsScalingConfig() *schema.Resource { } func resourceTencentCloudAsScalingConfigCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_config.create")() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_config.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := as.NewCreateLaunchConfigurationRequest() v := d.Get("configuration_name") @@ -458,7 +461,7 @@ func resourceTencentCloudAsScalingConfigCreate(d *schema.ResourceData, meta inte request.InstanceNameSettings = settings[0] } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().CreateLaunchConfiguration(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().CreateLaunchConfiguration(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) @@ -476,20 +479,20 @@ func resourceTencentCloudAsScalingConfigCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudAsScalingConfigRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_config.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_config.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) configurationId := d.Id() asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { config, has, e := asService.DescribeLaunchConfigurationById(ctx, configurationId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if has == 0 { d.SetId("") @@ -570,9 +573,9 @@ func resourceTencentCloudAsScalingConfigRead(d *schema.ResourceData, meta interf } func resourceTencentCloudAsScalingConfigUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_config.update")() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_config.update")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := as.NewUpgradeLaunchConfigurationRequest() configurationId := d.Id() @@ -753,7 +756,7 @@ func resourceTencentCloudAsScalingConfigUpdate(d *schema.ResourceData, meta inte request.InstanceNameSettings = settings[0] } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().UpgradeLaunchConfiguration(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().UpgradeLaunchConfiguration(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) @@ -781,7 +784,7 @@ func resourceTencentCloudAsScalingConfigUpdate(d *schema.ResourceData, meta inte keepImageLogin := v.(bool) loginSettingRequest.LoginSettings.KeepImageLogin = &keepImageLogin } - loginSettingResponse, err := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().ModifyLaunchConfigurationAttributes(loginSettingRequest) + loginSettingResponse, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().ModifyLaunchConfigurationAttributes(loginSettingRequest) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, loginSettingRequest.GetAction(), loginSettingRequest.ToJsonString(), err.Error()) @@ -795,14 +798,14 @@ func resourceTencentCloudAsScalingConfigUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudAsScalingConfigDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_config.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_config.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) configurationId := d.Id() asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } err := asService.DeleteLaunchConfiguration(ctx, configurationId) if err != nil { diff --git a/tencentcloud/resource_tc_as_scaling_config_test.go b/tencentcloud/services/as/resource_tc_as_scaling_config_test.go similarity index 87% rename from tencentcloud/resource_tc_as_scaling_config_test.go rename to tencentcloud/services/as/resource_tc_as_scaling_config_test.go index 5644fa550d..10f29ce363 100644 --- a/tencentcloud/resource_tc_as_scaling_config_test.go +++ b/tencentcloud/services/as/resource_tc_as_scaling_config_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package as_test import ( "context" @@ -7,8 +7,13 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + svcas "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/as" ) func init() { @@ -16,16 +21,14 @@ func init() { resource.AddTestSweepers("tencentcloud_as_scaling_config", &resource.Sweeper{ Name: "tencentcloud_as_scaling_config", F: func(r string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) - sharedClient, err := sharedClientForRegion(r) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) + sharedClient, err := tcacctest.SharedClientForRegion(r) if err != nil { return fmt.Errorf("getting tencentcloud client error: %s", err.Error()) } - client := sharedClient.(*TencentCloudClient) - asService := AsService{ - client: client.apiV3Conn, - } + client := sharedClient.(tccommon.ProviderMeta) + asService := svcas.NewAsService(client.GetAPIV3Conn()) configs, err := asService.DescribeLaunchConfigurationByFilter(ctx, "", "") if err != nil { return err @@ -33,14 +36,14 @@ func init() { for _, config := range configs { instanceName := *config.LaunchConfigurationName now := time.Now() - createTime := stringTotime(*config.CreatedTime) + createTime := tccommon.StringToTime(*config.CreatedTime) interval := now.Sub(createTime).Minutes() - if strings.HasPrefix(instanceName, keepResource) || strings.HasPrefix(instanceName, defaultResource) { + if strings.HasPrefix(instanceName, tcacctest.KeepResource) || strings.HasPrefix(instanceName, tcacctest.DefaultResource) { continue } - if needProtect == 1 && int64(interval) < 30 { + if tccommon.NeedProtect == 1 && int64(interval) < 30 { continue } @@ -57,8 +60,8 @@ func init() { func TestAccTencentCloudAsScalingConfig_basic(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAsScalingConfigDestroy, Steps: []resource.TestStep{ { @@ -83,8 +86,8 @@ func TestAccTencentCloudAsScalingConfig_basic(t *testing.T) { func TestAccTencentCloudAsScalingConfig_loginSettings(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAsScalingConfigDestroy, Steps: []resource.TestStep{ { @@ -108,8 +111,8 @@ func TestAccTencentCloudAsScalingConfig_loginSettings(t *testing.T) { func TestAccTencentCloudAsScalingConfig_full(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAsScalingConfigDestroy, Steps: []resource.TestStep{ { @@ -126,7 +129,7 @@ func TestAccTencentCloudAsScalingConfig_full(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "data_disk.#", "1"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "data_disk.0.disk_type", "CLOUD_PREMIUM"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "data_disk.0.disk_size", "50"), - resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "internet_charge_type", "TRAFFIC_POSTPAID_BY_HOUR"), + resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "internet_charge_type", "TRAFFIC_tcacctest.POSTPAID_BY_HOUR"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "internet_max_bandwidth_out", "10"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "public_ip_assigned", "true"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "enhanced_security_service", "false"), @@ -170,8 +173,8 @@ func TestAccTencentCloudAsScalingConfig_full(t *testing.T) { func TestAccTencentCloudAsScalingConfig_charge(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAsScalingConfigDestroy, Steps: []resource.TestStep{ { @@ -196,7 +199,7 @@ func TestAccTencentCloudAsScalingConfig_charge(t *testing.T) { testAccCheckAsScalingConfigExists("tencentcloud_as_scaling_config.launch_configuration"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "instance_charge_type", "PREPAID"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "instance_charge_type_prepaid_period", "1"), - resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "instance_charge_type_prepaid_renew_flag", "NOTIFY_AND_MANUAL_RENEW"), + resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "instance_charge_type_prepaid_renew_flag", "NOTIFY_tcacctest.AND_MANUAL_RENEW"), ), }, }, @@ -205,8 +208,8 @@ func TestAccTencentCloudAsScalingConfig_charge(t *testing.T) { func testAccCheckAsScalingConfigExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -215,7 +218,7 @@ func testAccCheckAsScalingConfigExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("auto scaling configuration id is not set") } - asService := AsService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + asService := svcas.NewAsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := asService.DescribeLaunchConfigurationById(ctx, rs.Primary.ID) if err != nil { return err @@ -228,12 +231,10 @@ func testAccCheckAsScalingConfigExists(n string) resource.TestCheckFunc { } func testAccCheckAsScalingConfigDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - asService := AsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + asService := svcas.NewAsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_as_scaling_config" { continue @@ -275,7 +276,7 @@ resource "tencentcloud_as_scaling_config" "launch_configuration" { disk_size = 50 } - internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" + internet_charge_type = "TRAFFIC_tcacctest.POSTPAID_BY_HOUR" internet_max_bandwidth_out = 10 public_ip_assigned = true password = "test123#" @@ -311,7 +312,7 @@ resource "tencentcloud_as_scaling_config" "launch_configuration" { disk_size = 100 } - internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" + internet_charge_type = "TRAFFIC_tcacctest.POSTPAID_BY_HOUR" internet_max_bandwidth_out = 20 public_ip_assigned = true password = "test123#" @@ -365,7 +366,7 @@ resource "tencentcloud_as_scaling_config" "launch_configuration" { instance_types = ["SA1.SMALL1"] instance_charge_type = "PREPAID" instance_charge_type_prepaid_period = 1 - instance_charge_type_prepaid_renew_flag = "NOTIFY_AND_MANUAL_RENEW" + instance_charge_type_prepaid_renew_flag = "NOTIFY_tcacctest.AND_MANUAL_RENEW" } ` } diff --git a/tencentcloud/resource_tc_as_scaling_group.go b/tencentcloud/services/as/resource_tc_as_scaling_group.go similarity index 89% rename from tencentcloud/resource_tc_as_scaling_group.go rename to tencentcloud/services/as/resource_tc_as_scaling_group.go index 03ac09c25c..1120f0ab76 100644 --- a/tencentcloud/resource_tc_as_scaling_group.go +++ b/tencentcloud/services/as/resource_tc_as_scaling_group.go @@ -1,19 +1,22 @@ -package tencentcloud +package as import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudAsScalingGroup() *schema.Resource { +func ResourceTencentCloudAsScalingGroup() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsScalingGroupCreate, Read: resourceTencentCloudAsScalingGroupRead, @@ -27,7 +30,7 @@ func resourceTencentCloudAsScalingGroup() *schema.Resource { "scaling_group_name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 55), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 55), Description: "Name of a scaling group.", }, "configuration_id": { @@ -38,13 +41,13 @@ func resourceTencentCloudAsScalingGroup() *schema.Resource { "max_size": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateIntegerInRange(0, 2000), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 2000), Description: "Maximum number of CVM instances. Valid value ranges: (0~2000).", }, "min_size": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateIntegerInRange(0, 2000), + ValidateFunc: tccommon.ValidateIntegerInRange(0, 2000), Description: "Minimum number of CVM instances. Valid value ranges: (0~2000).", }, "vpc_id": { @@ -142,7 +145,7 @@ func resourceTencentCloudAsScalingGroup() *schema.Resource { Elem: &schema.Schema{ Type: schema.TypeString, Default: SCALING_GROUP_TERMINATION_POLICY_OLDEST_INSTANCE, - ValidateFunc: validateAllowedStringValue([]string{SCALING_GROUP_TERMINATION_POLICY_OLDEST_INSTANCE, + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{SCALING_GROUP_TERMINATION_POLICY_OLDEST_INSTANCE, SCALING_GROUP_TERMINATION_POLICY_NEWEST_INSTANCE}), }, }, @@ -151,7 +154,7 @@ func resourceTencentCloudAsScalingGroup() *schema.Resource { Optional: true, Description: "Available values for retry policies. Valid values: IMMEDIATE_RETRY and INCREMENTAL_INTERVALS.", Default: SCALING_GROUP_RETRY_POLICY_IMMEDIATE_RETRY, - ValidateFunc: validateAllowedStringValue([]string{SCALING_GROUP_RETRY_POLICY_IMMEDIATE_RETRY, + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{SCALING_GROUP_RETRY_POLICY_IMMEDIATE_RETRY, SCALING_GROUP_RETRY_POLICY_INCREMENTAL_INTERVALS}), }, "scaling_mode": { @@ -195,7 +198,7 @@ func resourceTencentCloudAsScalingGroup() *schema.Resource { "multi_zone_subnet_policy": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAllowedStringValue([]string{MultiZoneSubnetPolicyPriority, + ValidateFunc: tccommon.ValidateAllowedStringValue([]string{MultiZoneSubnetPolicyPriority, MultiZoneSubnetPolicyEquality}), Description: "Multi zone or subnet strategy, Valid values: PRIORITY and EQUALITY.", }, @@ -204,10 +207,10 @@ func resourceTencentCloudAsScalingGroup() *schema.Resource { } func resourceTencentCloudAsScalingGroupCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_group.create")() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_group.create")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) request := as.NewCreateAutoScalingGroupRequest() request.AutoScalingGroupName = helper.String(d.Get("scaling_group_name").(string)) @@ -319,14 +322,14 @@ func resourceTencentCloudAsScalingGroupCreate(d *schema.ResourceData, meta inter } var id string - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, err := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().CreateAutoScalingGroup(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().CreateAutoScalingGroup(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) - return retryError(err) + return tccommon.RetryError(err) } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", @@ -347,12 +350,12 @@ func resourceTencentCloudAsScalingGroupCreate(d *schema.ResourceData, meta inter // wait for status asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(2*readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(2*tccommon.ReadRetryTimeout, func() *resource.RetryError { scalingGroup, _, errRet := asService.DescribeAutoScalingGroupById(ctx, id) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } if scalingGroup != nil && *scalingGroup.InActivityStatus == SCALING_GROUP_NOT_IN_ACTIVITY_STATUS { return nil @@ -367,15 +370,15 @@ func resourceTencentCloudAsScalingGroupCreate(d *schema.ResourceData, meta inter } func resourceTencentCloudAsScalingGroupRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_group.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_group.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) scalingGroupId := d.Id() asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var ( @@ -383,10 +386,10 @@ func resourceTencentCloudAsScalingGroupRead(d *schema.ResourceData, meta interfa e error has int ) - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { scalingGroup, has, e = asService.DescribeAutoScalingGroupById(ctx, scalingGroupId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -452,7 +455,7 @@ func resourceTencentCloudAsScalingGroupRead(d *schema.ResourceData, meta interfa _ = d.Set("forward_balancer_ids", forwardLoadBalancers) } - tcClient := meta.(*TencentCloudClient).apiV3Conn + tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := &TagService{client: tcClient} tags, err := tagService.DescribeResourceTags(ctx, "as", "auto-scaling-group", tcClient.Region, d.Id()) if err != nil { @@ -465,12 +468,12 @@ func resourceTencentCloudAsScalingGroupRead(d *schema.ResourceData, meta interfa } func resourceTencentCloudAsScalingGroupUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_group.update")() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_group.update")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - client := meta.(*TencentCloudClient).apiV3Conn + client := meta.(tccommon.ProviderMeta).GetAPIV3Conn() tagService := TagService{client: client} region := client.Region @@ -564,14 +567,14 @@ func resourceTencentCloudAsScalingGroupUpdate(d *schema.ResourceData, meta inter } } - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) response, err := client.UseAsClient().ModifyAutoScalingGroup(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) - return retryError(err) + return tccommon.RetryError(err) } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", @@ -625,14 +628,14 @@ func resourceTencentCloudAsScalingGroupUpdate(d *schema.ResourceData, meta inter } if len(updateAttrs) > 0 { - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(balancerRequest.GetAction()) balancerResponse, err := client.UseAsClient().ModifyLoadBalancers(balancerRequest) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, balancerRequest.GetAction(), balancerRequest.ToJsonString(), err.Error()) - return retryError(err) + return tccommon.RetryError(err) } log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", @@ -648,7 +651,7 @@ func resourceTencentCloudAsScalingGroupUpdate(d *schema.ResourceData, meta inter oldValue, newValue := d.GetChange("tags") replaceTags, deleteTags := diffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{})) - resourceName := BuildTagResourceName("as", "auto-scaling-group", region, d.Id()) + resourceName := tccommon.BuildTagResourceName("as", "auto-scaling-group", region, d.Id()) err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags) if err != nil { return err @@ -661,14 +664,14 @@ func resourceTencentCloudAsScalingGroupUpdate(d *schema.ResourceData, meta inter } func resourceTencentCloudAsScalingGroupDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_group.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_group.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) scalingGroupId := d.Id() asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } // We need read the scaling group in order to check if there are instances. @@ -681,10 +684,10 @@ func resourceTencentCloudAsScalingGroupDelete(d *schema.ResourceData, meta inter return nil } if *scalingGroup.InstanceCount > 0 || *scalingGroup.DesiredCapacity > 0 { - if err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + if err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { inErr := asService.ClearScalingGroupInstance(ctx, scalingGroupId) if inErr != nil { - return retryError(inErr) + return tccommon.RetryError(inErr) } return nil }); err != nil { diff --git a/tencentcloud/resource_tc_as_scaling_group_status.go b/tencentcloud/services/as/resource_tc_as_scaling_group_status.go similarity index 70% rename from tencentcloud/resource_tc_as_scaling_group_status.go rename to tencentcloud/services/as/resource_tc_as_scaling_group_status.go index 3e5530b0ae..737195ccda 100644 --- a/tencentcloud/resource_tc_as_scaling_group_status.go +++ b/tencentcloud/services/as/resource_tc_as_scaling_group_status.go @@ -1,15 +1,17 @@ -package tencentcloud +package as import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" ) -func resourceTencentCloudAsScalingGroupStatus() *schema.Resource { +func ResourceTencentCloudAsScalingGroupStatus() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsScalingGroupStatusCreate, Read: resourceTencentCloudAsScalingGroupStatusRead, @@ -36,8 +38,8 @@ func resourceTencentCloudAsScalingGroupStatus() *schema.Resource { } func resourceTencentCloudAsScalingGroupStatusCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_group_status.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_group_status.create")() + defer tccommon.InconsistentCheck(d, meta)() autoScalingGroupId := d.Get("auto_scaling_group_id").(string) @@ -47,14 +49,14 @@ func resourceTencentCloudAsScalingGroupStatusCreate(d *schema.ResourceData, meta } func resourceTencentCloudAsScalingGroupStatusRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_group_status.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_group_status.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AsService{client: meta.(*TencentCloudClient).apiV3Conn} + service := AsService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} autoScalingGroupId := d.Id() @@ -85,10 +87,10 @@ func resourceTencentCloudAsScalingGroupStatusRead(d *schema.ResourceData, meta i } func resourceTencentCloudAsScalingGroupStatusUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_group_status.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_group_status.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( enable bool @@ -104,10 +106,10 @@ func resourceTencentCloudAsScalingGroupStatusUpdate(d *schema.ResourceData, meta if enable { enableAsRequest.AutoScalingGroupId = &autoScalingGroupId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().EnableAutoScalingGroup(enableAsRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().EnableAutoScalingGroup(enableAsRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, enableAsRequest.GetAction(), enableAsRequest.ToJsonString(), result.ToJsonString()) } @@ -119,10 +121,10 @@ func resourceTencentCloudAsScalingGroupStatusUpdate(d *schema.ResourceData, meta } } else { disableAsRequest.AutoScalingGroupId = &autoScalingGroupId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().DisableAutoScalingGroup(disableAsRequest) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().DisableAutoScalingGroup(disableAsRequest) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } else { log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, enableAsRequest.GetAction(), enableAsRequest.ToJsonString(), result.ToJsonString()) } @@ -138,8 +140,8 @@ func resourceTencentCloudAsScalingGroupStatusUpdate(d *schema.ResourceData, meta } func resourceTencentCloudAsScalingGroupStatusDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_group_status.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_group_status.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_as_scaling_group_status_test.go b/tencentcloud/services/as/resource_tc_as_scaling_group_status_test.go similarity index 82% rename from tencentcloud/resource_tc_as_scaling_group_status_test.go rename to tencentcloud/services/as/resource_tc_as_scaling_group_status_test.go index 0b7f28f13c..953a861c54 100644 --- a/tencentcloud/resource_tc_as_scaling_group_status_test.go +++ b/tencentcloud/services/as/resource_tc_as_scaling_group_status_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package as_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,9 +12,9 @@ func TestAccTencentCloudAsScalingGroupStatusResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccAsScalingGroupStatus, diff --git a/tencentcloud/resource_tc_as_scaling_group_test.go b/tencentcloud/services/as/resource_tc_as_scaling_group_test.go similarity index 86% rename from tencentcloud/resource_tc_as_scaling_group_test.go rename to tencentcloud/services/as/resource_tc_as_scaling_group_test.go index 8b7b8392dc..54fe752027 100644 --- a/tencentcloud/resource_tc_as_scaling_group_test.go +++ b/tencentcloud/services/as/resource_tc_as_scaling_group_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package as_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcas "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/as" + "context" "fmt" "log" @@ -19,18 +23,16 @@ func init() { } func testSweepAsScalingGroups(region string) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - sharedClient, err := sharedClientForRegion(region) + sharedClient, err := tcacctest.SharedClientForRegion(region) if err != nil { return fmt.Errorf("getting tencentcloud client error: %s", err.Error()) } - client := sharedClient.(*TencentCloudClient) + client := sharedClient.(tccommon.ProviderMeta) - asService := AsService{ - client: client.apiV3Conn, - } + asService := svcas.NewAsService(client.GetAPIV3Conn()) scalingGroups, err := asService.DescribeAutoScalingGroupByFilter(ctx, "", "", "", nil) if err != nil { return fmt.Errorf("list scaling group error: %s", err.Error()) @@ -53,8 +55,8 @@ func testSweepAsScalingGroups(region string) error { func TestAccTencentCloudAsScalingGroup_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAsScalingGroupDestroy, Steps: []resource.TestStep{ { @@ -83,8 +85,8 @@ func TestAccTencentCloudAsScalingGroup_basic(t *testing.T) { func TestAccTencentCloudAsScalingGroup_full(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAsScalingGroupDestroy, Steps: []resource.TestStep{ { @@ -120,7 +122,7 @@ func TestAccTencentCloudAsScalingGroup_full(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_as_scaling_group.scaling_group", "termination_policies.#", "1"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_group.scaling_group", "termination_policies.0", "OLDEST_INSTANCE"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_group.scaling_group", "retry_policy", "IMMEDIATE_RETRY"), - resource.TestCheckResourceAttr("tencentcloud_as_scaling_group.scaling_group", "scaling_mode", "WAKE_UP_STOPPED_SCALING"), + resource.TestCheckResourceAttr("tencentcloud_as_scaling_group.scaling_group", "scaling_mode", "WAKE_tcacctest.UP_STOPPED_SCALING"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_group.scaling_group", "replace_monitor_unhealthy", "true"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_group.scaling_group", "replace_load_balancer_unhealthy", "true"), resource.TestCheckNoResourceAttr("tencentcloud_as_scaling_group.scaling_group", "tags.test"), @@ -133,8 +135,8 @@ func TestAccTencentCloudAsScalingGroup_full(t *testing.T) { func testAccCheckAsScalingGroupExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -143,7 +145,7 @@ func testAccCheckAsScalingGroupExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("auto scaling group id is not set") } - asService := AsService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + asService := svcas.NewAsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := asService.DescribeAutoScalingGroupById(ctx, rs.Primary.ID) if err != nil { return err @@ -156,12 +158,10 @@ func testAccCheckAsScalingGroupExists(n string) resource.TestCheckFunc { } func testAccCheckAsScalingGroupDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - asService := AsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + asService := svcas.NewAsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_as_scaling_group" { continue @@ -198,7 +198,7 @@ resource "tencentcloud_as_scaling_group" "scaling_group" { vpc_id = "%s" subnet_ids = ["%s"] } -`, defaultVpcId, defaultSubnetId) +`, tcacctest.DefaultVpcId, tcacctest.DefaultSubnetId) } func testAccAsScalingGroup_full() string { @@ -230,7 +230,7 @@ resource "tencentcloud_as_scaling_group" "scaling_group" { "test" = "test" } } -`, defaultVpcId, defaultSubnetId) +`, tcacctest.DefaultVpcId, tcacctest.DefaultSubnetId) } func testAccAsScalingGroup_update() string { @@ -257,7 +257,7 @@ resource "tencentcloud_as_scaling_group" "scaling_group" { desired_capacity = 0 termination_policies = ["OLDEST_INSTANCE"] retry_policy = "IMMEDIATE_RETRY" - scaling_mode = "WAKE_UP_STOPPED_SCALING" + scaling_mode = "WAKE_tcacctest.UP_STOPPED_SCALING" replace_monitor_unhealthy = true replace_load_balancer_unhealthy = true @@ -265,5 +265,5 @@ resource "tencentcloud_as_scaling_group" "scaling_group" { "abc" = "abc" } } -`, defaultVpcId, defaultSubnetId) +`, tcacctest.DefaultVpcId, tcacctest.DefaultSubnetId) } diff --git a/tencentcloud/resource_tc_as_scaling_policy.go b/tencentcloud/services/as/resource_tc_as_scaling_policy.go similarity index 83% rename from tencentcloud/resource_tc_as_scaling_policy.go rename to tencentcloud/services/as/resource_tc_as_scaling_policy.go index 90d5e95b38..ce976999bf 100644 --- a/tencentcloud/resource_tc_as_scaling_policy.go +++ b/tencentcloud/services/as/resource_tc_as_scaling_policy.go @@ -1,17 +1,20 @@ -package tencentcloud +package as import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAsScalingPolicy() *schema.Resource { +func ResourceTencentCloudAsScalingPolicy() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsScalingPolicyCreate, Read: resourceTencentCloudAsScalingPolicyRead, @@ -33,7 +36,7 @@ func resourceTencentCloudAsScalingPolicy() *schema.Resource { "adjustment_type": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(SCALING_GROUP_ADJUSTMENT_TYPE), + ValidateFunc: tccommon.ValidateAllowedStringValue(SCALING_GROUP_ADJUSTMENT_TYPE), Description: "Specifies whether the adjustment is an absolute number or a percentage of the current capacity. Valid values: `CHANGE_IN_CAPACITY`, `EXACT_CAPACITY` and `PERCENT_CHANGE_IN_CAPACITY`.", }, "adjustment_value": { @@ -44,13 +47,13 @@ func resourceTencentCloudAsScalingPolicy() *schema.Resource { "comparison_operator": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(SCALING_GROUP_COMPARISON_OPERATOR), + ValidateFunc: tccommon.ValidateAllowedStringValue(SCALING_GROUP_COMPARISON_OPERATOR), Description: "Comparison operator. Valid values: `GREATER_THAN`, `GREATER_THAN_OR_EQUAL_TO`, `LESS_THAN`, `LESS_THAN_OR_EQUAL_TO`, `EQUAL_TO` and `NOT_EQUAL_TO`.", }, "metric_name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAllowedStringValue(SCALING_GROUP_METRIC_NAME), + ValidateFunc: tccommon.ValidateAllowedStringValue(SCALING_GROUP_METRIC_NAME), Description: "Name of an indicator. Valid values: `CPU_UTILIZATION`, `MEM_UTILIZATION`, `LAN_TRAFFIC_OUT`, `LAN_TRAFFIC_IN`, `WAN_TRAFFIC_OUT` and `WAN_TRAFFIC_IN`.", }, "threshold": { @@ -61,20 +64,20 @@ func resourceTencentCloudAsScalingPolicy() *schema.Resource { "period": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateAllowedIntValue([]int{60, 300}), + ValidateFunc: tccommon.ValidateAllowedIntValue([]int{60, 300}), Description: "Time period in second. Valid values: `60` and `300`.", }, "continuous_time": { Type: schema.TypeInt, Required: true, - ValidateFunc: validateIntegerInRange(1, 10), + ValidateFunc: tccommon.ValidateIntegerInRange(1, 10), Description: "Retry times. Valid value ranges: (1~10).", }, "statistic": { Type: schema.TypeString, Optional: true, Default: SCALING_GROUP_STATISTIC_AVERAGE, - ValidateFunc: validateAllowedStringValue(SCALING_GROUP_STATISTIC), + ValidateFunc: tccommon.ValidateAllowedStringValue(SCALING_GROUP_STATISTIC), Description: "Statistic types. Valid values: `AVERAGE`, `MAXIMUM` and `MINIMUM`. Default is `AVERAGE`.", }, "cooldown": { @@ -94,9 +97,9 @@ func resourceTencentCloudAsScalingPolicy() *schema.Resource { } func resourceTencentCloudAsScalingPolicyCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_policy.create")() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_policy.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := as.NewCreateScalingPolicyRequest() request.AutoScalingGroupId = helper.String(d.Get("scaling_group_id").(string)) @@ -125,7 +128,7 @@ func resourceTencentCloudAsScalingPolicyCreate(d *schema.ResourceData, meta inte } } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().CreateScalingPolicy(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().CreateScalingPolicy(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) @@ -143,20 +146,20 @@ func resourceTencentCloudAsScalingPolicyCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudAsScalingPolicyRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_policy.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_policy.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) scalingPolicyId := d.Id() asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { scalingPolicy, has, e := asService.DescribeScalingPolicyById(ctx, scalingPolicyId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if has == 0 { d.SetId("") @@ -184,9 +187,9 @@ func resourceTencentCloudAsScalingPolicyRead(d *schema.ResourceData, meta interf return nil } func resourceTencentCloudAsScalingPolicyUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_policy.update")() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_policy.update")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := as.NewModifyScalingPolicyRequest() scalingPolicyId := d.Id() @@ -222,7 +225,7 @@ func resourceTencentCloudAsScalingPolicyUpdate(d *schema.ResourceData, meta inte } } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().ModifyScalingPolicy(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().ModifyScalingPolicy(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) @@ -235,14 +238,14 @@ func resourceTencentCloudAsScalingPolicyUpdate(d *schema.ResourceData, meta inte } func resourceTencentCloudAsScalingPolicyDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_scaling_policy.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_as_scaling_policy.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) scalingPolicyId := d.Id() asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } err := asService.DeleteScalingPolicy(ctx, scalingPolicyId) if err != nil { diff --git a/tencentcloud/resource_tc_as_scaling_policy_test.go b/tencentcloud/services/as/resource_tc_as_scaling_policy_test.go similarity index 86% rename from tencentcloud/resource_tc_as_scaling_policy_test.go rename to tencentcloud/services/as/resource_tc_as_scaling_policy_test.go index a5b02c50dd..1463023baa 100644 --- a/tencentcloud/resource_tc_as_scaling_policy_test.go +++ b/tencentcloud/services/as/resource_tc_as_scaling_policy_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package as_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcas "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/as" + "context" "fmt" "testing" @@ -12,8 +16,8 @@ import ( func TestAccTencentCloudAsScalingPolicy(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAsScalingPolicyDestroy, Steps: []resource.TestStep{ { @@ -41,7 +45,7 @@ func TestAccTencentCloudAsScalingPolicy(t *testing.T) { resource.TestCheckResourceAttrSet("tencentcloud_as_scaling_policy.scaling_policy", "scaling_group_id"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_policy.scaling_policy", "adjustment_type", "CHANGE_IN_CAPACITY"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_policy.scaling_policy", "adjustment_value", "1"), - resource.TestCheckResourceAttr("tencentcloud_as_scaling_policy.scaling_policy", "comparison_operator", "GREATER_THAN_OR_EQUAL_TO"), + resource.TestCheckResourceAttr("tencentcloud_as_scaling_policy.scaling_policy", "comparison_operator", "GREATER_tcacctest.THAN_OR_EQUAL_TO"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_policy.scaling_policy", "metric_name", "MEM_UTILIZATION"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_policy.scaling_policy", "threshold", "85"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_policy.scaling_policy", "period", "60"), @@ -56,8 +60,8 @@ func TestAccTencentCloudAsScalingPolicy(t *testing.T) { func testAccCheckAsScalingPolicyExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -66,7 +70,7 @@ func testAccCheckAsScalingPolicyExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("auto scaling policy id is not set") } - asService := AsService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + asService := svcas.NewAsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := asService.DescribeScalingPolicyById(ctx, rs.Primary.ID) if err != nil { return err @@ -79,12 +83,10 @@ func testAccCheckAsScalingPolicyExists(n string) resource.TestCheckFunc { } func testAccCheckAsScalingPolicyDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - asService := AsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + asService := svcas.NewAsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_as_scaling_policy" { continue @@ -102,7 +104,7 @@ func testAccCheckAsScalingPolicyDestroy(s *terraform.State) error { } func testAccAsScalingPolicy() string { - return defaultAsVariable + ` + return tcacctest.DefaultAsVariable + ` resource "tencentcloud_vpc" "vpc" { name = "tf-as-vpc" cidr_block = "10.2.0.0/16" @@ -147,7 +149,7 @@ resource "tencentcloud_as_scaling_policy" "scaling_policy" { } func testAccAsScalingPolicy_update() string { - return defaultAsVariable + ` + return tcacctest.DefaultAsVariable + ` resource "tencentcloud_vpc" "vpc" { name = "tf-as-vpc" cidr_block = "10.2.0.0/16" @@ -180,7 +182,7 @@ resource "tencentcloud_as_scaling_policy" "scaling_policy" { policy_name = "tf-as-scaling-policy" adjustment_type = "CHANGE_IN_CAPACITY" adjustment_value = 1 - comparison_operator = "GREATER_THAN_OR_EQUAL_TO" + comparison_operator = "GREATER_tcacctest.THAN_OR_EQUAL_TO" metric_name = "MEM_UTILIZATION" threshold = 85 period = 60 diff --git a/tencentcloud/resource_tc_as_schedule.go b/tencentcloud/services/as/resource_tc_as_schedule.go similarity index 81% rename from tencentcloud/resource_tc_as_schedule.go rename to tencentcloud/services/as/resource_tc_as_schedule.go index 6158b029e6..c4bffa628d 100644 --- a/tencentcloud/resource_tc_as_schedule.go +++ b/tencentcloud/services/as/resource_tc_as_schedule.go @@ -1,17 +1,20 @@ -package tencentcloud +package as import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAsSchedule() *schema.Resource { +func ResourceTencentCloudAsSchedule() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsScheduleCreate, Read: resourceTencentCloudAsScheduleRead, @@ -28,7 +31,7 @@ func resourceTencentCloudAsSchedule() *schema.Resource { "schedule_action_name": { Type: schema.TypeString, Required: true, - ValidateFunc: validateStringLengthInRange(1, 60), + ValidateFunc: tccommon.ValidateStringLengthInRange(1, 60), Description: "The name of this scaling action.", }, "max_size": { @@ -49,13 +52,13 @@ func resourceTencentCloudAsSchedule() *schema.Resource { "start_time": { Type: schema.TypeString, Required: true, - ValidateFunc: validateAsScheduleTimestamp, + ValidateFunc: tccommon.ValidateAsScheduleTimestamp, Description: "The time for this action to start, in \"YYYY-MM-DDThh:mm:ss+08:00\" format (UTC+8).", }, "end_time": { Type: schema.TypeString, Optional: true, - ValidateFunc: validateAsScheduleTimestamp, + ValidateFunc: tccommon.ValidateAsScheduleTimestamp, Description: "The time for this action to end, in \"YYYY-MM-DDThh:mm:ss+08:00\" format (UTC+8).", }, "recurrence": { @@ -68,9 +71,9 @@ func resourceTencentCloudAsSchedule() *schema.Resource { } func resourceTencentCloudAsScheduleCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_schedule.create")() + defer tccommon.LogElapsed("resource.tencentcloud_as_schedule.create")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := as.NewCreateScheduledActionRequest() request.AutoScalingGroupId = helper.String(d.Get("scaling_group_id").(string)) @@ -94,7 +97,7 @@ func resourceTencentCloudAsScheduleCreate(d *schema.ResourceData, meta interface } } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().CreateScheduledAction(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().CreateScheduledAction(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) @@ -112,20 +115,20 @@ func resourceTencentCloudAsScheduleCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudAsScheduleRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_schedule.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_schedule.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) scheduledActionId := d.Id() asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { scheduledAction, has, e := asService.DescribeScheduledActionById(ctx, scheduledActionId) if e != nil { - return retryError(e) + return tccommon.RetryError(e) } if has == 0 { d.SetId("") @@ -154,9 +157,9 @@ func resourceTencentCloudAsScheduleRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudAsScheduleUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_schedule.update")() + defer tccommon.LogElapsed("resource.tencentcloud_as_schedule.update")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := as.NewModifyScheduledActionRequest() scheduledActionId := d.Id() @@ -185,7 +188,7 @@ func resourceTencentCloudAsScheduleUpdate(d *schema.ResourceData, meta interface request.EndTime = helper.String(d.Get("end_time").(string)) } - response, err := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().ModifyScheduledAction(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().ModifyScheduledAction(request) if err != nil { log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), err.Error()) @@ -198,14 +201,14 @@ func resourceTencentCloudAsScheduleUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudAsScheduleDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_schedule.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_as_schedule.delete")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) scheduledActionId := d.Id() asService := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } err := asService.DeleteScheduledAction(ctx, scheduledActionId) if err != nil { diff --git a/tencentcloud/resource_tc_as_schedule_test.go b/tencentcloud/services/as/resource_tc_as_schedule_test.go similarity index 87% rename from tencentcloud/resource_tc_as_schedule_test.go rename to tencentcloud/services/as/resource_tc_as_schedule_test.go index 5d7fddc923..fa11aca6cd 100644 --- a/tencentcloud/resource_tc_as_schedule_test.go +++ b/tencentcloud/services/as/resource_tc_as_schedule_test.go @@ -1,6 +1,10 @@ -package tencentcloud +package as_test import ( + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + svcas "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/as" + "context" "fmt" "testing" @@ -16,8 +20,8 @@ func TestAccTencentCloudAsSchedule(t *testing.T) { endTime := time.Now().AddDate(0, 1, 0).Format("2006-01-02T15:04:05+08:00") resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAsScheduleDestroy, Steps: []resource.TestStep{ { @@ -52,8 +56,8 @@ func TestAccTencentCloudAsSchedule(t *testing.T) { func testAccCheckAsScheduleExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -62,7 +66,7 @@ func testAccCheckAsScheduleExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("auto scaling schedule id is not set") } - asService := AsService{client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn} + asService := svcas.NewAsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := asService.DescribeScheduledActionById(ctx, rs.Primary.ID) if err != nil { return err @@ -75,12 +79,10 @@ func testAccCheckAsScheduleExists(n string) resource.TestCheckFunc { } func testAccCheckAsScheduleDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - asService := AsService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + asService := svcas.NewAsService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_as_schedule" { continue diff --git a/tencentcloud/resource_tc_as_start_instances.go b/tencentcloud/services/as/resource_tc_as_start_instances.go similarity index 73% rename from tencentcloud/resource_tc_as_start_instances.go rename to tencentcloud/services/as/resource_tc_as_start_instances.go index 512c35e38c..982227c119 100644 --- a/tencentcloud/resource_tc_as_start_instances.go +++ b/tencentcloud/services/as/resource_tc_as_start_instances.go @@ -1,17 +1,20 @@ -package tencentcloud +package as import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAsStartInstances() *schema.Resource { +func ResourceTencentCloudAsStartInstances() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsStartInstancesCreate, Read: resourceTencentCloudAsStartInstancesRead, @@ -38,10 +41,10 @@ func resourceTencentCloudAsStartInstances() *schema.Resource { } func resourceTencentCloudAsStartInstancesCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_as_start_instances.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_as_start_instances.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = as.NewStartAutoScalingInstancesRequest() @@ -60,10 +63,10 @@ func resourceTencentCloudAsStartInstancesCreate(d *schema.ResourceData, meta int } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().StartAutoScalingInstances(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().StartAutoScalingInstances(request) if e != nil { - return retryError(e) + 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()) } @@ -77,12 +80,12 @@ func resourceTencentCloudAsStartInstancesCreate(d *schema.ResourceData, meta int activityId = *response.Response.ActivityId - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) service := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err = resource.Retry(4*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(4*tccommon.ReadRetryTimeout, func() *resource.RetryError { status, err := service.DescribeActivityById(ctx, activityId) if err != nil { return resource.NonRetryableError(err) @@ -105,15 +108,15 @@ func resourceTencentCloudAsStartInstancesCreate(d *schema.ResourceData, meta int } func resourceTencentCloudAsStartInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_start_instances.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_start_instances.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudAsStartInstancesDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_start_instances.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_start_instances.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/resource_tc_as_stop_instances.go b/tencentcloud/services/as/resource_tc_as_stop_instances.go similarity index 75% rename from tencentcloud/resource_tc_as_stop_instances.go rename to tencentcloud/services/as/resource_tc_as_stop_instances.go index b14e33eb79..d54586e22b 100644 --- a/tencentcloud/resource_tc_as_stop_instances.go +++ b/tencentcloud/services/as/resource_tc_as_stop_instances.go @@ -1,17 +1,20 @@ -package tencentcloud +package as import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAsStopInstances() *schema.Resource { +func ResourceTencentCloudAsStopInstances() *schema.Resource { return &schema.Resource{ Create: resourceTencentCloudAsStopInstancesCreate, Read: resourceTencentCloudAsStopInstancesRead, @@ -45,10 +48,10 @@ func resourceTencentCloudAsStopInstances() *schema.Resource { } func resourceTencentCloudAsStopInstancesCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_as_stop_instances.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("data_source.tencentcloud_as_stop_instances.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = as.NewStopAutoScalingInstancesRequest() @@ -71,10 +74,10 @@ func resourceTencentCloudAsStopInstancesCreate(d *schema.ResourceData, meta inte request.StoppedMode = helper.String(v.(string)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAsClient().StopAutoScalingInstances(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAsClient().StopAutoScalingInstances(request) if e != nil { - return retryError(e) + 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()) } @@ -88,12 +91,12 @@ func resourceTencentCloudAsStopInstancesCreate(d *schema.ResourceData, meta inte activityId = *response.Response.ActivityId - ctx := context.WithValue(context.TODO(), logIdKey, logId) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) service := AsService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } - err = resource.Retry(4*readRetryTimeout, func() *resource.RetryError { + err = resource.Retry(4*tccommon.ReadRetryTimeout, func() *resource.RetryError { status, err := service.DescribeActivityById(ctx, activityId) if err != nil { return resource.NonRetryableError(err) @@ -116,15 +119,15 @@ func resourceTencentCloudAsStopInstancesCreate(d *schema.ResourceData, meta inte } func resourceTencentCloudAsStopInstancesRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_stop_instances.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_stop_instances.read")() + defer tccommon.InconsistentCheck(d, meta)() return nil } func resourceTencentCloudAsStopInstancesDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_as_stop_instances.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_as_stop_instances.delete")() + defer tccommon.InconsistentCheck(d, meta)() return nil } diff --git a/tencentcloud/services/as/service_tencentcloud_as.go b/tencentcloud/services/as/service_tencentcloud_as.go new file mode 100644 index 0000000000..a45b8de179 --- /dev/null +++ b/tencentcloud/services/as/service_tencentcloud_as.go @@ -0,0 +1,775 @@ +package as + +import ( + "context" + "fmt" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + as "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as/v20180419" + sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +func NewAsService(client *connectivity.TencentCloudClient) AsService { + return AsService{client: client} +} + +type AsService struct { + client *connectivity.TencentCloudClient +} + +func (me *AsService) DescribeLaunchConfigurationById(ctx context.Context, configurationId string) (config *as.LaunchConfiguration, has int, errRet error) { + logId := tccommon.GetLogId(ctx) + request := as.NewDescribeLaunchConfigurationsRequest() + request.LaunchConfigurationIds = []*string{&configurationId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseAsClient().DescribeLaunchConfigurations(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + has = len(response.Response.LaunchConfigurationSet) + if has < 1 { + return + } + config = response.Response.LaunchConfigurationSet[0] + return +} + +func (me *AsService) DescribeLaunchConfigurationByFilter(ctx context.Context, configurationId, configurationName string) (configs []*as.LaunchConfiguration, errRet error) { + logId := tccommon.GetLogId(ctx) + request := as.NewDescribeLaunchConfigurationsRequest() + request.Filters = make([]*as.Filter, 0) + if configurationId != "" { + filter := &as.Filter{ + Name: helper.String("launch-configuration-id"), + Values: []*string{&configurationId}, + } + request.Filters = append(request.Filters, filter) + } + if configurationName != "" { + filter := &as.Filter{ + Name: helper.String("launch-configuration-name"), + Values: []*string{&configurationName}, + } + request.Filters = append(request.Filters, filter) + } + + offset := 0 + pageSize := 100 + configs = make([]*as.LaunchConfiguration, 0) + for { + request.Offset = helper.IntUint64(offset) + request.Limit = helper.IntUint64(pageSize) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseAsClient().DescribeLaunchConfigurations(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + if response == nil || len(response.Response.LaunchConfigurationSet) < 1 { + break + } + configs = append(configs, response.Response.LaunchConfigurationSet...) + if len(response.Response.LaunchConfigurationSet) < pageSize { + break + } + offset += pageSize + } + return +} + +func (me *AsService) DeleteLaunchConfiguration(ctx context.Context, configurationId string) error { + logId := tccommon.GetLogId(ctx) + request := as.NewDeleteLaunchConfigurationRequest() + request.LaunchConfigurationId = &configurationId + ratelimit.Check(request.GetAction()) + _, err := me.client.UseAsClient().DeleteLaunchConfiguration(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *AsService) DescribeAutoScalingGroupById(ctx context.Context, scalingGroupId string) (scalingGroup *as.AutoScalingGroup, has int, errRet error) { + logId := tccommon.GetLogId(ctx) + request := as.NewDescribeAutoScalingGroupsRequest() + request.AutoScalingGroupIds = []*string{&scalingGroupId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseAsClient().DescribeAutoScalingGroups(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + has = len(response.Response.AutoScalingGroupSet) + if has < 1 { + return + } + scalingGroup = response.Response.AutoScalingGroupSet[0] + return +} + +func (me *AsService) DescribeAutoScalingGroupByFilter( + ctx context.Context, + scalingGroupId, configurationId, scalingGroupName string, + tags map[string]string, +) (scalingGroups []*as.AutoScalingGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + request := as.NewDescribeAutoScalingGroupsRequest() + request.Filters = make([]*as.Filter, 0) + if scalingGroupId != "" { + filter := &as.Filter{ + Name: helper.String("auto-scaling-group-id"), + Values: []*string{&scalingGroupId}, + } + request.Filters = append(request.Filters, filter) + } + if configurationId != "" { + filter := &as.Filter{ + Name: helper.String("launch-configuration-id"), + Values: []*string{&configurationId}, + } + request.Filters = append(request.Filters, filter) + } + if scalingGroupName != "" { + filter := &as.Filter{ + Name: helper.String("auto-scaling-group-name"), + Values: []*string{&scalingGroupName}, + } + request.Filters = append(request.Filters, filter) + } + for k, v := range tags { + request.Filters = append(request.Filters, &as.Filter{ + Name: helper.String("tag:" + k), + Values: []*string{helper.String(v)}, + }) + } + + offset := 0 + pageSize := 100 + scalingGroups = make([]*as.AutoScalingGroup, 0) + for { + request.Offset = helper.IntUint64(offset) + request.Limit = helper.IntUint64(pageSize) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseAsClient().DescribeAutoScalingGroups(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + if response == nil || len(response.Response.AutoScalingGroupSet) < 1 { + break + } + scalingGroups = append(scalingGroups, response.Response.AutoScalingGroupSet...) + if len(response.Response.AutoScalingGroupSet) < pageSize { + break + } + offset += pageSize + } + return +} + +// set the scaling group desired capacity to 0 +func (me *AsService) ClearScalingGroupInstance(ctx context.Context, scalingGroupId string) error { + logId := tccommon.GetLogId(ctx) + request := as.NewModifyAutoScalingGroupRequest() + request.AutoScalingGroupId = &scalingGroupId + request.MinSize = helper.IntUint64(0) + request.MaxSize = helper.IntUint64(0) + request.DesiredCapacity = helper.IntUint64(0) + ratelimit.Check(request.GetAction()) + _, err := me.client.UseAsClient().ModifyAutoScalingGroup(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *AsService) DeleteScalingGroup(ctx context.Context, scalingGroupId string) error { + logId := tccommon.GetLogId(ctx) + request := as.NewDeleteAutoScalingGroupRequest() + request.AutoScalingGroupId = &scalingGroupId + ratelimit.Check(request.GetAction()) + _, err := me.client.UseAsClient().DeleteAutoScalingGroup(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *AsService) AttachInstances(ctx context.Context, scalingGroupId string, instanceIds []string) error { + logId := tccommon.GetLogId(ctx) + request := as.NewAttachInstancesRequest() + request.AutoScalingGroupId = &scalingGroupId + request.InstanceIds = make([]*string, 0, len(instanceIds)) + for i := range instanceIds { + request.InstanceIds = append(request.InstanceIds, &instanceIds[i]) + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseAsClient().AttachInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + activityId := *response.Response.ActivityId + + err = resource.Retry(4*tccommon.ReadRetryTimeout, func() *resource.RetryError { + status, err := me.DescribeActivityById(ctx, activityId) + if err != nil { + return resource.NonRetryableError(err) + } + if status == SCALING_GROUP_ACTIVITY_STATUS_INIT || status == SCALING_GROUP_ACTIVITY_STATUS_RUNNING { + return resource.RetryableError(fmt.Errorf("attach status is running(%s)", status)) + } + if status == SCALING_GROUP_ACTIVITY_STATUS_SUCCESSFUL { + return nil + } + return resource.NonRetryableError(fmt.Errorf("attach status is failed(%s)", status)) + }) + if err != nil { + return err + } + return nil +} + +func (me *AsService) DescribeActivityById(ctx context.Context, activityId string) (status string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := as.NewDescribeAutoScalingActivitiesRequest() + request.ActivityIds = []*string{&activityId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseAsClient().DescribeAutoScalingActivities(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + if len(response.Response.ActivitySet) < 1 { + errRet = fmt.Errorf("activity id set is nil") + } + status = *response.Response.ActivitySet[0].StatusCode + return +} + +func (me *AsService) DetachInstances(ctx context.Context, scalingGroupId string, instanceIds []string) error { + logId := tccommon.GetLogId(ctx) + request := as.NewDetachInstancesRequest() + request.AutoScalingGroupId = &scalingGroupId + request.InstanceIds = make([]*string, 0, len(instanceIds)) + for i := range instanceIds { + request.InstanceIds = append(request.InstanceIds, &instanceIds[i]) + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseAsClient().DetachInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + activityId := *response.Response.ActivityId + + err = resource.Retry(4*tccommon.ReadRetryTimeout, func() *resource.RetryError { + status, err := me.DescribeActivityById(ctx, activityId) + if err != nil { + return resource.NonRetryableError(err) + } + if status == SCALING_GROUP_ACTIVITY_STATUS_INIT || status == SCALING_GROUP_ACTIVITY_STATUS_RUNNING { + return resource.RetryableError(fmt.Errorf("detach status is running(%s)", status)) + } + if status == SCALING_GROUP_ACTIVITY_STATUS_SUCCESSFUL { + return nil + } + return resource.NonRetryableError(fmt.Errorf("detach status is failed(%s)", status)) + }) + if err != nil { + return err + } + return nil +} + +func (me *AsService) DescribeAutoScalingAttachment(ctx context.Context, scalingGroupId string, fully bool) (instanceIds []string, errRet error) { + logId := tccommon.GetLogId(ctx) + request := as.NewDescribeAutoScalingInstancesRequest() + request.Filters = []*as.Filter{ + { + Name: helper.String("auto-scaling-group-id"), + Values: []*string{&scalingGroupId}, + }, + } + ratelimit.Check(request.GetAction()) + response, err := me.client.UseAsClient().DescribeAutoScalingInstances(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + + instanceIds = make([]string, 0) + for _, instance := range response.Response.AutoScalingInstanceSet { + if *instance.CreationType == "MANUAL_ATTACHING" || fully { + instanceIds = append(instanceIds, *instance.InstanceId) + } + } + return +} + +func (me *AsService) DescribeScalingPolicyById(ctx context.Context, scalingPolicyId string) (scalingPolicy *as.ScalingPolicy, has int, errRet error) { + logId := tccommon.GetLogId(ctx) + request := as.NewDescribeScalingPoliciesRequest() + request.AutoScalingPolicyIds = []*string{&scalingPolicyId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseAsClient().DescribeScalingPolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + has = len(response.Response.ScalingPolicySet) + if has < 1 { + return + } + scalingPolicy = response.Response.ScalingPolicySet[0] + return +} + +func (me *AsService) DescribeScalingPolicyByFilter(ctx context.Context, policyId, policyName, scalingGroupId string) (scalingPolicies []*as.ScalingPolicy, errRet error) { + logId := tccommon.GetLogId(ctx) + request := as.NewDescribeScalingPoliciesRequest() + request.Filters = make([]*as.Filter, 0) + if policyId != "" { + filter := &as.Filter{ + Name: helper.String("auto-scaling-policy-id"), + Values: []*string{&policyId}, + } + request.Filters = append(request.Filters, filter) + } + if policyName != "" { + filter := &as.Filter{ + Name: helper.String("scaling-policy-name"), + Values: []*string{&policyName}, + } + request.Filters = append(request.Filters, filter) + } + if scalingGroupId != "" { + filter := &as.Filter{ + Name: helper.String("auto-scaling-group-id"), + Values: []*string{&scalingGroupId}, + } + request.Filters = append(request.Filters, filter) + } + + offset := 0 + pageSize := 100 + scalingPolicies = make([]*as.ScalingPolicy, 0) + for { + request.Offset = helper.IntUint64(offset) + request.Limit = helper.IntUint64(pageSize) + ratelimit.Check(request.GetAction()) + response, err := me.client.UseAsClient().DescribeScalingPolicies(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + if response == nil || len(response.Response.ScalingPolicySet) < 1 { + break + } + scalingPolicies = append(scalingPolicies, response.Response.ScalingPolicySet...) + if len(response.Response.ScalingPolicySet) < pageSize { + break + } + offset += pageSize + } + return +} + +func (me *AsService) DeleteScalingPolicy(ctx context.Context, scalingPolicyId string) error { + logId := tccommon.GetLogId(ctx) + request := as.NewDeleteScalingPolicyRequest() + request.AutoScalingPolicyId = &scalingPolicyId + ratelimit.Check(request.GetAction()) + _, err := me.client.UseAsClient().DeleteScalingPolicy(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *AsService) DescribeScheduledActionById(ctx context.Context, scheduledActionId string) (scheduledAction *as.ScheduledAction, has int, errRet error) { + logId := tccommon.GetLogId(ctx) + request := as.NewDescribeScheduledActionsRequest() + request.ScheduledActionIds = []*string{&scheduledActionId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseAsClient().DescribeScheduledActions(request) + if err != nil { + sdkErr, ok := err.(*sdkErrors.TencentCloudSDKError) + if ok && sdkErr.Code == AsScheduleNotFound { + has = 0 + return + } + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + + has = len(response.Response.ScheduledActionSet) + if has < 1 { + return + } + scheduledAction = response.Response.ScheduledActionSet[0] + return +} + +func (me *AsService) ModifyAutoScalingGroup(ctx context.Context, request *as.ModifyAutoScalingGroupRequest) (errRet error) { + logId := tccommon.GetLogId(ctx) + 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.UseAsClient().ModifyAutoScalingGroup(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 +} + +func (me *AsService) DeleteScheduledAction(ctx context.Context, scheduledActonId string) error { + logId := tccommon.GetLogId(ctx) + request := as.NewDeleteScheduledActionRequest() + request.ScheduledActionId = &scheduledActonId + ratelimit.Check(request.GetAction()) + _, err := me.client.UseAsClient().DeleteScheduledAction(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *AsService) DescribeLifecycleHookById(ctx context.Context, lifecycleHookId string) (lifecycleHook *as.LifecycleHook, has int, errRet error) { + logId := tccommon.GetLogId(ctx) + request := as.NewDescribeLifecycleHooksRequest() + request.LifecycleHookIds = []*string{&lifecycleHookId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseAsClient().DescribeLifecycleHooks(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + has = len(response.Response.LifecycleHookSet) + if has < 1 { + return + } + lifecycleHook = response.Response.LifecycleHookSet[0] + return +} + +func (me *AsService) DeleteLifecycleHook(ctx context.Context, lifecycleHookId string) error { + logId := tccommon.GetLogId(ctx) + request := as.NewDeleteLifecycleHookRequest() + request.LifecycleHookId = &lifecycleHookId + ratelimit.Check(request.GetAction()) + _, err := me.client.UseAsClient().DeleteLifecycleHook(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *AsService) DescribeNotificationById(ctx context.Context, notificationId string) (notification *as.AutoScalingNotification, has int, errRet error) { + logId := tccommon.GetLogId(ctx) + request := as.NewDescribeNotificationConfigurationsRequest() + request.AutoScalingNotificationIds = []*string{¬ificationId} + ratelimit.Check(request.GetAction()) + response, err := me.client.UseAsClient().DescribeNotificationConfigurations(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + errRet = err + return + } + has = len(response.Response.AutoScalingNotificationSet) + if has < 1 { + return + } + notification = response.Response.AutoScalingNotificationSet[0] + return +} + +func (me *AsService) DeleteNotification(ctx context.Context, notificationId string) error { + logId := tccommon.GetLogId(ctx) + request := as.NewDeleteNotificationConfigurationRequest() + request.AutoScalingNotificationId = ¬ificationId + ratelimit.Check(request.GetAction()) + _, err := me.client.UseAsClient().DeleteNotificationConfiguration(request) + if err != nil { + log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", + logId, request.GetAction(), request.ToJsonString(), err.Error()) + return err + } + return nil +} + +func (me *AsService) DescribeAsInstancesByFilter(ctx context.Context, param map[string]interface{}) (instances []*as.Instance, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = as.NewDescribeAutoScalingInstancesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "instance_ids" { + request.InstanceIds = helper.Strings(v.([]string)) + } + if k == "filters" { + request.Filters = v.([]*as.Filter) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset int64 = 0 + limit int64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseAsClient().DescribeAutoScalingInstances(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()) + + if response == nil || len(response.Response.AutoScalingInstanceSet) < 1 { + break + } + instances = append(instances, response.Response.AutoScalingInstanceSet...) + if len(response.Response.AutoScalingInstanceSet) < int(limit) { + break + } + + offset += limit + } + + return +} + +func flattenDataDiskMappings(list []*as.DataDisk) []map[string]interface{} { + result := make([]map[string]interface{}, 0, len(list)) + for _, v := range list { + disk := map[string]interface{}{ + "disk_size": *v.DiskSize, + } + if v.DiskType != nil { + disk["disk_type"] = *v.DiskType + } + if v.SnapshotId != nil { + disk["snapshot_id"] = *v.SnapshotId + } + if v.DeleteWithInstance != nil { + disk["delete_with_instance"] = *v.DeleteWithInstance + } + result = append(result, disk) + } + return result +} + +func flattenInstanceTagsMapping(list []*as.InstanceTag) map[string]interface{} { + result := make(map[string]interface{}, len(list)) + for _, v := range list { + result[*v.Key] = *v.Value + } + return result +} + +func (me *AsService) DescribeAsAdvices(ctx context.Context, param map[string]interface{}) (advices []*as.AutoScalingAdvice, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = as.NewDescribeAutoScalingAdvicesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AutoScalingGroupIds" { + request.AutoScalingGroupIds = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseAsClient().DescribeAutoScalingAdvices(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()) + + advices = response.Response.AutoScalingAdviceSet + + return +} + +func (me *AsService) DescribeAsLimits(ctx context.Context) (limits *as.DescribeAccountLimitsResponseParams, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = as.NewDescribeAccountLimitsRequest() + ) + + 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.UseAsClient().DescribeAccountLimits(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()) + + limits = response.Response + + return +} + +func (me *AsService) DescribeAsLastActivity(ctx context.Context, param map[string]interface{}) (lastActivity []*as.Activity, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = as.NewDescribeAutoScalingGroupLastActivitiesRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AutoScalingGroupIds" { + request.AutoScalingGroupIds = v.([]*string) + } + } + + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseAsClient().DescribeAutoScalingGroupLastActivities(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()) + + lastActivity = response.Response.ActivitySet + + return +} + +func (me *AsService) DescribeAsLoadBalancerById(ctx context.Context, autoScalingGroupId string) (loadBalancer *as.AutoScalingGroup, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := as.NewDescribeAutoScalingGroupsRequest() + request.AutoScalingGroupIds = []*string{&autoScalingGroupId} + + 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.UseAsClient().DescribeAutoScalingGroups(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()) + + if len(response.Response.AutoScalingGroupSet) < 1 { + return + } + + loadBalancer = response.Response.AutoScalingGroupSet[0] + return +} + +func (me *AsService) DeleteAsLoadBalancerById(ctx context.Context, autoScalingGroupId string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := as.NewDetachLoadBalancersRequest() + request.AutoScalingGroupId = &autoScalingGroupId + + 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.UseAsClient().DetachLoadBalancers(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 +} diff --git a/tencentcloud/services/as/service_tencentcloud_tag.go b/tencentcloud/services/as/service_tencentcloud_tag.go new file mode 100644 index 0000000000..6737d37b64 --- /dev/null +++ b/tencentcloud/services/as/service_tencentcloud_tag.go @@ -0,0 +1,415 @@ +package as + +import ( + "context" + "log" + + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/pkg/errors" + tag "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tag/v20180813" + + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" +) + +//internal version: replace tagFmt begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace tagFmt end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +type TagService struct { + client *connectivity.TencentCloudClient +} + +func (me *TagService) ModifyTags(ctx context.Context, resourceName string, replaceTags map[string]string, deleteKeys []string) error { + request := tag.NewModifyResourceTagsRequest() + request.Resource = &resourceName + if len(replaceTags) > 0 { + request.ReplaceTags = make([]*tag.Tag, 0, len(replaceTags)) + for k, v := range replaceTags { + key := k + value := v + replaceTag := &tag.Tag{ + TagKey: &key, + TagValue: &value, + } + request.ReplaceTags = append(request.ReplaceTags, replaceTag) + } + } + if len(deleteKeys) > 0 { + request.DeleteTags = make([]*tag.TagKeyObject, 0, len(deleteKeys)) + for _, v := range deleteKeys { + key := v + deleteKey := &tag.TagKeyObject{ + TagKey: &key, + } + request.DeleteTags = append(request.DeleteTags, deleteKey) + } + } + + return resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + if _, err := me.client.UseTagClient().ModifyResourceTags(request); err != nil { + return tccommon.RetryError(errors.WithStack(err)) + } + + return nil + }) +} + +func (me *TagService) DescribeResourceTags(ctx context.Context, serviceType, resourceType, region, resourceId string) (tags map[string]string, err error) { + request := tag.NewDescribeResourceTagsByResourceIdsRequest() + request.ServiceType = &serviceType + request.ResourcePrefix = &resourceType + request.ResourceRegion = ®ion + request.ResourceIds = []*string{&resourceId} + request.Limit = helper.IntUint64(DESCRIBE_TAGS_LIMIT) + + var offset uint64 + request.Offset = &offset + + // for run loop at least once + count := DESCRIBE_TAGS_LIMIT + for count == DESCRIBE_TAGS_LIMIT { + if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { + ratelimit.Check(request.GetAction()) + + response, err := me.client.UseTagClient().DescribeResourceTagsByResourceIds(request) + if err != nil { + count = 0 + + return tccommon.RetryError(errors.WithStack(err)) + } + + allTags := response.Response.Tags + count = len(allTags) + + for _, t := range allTags { + if *t.ResourceId != resourceId { + continue + } + if tags == nil { + tags = make(map[string]string) + } + + tags[*t.TagKey] = *t.TagValue + } + + return nil + }); err != nil { + return nil, err + } + + offset += uint64(count) + } + + return +} + +//internal version: replace waitTag begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. +//internal version: replace waitTag end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation. + +func diffTags(oldTags, newTags map[string]interface{}) (replaceTags map[string]string, deleteTags []string) { + replaceTags = make(map[string]string) + deleteTags = make([]string, 0) + for k, v := range newTags { + _, ok := oldTags[k] + if !ok || oldTags[k].(string) != v.(string) { + replaceTags[k] = v.(string) + } + } + for k := range oldTags { + _, ok := newTags[k] + if !ok { + deleteTags = append(deleteTags, k) + } + } + return +} + +func (me *TagService) DescribeProjectById(ctx context.Context, projectId uint64) (project *tag.Project, disable *uint64, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDescribeProjectsRequest() + + 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()) + + // query enable project + request.AllList = helper.Uint64(0) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + instances := make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(0) + break + } + } + + if project != nil { + return + } + + // query all project + offset = 0 + limit = 20 + + request.AllList = helper.Uint64(1) + instances = make([]*tag.Project, 0) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + instances = append(instances, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + offset += limit + } + + for _, instance := range instances { + if *instance.ProjectId == projectId { + project = instance + disable = helper.Uint64(1) + break + } + } + + return +} + +func (me *TagService) DisableProjectById(ctx context.Context, projectId uint64) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewUpdateProjectRequest() + request.ProjectId = &projectId + request.Disable = helper.Int64(1) + + 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.UseTagClient().UpdateProject(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 +} + +func (me *TagService) DescribeProjects(ctx context.Context, param map[string]interface{}) (project []*tag.Project, errRet error) { + var ( + logId = tccommon.GetLogId(ctx) + request = tag.NewDescribeProjectsRequest() + ) + + 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()) + } + }() + + for k, v := range param { + if k == "AllList" { + request.AllList = v.(*uint64) + } + } + + ratelimit.Check(request.GetAction()) + + var ( + offset uint64 = 0 + limit uint64 = 20 + ) + for { + request.Offset = &offset + request.Limit = &limit + response, err := me.client.UseTagClient().DescribeProjects(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()) + + if response == nil || len(response.Response.Projects) < 1 { + break + } + project = append(project, response.Response.Projects...) + if len(response.Response.Projects) < int(limit) { + break + } + + offset += limit + } + + return +} + +func (me *TagService) DescribeTagResourceById(ctx context.Context, tagKey string, tagValue string) (tagRes *tag.Tag, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetTagsRequest() + request.TagKeys = []*string{&tagKey} + + 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.UseTagClient().GetTags(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()) + + if response == nil || response.Response == nil || len(response.Response.Tags) < 1 { + return + } + for _, v := range response.Response.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + tagRes = v + } + } + return +} + +func (me *TagService) DeleteTagResourceById(ctx context.Context, tagKey string, tagValue string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteTagRequest() + request.TagKey = &tagKey + request.TagValue = &tagValue + + 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.UseTagClient().DeleteTag(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 +} +func (me *TagService) DescribeTagTagAttachmentById(ctx context.Context, tagKey string, tagValue string, resource string) (resourceTag *tag.ResourceTagMapping, errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewGetResourcesRequest() + request.ResourceList = []*string{&resource} + + 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.UseTagClient().GetResources(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()) + + if response == nil || response.Response == nil || len(response.Response.ResourceTagMappingList) < 1 { + return + } + for _, resourceTagMap := range response.Response.ResourceTagMappingList { + if *resourceTagMap.Resource == resource { + for _, v := range resourceTagMap.Tags { + if *v.TagKey == tagKey && *v.TagValue == tagValue { + resourceTag = &tag.ResourceTagMapping{ + Resource: &resource, + Tags: []*tag.Tag{ + {TagKey: v.TagKey, TagValue: &tagValue}, + }, + } + } + } + } + } + return +} + +func (me *TagService) DeleteTagTagAttachmentById(ctx context.Context, tagKey string, resource string) (errRet error) { + logId := tccommon.GetLogId(ctx) + + request := tag.NewDeleteResourceTagRequest() + request.TagKey = &tagKey + request.Resource = &resource + + 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.UseTagClient().DeleteResourceTag(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 6ce1fd8e6442e5583ca2bec6cdde37080589d892 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 16:34:26 +0800 Subject: [PATCH 29/31] refactor: migrate package tencentcloud/services/audit --- tencentcloud/provider.go | 31 +++++----- .../data_source_tc_audit_cos_regions.go | 21 ++++--- .../data_source_tc_audit_cos_regions_test.go | 10 ++-- .../audit}/data_source_tc_audit_key_alias.go | 21 ++++--- .../data_source_tc_audit_key_alias_test.go | 10 ++-- .../audit}/data_source_tc_audits.go | 19 +++--- .../audit}/data_source_tc_audits_test.go | 12 ++-- .../{ => services/audit}/resource_tc_audit.go | 59 ++++++++++--------- .../audit}/resource_tc_audit_test.go | 31 +++++----- .../audit}/resource_tc_audit_track.go | 51 ++++++++-------- .../audit}/resource_tc_audit_track_test.go | 8 ++- .../audit}/service_tencentcloud_audit.go | 25 +++++--- 12 files changed, 163 insertions(+), 135 deletions(-) rename tencentcloud/{ => services/audit}/data_source_tc_audit_cos_regions.go (76%) rename tencentcloud/{ => services/audit}/data_source_tc_audit_cos_regions_test.go (75%) rename tencentcloud/{ => services/audit}/data_source_tc_audit_key_alias.go (77%) rename tencentcloud/{ => services/audit}/data_source_tc_audit_key_alias_test.go (76%) rename tencentcloud/{ => services/audit}/data_source_tc_audits.go (84%) rename tencentcloud/{ => services/audit}/data_source_tc_audits_test.go (79%) rename tencentcloud/{ => services/audit}/resource_tc_audit.go (82%) rename tencentcloud/{ => services/audit}/resource_tc_audit_test.go (86%) rename tencentcloud/{ => services/audit}/resource_tc_audit_track.go (85%) rename tencentcloud/{ => services/audit}/resource_tc_audit_track_test.go (87%) rename tencentcloud/{ => services/audit}/service_tencentcloud_audit.go (90%) diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go index 59538a83dc..c6aca3c6ac 100644 --- a/tencentcloud/provider.go +++ b/tencentcloud/provider.go @@ -1,8 +1,6 @@ package tencentcloud import ( - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/as" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" "encoding/json" "fmt" "io/ioutil" @@ -12,16 +10,6 @@ import ( "strconv" "strings" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cynosdb" - - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cwp" - - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/css" - - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cos" - "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/crs" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/mitchellh/go-homedir" sdkcommon "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" @@ -32,7 +20,10 @@ import ( "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/antiddos" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apigateway" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/apm" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/as" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/audit" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/bh" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/bi" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cam" @@ -53,6 +44,12 @@ import ( "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/clb" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cls" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cos" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/crs" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/css" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cvm" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cwp" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/cynosdb" ) const ( @@ -533,9 +530,9 @@ func Provider() *schema.Provider { "tencentcloud_ckafka_topic_subscribe_group": ckafka.DataSourceTencentCloudCkafkaTopicSubscribeGroup(), "tencentcloud_ckafka_topic_sync_replica": ckafka.DataSourceTencentCloudCkafkaTopicSyncReplica(), "tencentcloud_ckafka_zone": ckafka.DataSourceTencentCloudCkafkaZone(), - "tencentcloud_audit_cos_regions": dataSourceTencentCloudAuditCosRegions(), - "tencentcloud_audit_key_alias": dataSourceTencentCloudAuditKeyAlias(), - "tencentcloud_audits": dataSourceTencentCloudAudits(), + "tencentcloud_audit_cos_regions": audit.DataSourceTencentCloudAuditCosRegions(), + "tencentcloud_audit_key_alias": audit.DataSourceTencentCloudAuditKeyAlias(), + "tencentcloud_audits": audit.DataSourceTencentCloudAudits(), "tencentcloud_cynosdb_clusters": cynosdb.DataSourceTencentCloudCynosdbClusters(), "tencentcloud_cynosdb_instances": cynosdb.DataSourceTencentCloudCynosdbInstances(), "tencentcloud_cynosdb_zone_config": cynosdb.DataSourceTencentCloudCynosdbZoneConfig(), @@ -1330,8 +1327,8 @@ func Provider() *schema.Provider { "tencentcloud_ckafka_consumer_group_modify_offset": ckafka.ResourceTencentCloudCkafkaConsumerGroupModifyOffset(), "tencentcloud_ckafka_datahub_task": ckafka.ResourceTencentCloudCkafkaDatahubTask(), "tencentcloud_ckafka_route": ckafka.ResourceTencentCloudCkafkaRoute(), - "tencentcloud_audit": resourceTencentCloudAudit(), - "tencentcloud_audit_track": resourceTencentCloudAuditTrack(), + "tencentcloud_audit": audit.ResourceTencentCloudAudit(), + "tencentcloud_audit_track": audit.ResourceTencentCloudAuditTrack(), "tencentcloud_image": cvm.ResourceTencentCloudImage(), "tencentcloud_cynosdb_proxy": cynosdb.ResourceTencentCloudCynosdbProxy(), "tencentcloud_cynosdb_reload_proxy_node": cynosdb.ResourceTencentCloudCynosdbReloadProxyNode(), diff --git a/tencentcloud/data_source_tc_audit_cos_regions.go b/tencentcloud/services/audit/data_source_tc_audit_cos_regions.go similarity index 76% rename from tencentcloud/data_source_tc_audit_cos_regions.go rename to tencentcloud/services/audit/data_source_tc_audit_cos_regions.go index c24b24960d..411496b219 100644 --- a/tencentcloud/data_source_tc_audit_cos_regions.go +++ b/tencentcloud/services/audit/data_source_tc_audit_cos_regions.go @@ -1,16 +1,19 @@ -package tencentcloud +package audit import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" audit "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit/v20190319" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAuditCosRegions() *schema.Resource { +func DataSourceTencentCloudAuditCosRegions() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAuditCosRegionsRead, @@ -44,20 +47,20 @@ func dataSourceTencentCloudAuditCosRegions() *schema.Resource { } func dataSourceTencentCloudAuditCosRegionsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_audit_cos_regions.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_audit_cos_regions.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) auditService := AuditService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } var regions []*audit.CosRegionInfo var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { regions, errRet = auditService.DescribeAuditCosRegions(ctx) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -84,7 +87,7 @@ func dataSourceTencentCloudAuditCosRegionsRead(d *schema.ResourceData, meta inte output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), regionList); e != nil { + if e := tccommon.WriteToFile(output.(string), regionList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_audit_cos_regions_test.go b/tencentcloud/services/audit/data_source_tc_audit_cos_regions_test.go similarity index 75% rename from tencentcloud/data_source_tc_audit_cos_regions_test.go rename to tencentcloud/services/audit/data_source_tc_audit_cos_regions_test.go index b7a17b509b..9c239f3de1 100644 --- a/tencentcloud/data_source_tc_audit_cos_regions_test.go +++ b/tencentcloud/services/audit/data_source_tc_audit_cos_regions_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package audit_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,14 +12,14 @@ func TestAccTencentCloudAuditCosRegionsDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTencentCloudAuditCosRegionsDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_audit_cos_regions.all"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_audit_cos_regions.all"), resource.TestCheckResourceAttrSet("data.tencentcloud_audit_cos_regions.all", "audit_cos_region_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_audit_cos_regions.all", "audit_cos_region_list.0.cos_region"), resource.TestCheckResourceAttrSet("data.tencentcloud_audit_cos_regions.all", "audit_cos_region_list.0.cos_region_name"), diff --git a/tencentcloud/data_source_tc_audit_key_alias.go b/tencentcloud/services/audit/data_source_tc_audit_key_alias.go similarity index 77% rename from tencentcloud/data_source_tc_audit_key_alias.go rename to tencentcloud/services/audit/data_source_tc_audit_key_alias.go index 88f85619db..9c3b8dd0b1 100644 --- a/tencentcloud/data_source_tc_audit_key_alias.go +++ b/tencentcloud/services/audit/data_source_tc_audit_key_alias.go @@ -1,16 +1,19 @@ -package tencentcloud +package audit import ( "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" audit "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit/v20190319" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func dataSourceTencentCloudAuditKeyAlias() *schema.Resource { +func DataSourceTencentCloudAuditKeyAlias() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAuditKeyAliasRead, @@ -49,21 +52,21 @@ func dataSourceTencentCloudAuditKeyAlias() *schema.Resource { } func dataSourceTencentCloudAuditKeyAliasRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_audit_cmq_regions.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_audit_cmq_regions.read")() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) auditService := AuditService{ - client: meta.(*TencentCloudClient).apiV3Conn, + client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(), } region := d.Get("region").(string) var keyAlias []*audit.KeyMetadata var errRet error - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { keyAlias, errRet = auditService.DescribeKeyAlias(ctx, region) if errRet != nil { - return retryError(errRet, InternalError) + return tccommon.RetryError(errRet, tccommon.InternalError) } return nil }) @@ -90,7 +93,7 @@ func dataSourceTencentCloudAuditKeyAliasRead(d *schema.ResourceData, meta interf output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), keyList); e != nil { + if e := tccommon.WriteToFile(output.(string), keyList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_audit_key_alias_test.go b/tencentcloud/services/audit/data_source_tc_audit_key_alias_test.go similarity index 76% rename from tencentcloud/data_source_tc_audit_key_alias_test.go rename to tencentcloud/services/audit/data_source_tc_audit_key_alias_test.go index 167184530c..87c0790ebe 100644 --- a/tencentcloud/data_source_tc_audit_key_alias_test.go +++ b/tencentcloud/services/audit/data_source_tc_audit_key_alias_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package audit_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,14 +12,14 @@ func TestAccTencentCloudNeedFixAuditKeyAliassDataSource(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTencentCloudAuditKeyAliasDataSource, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_audit_key_alias.all"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_audit_key_alias.all"), resource.TestCheckResourceAttrSet("data.tencentcloud_audit_key_alias.all", "audit_key_alias_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_audit_key_alias.all", "audit_key_alias_list.0.key_id"), resource.TestCheckResourceAttrSet("data.tencentcloud_audit_key_alias.all", "audit_key_alias_list.0.key_alias"), diff --git a/tencentcloud/data_source_tc_audits.go b/tencentcloud/services/audit/data_source_tc_audits.go similarity index 84% rename from tencentcloud/data_source_tc_audits.go rename to tencentcloud/services/audit/data_source_tc_audits.go index 6a3538c02b..5c3e6c2f3b 100644 --- a/tencentcloud/data_source_tc_audits.go +++ b/tencentcloud/services/audit/data_source_tc_audits.go @@ -1,16 +1,19 @@ -package tencentcloud +package audit import ( "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" audit "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit/v20190319" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func dataSourceTencentCloudAudits() *schema.Resource { +func DataSourceTencentCloudAudits() *schema.Resource { return &schema.Resource{ Read: dataSourceTencentCloudAuditsRead, @@ -66,20 +69,20 @@ func dataSourceTencentCloudAudits() *schema.Resource { } func dataSourceTencentCloudAuditsRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("data_source.tencentcloud_audits.read")() + defer tccommon.LogElapsed("data_source.tencentcloud_audits.read")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) name := d.Get("name").(string) request := audit.NewListAuditsRequest() var response *audit.ListAuditsResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAuditClient().ListAudits(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAuditClient().ListAudits(request) if e != nil { log.Printf("[CRITAL]%s %s fail, reason:%s\n", logId, request.GetAction(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -114,7 +117,7 @@ func dataSourceTencentCloudAuditsRead(d *schema.ResourceData, meta interface{}) output, ok := d.GetOk("result_output_file") if ok && output.(string) != "" { - if e := writeToFile(output.(string), auditList); e != nil { + if e := tccommon.WriteToFile(output.(string), auditList); e != nil { return e } } diff --git a/tencentcloud/data_source_tc_audits_test.go b/tencentcloud/services/audit/data_source_tc_audits_test.go similarity index 79% rename from tencentcloud/data_source_tc_audits_test.go rename to tencentcloud/services/audit/data_source_tc_audits_test.go index 372bf9d127..f667925e9a 100644 --- a/tencentcloud/data_source_tc_audits_test.go +++ b/tencentcloud/services/audit/data_source_tc_audits_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package audit_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,14 +12,14 @@ func TestAccTencentCloudAuditsDataSource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) + tcacctest.AccPreCheck(t) }, - Providers: testAccProviders, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccTencentCloudAuditsDataSourceConfigBasic, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_audits.all"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_audits.all"), resource.TestCheckResourceAttrSet("data.tencentcloud_audits.all", "audit_list.#"), resource.TestCheckResourceAttrSet("data.tencentcloud_audits.all", "audit_list.0.name"), resource.TestCheckResourceAttrSet("data.tencentcloud_audits.all", "audit_list.0.cos_bucket"), @@ -28,7 +30,7 @@ func TestAccTencentCloudAuditsDataSource_basic(t *testing.T) { { Config: testAccTencentCloudAuditsDataSourceConfigName, Check: resource.ComposeTestCheckFunc( - testAccCheckTencentCloudDataSourceID("data.tencentcloud_audits.name"), + tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_audits.name"), resource.TestCheckResourceAttrSet("data.tencentcloud_audits.name", "audit_list.#"), ), }, diff --git a/tencentcloud/resource_tc_audit.go b/tencentcloud/services/audit/resource_tc_audit.go similarity index 82% rename from tencentcloud/resource_tc_audit.go rename to tencentcloud/services/audit/resource_tc_audit.go index cfe9a579a7..855bb4cf31 100644 --- a/tencentcloud/resource_tc_audit.go +++ b/tencentcloud/services/audit/resource_tc_audit.go @@ -1,17 +1,20 @@ -package tencentcloud +package audit import ( "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" audit "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit/v20190319" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) -func resourceTencentCloudAudit() *schema.Resource { +func ResourceTencentCloudAudit() *schema.Resource { return &schema.Resource{ DeprecationMessage: "This resource has been deprecated in Terraform TencentCloud provider version 1.78.16. Please use 'tencentcloud_audit_track' instead.", Create: resourceTencentCloudAuditCreate, @@ -71,7 +74,7 @@ func resourceTencentCloudAudit() *schema.Resource { } func resourceTencentCloudAuditCreate(d *schema.ResourceData, meta interface{}) (errRet error) { - defer logElapsed("resource.tencentcloud_audit.create")() + defer tccommon.LogElapsed("resource.tencentcloud_audit.create")() request := audit.NewCreateAuditRequest() name := d.Get("name").(string) @@ -108,11 +111,11 @@ func resourceTencentCloudAuditCreate(d *schema.ResourceData, meta interface{}) ( request.ReadWriteAttribute = helper.IntInt64(readWriteAttribute) request.LogFilePrefix = &logFilePrefix - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, err := meta.(*TencentCloudClient).apiV3Conn.UseAuditClient().CreateAudit(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAuditClient().CreateAudit(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if response != nil && response.Response != nil && int(*response.Response.IsSuccess) > 0 { d.SetId(name) @@ -138,9 +141,9 @@ func resourceTencentCloudAuditCreate(d *schema.ResourceData, meta interface{}) ( } func resourceTencentCloudAuditRead(d *schema.ResourceData, meta interface{}) (errRet error) { - defer logElapsed("resource.tencentcloud_audit.read")() - defer inconsistentCheck(d, meta)() - logId := getLogId(contextNil) + defer tccommon.LogElapsed("resource.tencentcloud_audit.read")() + defer tccommon.InconsistentCheck(d, meta)() + logId := tccommon.GetLogId(tccommon.ContextNil) request := audit.NewDescribeAuditRequest() auditId := d.Id() @@ -149,12 +152,12 @@ func resourceTencentCloudAuditRead(d *schema.ResourceData, meta interface{}) (er ratelimit.Check(request.GetAction()) var response *audit.DescribeAuditResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAuditClient().DescribeAudit(request) + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAuditClient().DescribeAudit(request) if e != nil { log.Printf("[CRITAL]%s %s fail, reason:%s\n", logId, request.GetAction(), e.Error()) - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -184,9 +187,9 @@ func resourceTencentCloudAuditRead(d *schema.ResourceData, meta interface{}) (er } func resourceTencentCloudAuditUpdate(d *schema.ResourceData, meta interface{}) (errRet error) { - defer logElapsed("resource.tencentcloud_audit.update")() + defer tccommon.LogElapsed("resource.tencentcloud_audit.update")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := audit.NewUpdateAuditRequest() defer func() { @@ -239,11 +242,11 @@ func resourceTencentCloudAuditUpdate(d *schema.ResourceData, meta interface{}) ( request.ReadWriteAttribute = helper.IntInt64(readWriteAttribute) request.LogFilePrefix = &logFilePrefix - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, err := meta.(*TencentCloudClient).apiV3Conn.UseAuditClient().UpdateAudit(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAuditClient().UpdateAudit(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if response != nil && response.Response != nil && int(*response.Response.IsSuccess) > 0 { return nil @@ -271,19 +274,19 @@ func resourceTencentCloudAuditUpdate(d *schema.ResourceData, meta interface{}) ( } func resourceTencentCloudAuditDelete(d *schema.ResourceData, meta interface{}) (errRet error) { - defer logElapsed("resource.tencentcloud_audit.delete")() + defer tccommon.LogElapsed("resource.tencentcloud_audit.delete")() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := audit.NewDeleteAuditRequest() auditId := d.Id() request.AuditName = &auditId - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - _, e := meta.(*TencentCloudClient).apiV3Conn.UseAuditClient().DeleteAudit(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAuditClient().DeleteAudit(request) if e != nil { log.Printf("[CRITAL]%s reason[%s]\n", logId, e.Error()) - return retryError(e) + return tccommon.RetryError(e) } return nil }) @@ -298,11 +301,11 @@ func modifyAuditSwitch(auditname string, auditSwitch bool, meta interface{}) (er if auditSwitch { request := audit.NewStartLoggingRequest() request.AuditName = &auditname - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, err := meta.(*TencentCloudClient).apiV3Conn.UseAuditClient().StartLogging(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAuditClient().StartLogging(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if response != nil && response.Response != nil && int(*response.Response.IsSuccess) > 0 { return nil @@ -316,11 +319,11 @@ func modifyAuditSwitch(auditname string, auditSwitch bool, meta interface{}) (er } else { request := audit.NewStopLoggingRequest() request.AuditName = &auditname - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) - response, err := meta.(*TencentCloudClient).apiV3Conn.UseAuditClient().StopLogging(request) + response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAuditClient().StopLogging(request) if err != nil { - return retryError(err) + return tccommon.RetryError(err) } if response != nil && response.Response != nil && int(*response.Response.IsSuccess) > 0 { return nil diff --git a/tencentcloud/resource_tc_audit_test.go b/tencentcloud/services/audit/resource_tc_audit_test.go similarity index 86% rename from tencentcloud/resource_tc_audit_test.go rename to tencentcloud/services/audit/resource_tc_audit_test.go index b090a808d5..e457f7a0d9 100644 --- a/tencentcloud/resource_tc_audit_test.go +++ b/tencentcloud/services/audit/resource_tc_audit_test.go @@ -1,4 +1,4 @@ -package tencentcloud +package audit_test import ( "context" @@ -6,15 +6,20 @@ import ( "testing" "time" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" + + svcaudit "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/audit" ) func TestAccTencentCloudNeedFixAudit_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAuditDestroy, Steps: []resource.TestStep{ { @@ -53,8 +58,8 @@ func TestAccTencentCloudNeedFixAudit_basic(t *testing.T) { func TestAccTencentCloudNeedFixAudit_kms(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, CheckDestroy: testAccCheckAuditDestroy, Steps: []resource.TestStep{ { @@ -94,12 +99,10 @@ func TestAccTencentCloudNeedFixAudit_kms(t *testing.T) { } func testAccCheckAuditDestroy(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - auditService := AuditService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + auditService := svcaudit.NewAuditService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) for _, rs := range s.RootModule().Resources { if rs.Type != "tencentcloud_audit" { continue @@ -118,8 +121,8 @@ func testAccCheckAuditDestroy(s *terraform.State) error { func testAccCheckAuditExists(n string) resource.TestCheckFunc { return func(s *terraform.State) error { - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) rs, ok := s.RootModule().Resources[n] if !ok { @@ -128,9 +131,7 @@ func testAccCheckAuditExists(n string) resource.TestCheckFunc { if rs.Primary.ID == "" { return fmt.Errorf("[CHECK][Audit][Create] check: Audit id is not set") } - auditService := AuditService{ - client: testAccProvider.Meta().(*TencentCloudClient).apiV3Conn, - } + auditService := svcaudit.NewAuditService(tcacctest.AccProvider.Meta().(tccommon.ProviderMeta).GetAPIV3Conn()) _, has, err := auditService.DescribeAuditById(ctx, rs.Primary.ID) if err != nil { return err diff --git a/tencentcloud/resource_tc_audit_track.go b/tencentcloud/services/audit/resource_tc_audit_track.go similarity index 85% rename from tencentcloud/resource_tc_audit_track.go rename to tencentcloud/services/audit/resource_tc_audit_track.go index 5881b6f514..65ea9efbac 100644 --- a/tencentcloud/resource_tc_audit_track.go +++ b/tencentcloud/services/audit/resource_tc_audit_track.go @@ -1,17 +1,20 @@ -package tencentcloud +package audit import ( "context" "fmt" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" audit "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit/v20190319" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) -func resourceTencentCloudAuditTrack() *schema.Resource { +func ResourceTencentCloudAuditTrack() *schema.Resource { return &schema.Resource{ Read: resourceTencentCloudAuditTrackRead, Create: resourceTencentCloudAuditTrackCreate, @@ -101,10 +104,10 @@ func resourceTencentCloudAuditTrack() *schema.Resource { } func resourceTencentCloudAuditTrackCreate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_audit_track.create")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_audit_track.create")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) var ( request = audit.NewCreateAuditTrackRequest() @@ -157,10 +160,10 @@ func resourceTencentCloudAuditTrackCreate(d *schema.ResourceData, meta interface request.TrackForAllMembers = helper.IntUint64(v.(int)) } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAuditClient().CreateAuditTrack(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAuditClient().CreateAuditTrack(request) if e != nil { - return retryError(e) + 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()) @@ -181,13 +184,13 @@ func resourceTencentCloudAuditTrackCreate(d *schema.ResourceData, meta interface } func resourceTencentCloudAuditTrackRead(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_audit_track.read")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_audit_track.read")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AuditService{client: meta.(*TencentCloudClient).apiV3Conn} + service := AuditService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} trackId := d.Id() @@ -251,10 +254,10 @@ func resourceTencentCloudAuditTrackRead(d *schema.ResourceData, meta interface{} } func resourceTencentCloudAuditTrackUpdate(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_audit_track.update")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_audit_track.update")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) + logId := tccommon.GetLogId(tccommon.ContextNil) request := audit.NewModifyAuditTrackRequest() @@ -321,10 +324,10 @@ func resourceTencentCloudAuditTrackUpdate(d *schema.ResourceData, meta interface } } - err := resource.Retry(writeRetryTimeout, func() *resource.RetryError { - result, e := meta.(*TencentCloudClient).apiV3Conn.UseAuditClient().ModifyAuditTrack(request) + err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError { + result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseAuditClient().ModifyAuditTrack(request) if e != nil { - return retryError(e) + 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()) @@ -341,13 +344,13 @@ func resourceTencentCloudAuditTrackUpdate(d *schema.ResourceData, meta interface } func resourceTencentCloudAuditTrackDelete(d *schema.ResourceData, meta interface{}) error { - defer logElapsed("resource.tencentcloud_audit_track.delete")() - defer inconsistentCheck(d, meta)() + defer tccommon.LogElapsed("resource.tencentcloud_audit_track.delete")() + defer tccommon.InconsistentCheck(d, meta)() - logId := getLogId(contextNil) - ctx := context.WithValue(context.TODO(), logIdKey, logId) + logId := tccommon.GetLogId(tccommon.ContextNil) + ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId) - service := AuditService{client: meta.(*TencentCloudClient).apiV3Conn} + service := AuditService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()} trackId := d.Id() diff --git a/tencentcloud/resource_tc_audit_track_test.go b/tencentcloud/services/audit/resource_tc_audit_track_test.go similarity index 87% rename from tencentcloud/resource_tc_audit_track_test.go rename to tencentcloud/services/audit/resource_tc_audit_track_test.go index 6b5c8b32b1..d25dc3e019 100644 --- a/tencentcloud/resource_tc_audit_track_test.go +++ b/tencentcloud/services/audit/resource_tc_audit_track_test.go @@ -1,8 +1,10 @@ -package tencentcloud +package audit_test import ( "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) @@ -10,8 +12,8 @@ func TestAccTencentCloudAuditTrackResource_basic(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - Providers: testAccProviders, + PreCheck: func() { tcacctest.AccPreCheck(t) }, + Providers: tcacctest.AccProviders, Steps: []resource.TestStep{ { Config: testAccAuditTrack, diff --git a/tencentcloud/service_tencentcloud_audit.go b/tencentcloud/services/audit/service_tencentcloud_audit.go similarity index 90% rename from tencentcloud/service_tencentcloud_audit.go rename to tencentcloud/services/audit/service_tencentcloud_audit.go index 4fe810d34a..f020d403b0 100644 --- a/tencentcloud/service_tencentcloud_audit.go +++ b/tencentcloud/services/audit/service_tencentcloud_audit.go @@ -1,25 +1,32 @@ -package tencentcloud +package audit import ( "context" "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" audit "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit/v20190319" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" + "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit" ) +func NewAuditService(client *connectivity.TencentCloudClient) AuditService { + return AuditService{client: client} +} + type AuditService struct { client *connectivity.TencentCloudClient } func (me *AuditService) DescribeAuditById(ctx context.Context, name string) (auditInfo *audit.DescribeAuditResponse, has bool, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := audit.NewDescribeAuditRequest() request.AuditName = &name @@ -31,7 +38,7 @@ func (me *AuditService) DescribeAuditById(ctx context.Context, name string) (aud }() var response *audit.DescribeAuditResponse - err := resource.Retry(readRetryTimeout, func() *resource.RetryError { + err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError { ratelimit.Check(request.GetAction()) result, e := me.client.UseAuditClient().DescribeAudit(request) if e != nil { @@ -43,7 +50,7 @@ func (me *AuditService) DescribeAuditById(ctx context.Context, name string) (aud return nil } } - return retryError(e) + return tccommon.RetryError(e) } response = result return nil @@ -60,7 +67,7 @@ func (me *AuditService) DescribeAuditById(ctx context.Context, name string) (aud } func (me *AuditService) DescribeAuditCosRegions(ctx context.Context) (regions []*audit.CosRegionInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := audit.NewListCosEnableRegionRequest() ratelimit.Check(request.GetAction()) @@ -79,7 +86,7 @@ func (me *AuditService) DescribeAuditCosRegions(ctx context.Context) (regions [] } func (me *AuditService) DescribeAuditCmqRegions(ctx context.Context) (regions []*audit.CmqRegionInfo, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := audit.NewListCmqEnableRegionRequest() ratelimit.Check(request.GetAction()) @@ -98,7 +105,7 @@ func (me *AuditService) DescribeAuditCmqRegions(ctx context.Context) (regions [] } func (me *AuditService) DescribeKeyAlias(ctx context.Context, region string) (keyMetadatas []*audit.KeyMetadata, errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := audit.NewListKeyAliasByRegionRequest() request.KmsRegion = ®ion ratelimit.Check(request.GetAction()) @@ -118,7 +125,7 @@ func (me *AuditService) DescribeKeyAlias(ctx context.Context, region string) (ke func (me *AuditService) DescribeAuditTrackById(ctx context.Context, trackId string) (track *audit.DescribeAuditTrackResponseParams, errRet error) { var ( - logId = getLogId(ctx) + logId = tccommon.GetLogId(ctx) request = audit.NewDescribeAuditTrackRequest() ) @@ -144,7 +151,7 @@ func (me *AuditService) DescribeAuditTrackById(ctx context.Context, trackId stri } func (me *AuditService) DeleteAuditTrackById(ctx context.Context, trackId string) (errRet error) { - logId := getLogId(ctx) + logId := tccommon.GetLogId(ctx) request := audit.NewDeleteAuditTrackRequest() From 48d24b7cf6aa1dc02c52214d06cafc6da6d59ee5 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 16:44:38 +0800 Subject: [PATCH 30/31] fix: replace tccommon. tcacctest. in string --- .../as/data_source_tc_as_scaling_configs_test.go | 4 ++-- .../services/as/resource_tc_as_scaling_config_test.go | 10 +++++----- .../services/as/resource_tc_as_scaling_group_test.go | 4 ++-- .../services/as/resource_tc_as_scaling_policy_test.go | 4 ++-- .../services/cos/resource_tc_cos_bucket_test.go | 8 ++++---- tencentcloud/services/cvm/resource_tc_eip_test.go | 10 +++++----- tencentcloud/services/cvm/resource_tc_instance_test.go | 6 +++--- .../cynosdb/resource_tc_cynosdb_param_template_test.go | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/tencentcloud/services/as/data_source_tc_as_scaling_configs_test.go b/tencentcloud/services/as/data_source_tc_as_scaling_configs_test.go index 04168565bf..61b97ec0a4 100644 --- a/tencentcloud/services/as/data_source_tc_as_scaling_configs_test.go +++ b/tencentcloud/services/as/data_source_tc_as_scaling_configs_test.go @@ -65,7 +65,7 @@ func TestAccTencentCloudAsScalingConfigsDataSource_full(t *testing.T) { resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.data_disk.#", "1"), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.data_disk.0.disk_type", "CLOUD_PREMIUM"), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.data_disk.0.disk_size", "50"), - resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.internet_charge_type", "TRAFFIC_tcacctest.POSTPAID_BY_HOUR"), + resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.internet_charge_type", "TRAFFIC_POSTPAID_BY_HOUR"), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.internet_max_bandwidth_out", "10"), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.public_ip_assigned", "true"), resource.TestCheckResourceAttr("data.tencentcloud_as_scaling_configs.scaling_configs", "configuration_list.0.enhanced_security_service", "false"), @@ -111,7 +111,7 @@ resource "tencentcloud_as_scaling_config" "launch_configuration" { disk_size = 50 } - internet_charge_type = "TRAFFIC_tcacctest.POSTPAID_BY_HOUR" + internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" internet_max_bandwidth_out = 10 public_ip_assigned = true password = "test123#" diff --git a/tencentcloud/services/as/resource_tc_as_scaling_config_test.go b/tencentcloud/services/as/resource_tc_as_scaling_config_test.go index 10f29ce363..e01936d7b1 100644 --- a/tencentcloud/services/as/resource_tc_as_scaling_config_test.go +++ b/tencentcloud/services/as/resource_tc_as_scaling_config_test.go @@ -129,7 +129,7 @@ func TestAccTencentCloudAsScalingConfig_full(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "data_disk.#", "1"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "data_disk.0.disk_type", "CLOUD_PREMIUM"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "data_disk.0.disk_size", "50"), - resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "internet_charge_type", "TRAFFIC_tcacctest.POSTPAID_BY_HOUR"), + resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "internet_charge_type", "TRAFFIC_POSTPAID_BY_HOUR"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "internet_max_bandwidth_out", "10"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "public_ip_assigned", "true"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "enhanced_security_service", "false"), @@ -199,7 +199,7 @@ func TestAccTencentCloudAsScalingConfig_charge(t *testing.T) { testAccCheckAsScalingConfigExists("tencentcloud_as_scaling_config.launch_configuration"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "instance_charge_type", "PREPAID"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "instance_charge_type_prepaid_period", "1"), - resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "instance_charge_type_prepaid_renew_flag", "NOTIFY_tcacctest.AND_MANUAL_RENEW"), + resource.TestCheckResourceAttr("tencentcloud_as_scaling_config.launch_configuration", "instance_charge_type_prepaid_renew_flag", "NOTIFY_AND_MANUAL_RENEW"), ), }, }, @@ -276,7 +276,7 @@ resource "tencentcloud_as_scaling_config" "launch_configuration" { disk_size = 50 } - internet_charge_type = "TRAFFIC_tcacctest.POSTPAID_BY_HOUR" + internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" internet_max_bandwidth_out = 10 public_ip_assigned = true password = "test123#" @@ -312,7 +312,7 @@ resource "tencentcloud_as_scaling_config" "launch_configuration" { disk_size = 100 } - internet_charge_type = "TRAFFIC_tcacctest.POSTPAID_BY_HOUR" + internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" internet_max_bandwidth_out = 20 public_ip_assigned = true password = "test123#" @@ -366,7 +366,7 @@ resource "tencentcloud_as_scaling_config" "launch_configuration" { instance_types = ["SA1.SMALL1"] instance_charge_type = "PREPAID" instance_charge_type_prepaid_period = 1 - instance_charge_type_prepaid_renew_flag = "NOTIFY_tcacctest.AND_MANUAL_RENEW" + instance_charge_type_prepaid_renew_flag = "NOTIFY_AND_MANUAL_RENEW" } ` } diff --git a/tencentcloud/services/as/resource_tc_as_scaling_group_test.go b/tencentcloud/services/as/resource_tc_as_scaling_group_test.go index 54fe752027..100253b075 100644 --- a/tencentcloud/services/as/resource_tc_as_scaling_group_test.go +++ b/tencentcloud/services/as/resource_tc_as_scaling_group_test.go @@ -122,7 +122,7 @@ func TestAccTencentCloudAsScalingGroup_full(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_as_scaling_group.scaling_group", "termination_policies.#", "1"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_group.scaling_group", "termination_policies.0", "OLDEST_INSTANCE"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_group.scaling_group", "retry_policy", "IMMEDIATE_RETRY"), - resource.TestCheckResourceAttr("tencentcloud_as_scaling_group.scaling_group", "scaling_mode", "WAKE_tcacctest.UP_STOPPED_SCALING"), + resource.TestCheckResourceAttr("tencentcloud_as_scaling_group.scaling_group", "scaling_mode", "WAKE_UP_STOPPED_SCALING"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_group.scaling_group", "replace_monitor_unhealthy", "true"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_group.scaling_group", "replace_load_balancer_unhealthy", "true"), resource.TestCheckNoResourceAttr("tencentcloud_as_scaling_group.scaling_group", "tags.test"), @@ -257,7 +257,7 @@ resource "tencentcloud_as_scaling_group" "scaling_group" { desired_capacity = 0 termination_policies = ["OLDEST_INSTANCE"] retry_policy = "IMMEDIATE_RETRY" - scaling_mode = "WAKE_tcacctest.UP_STOPPED_SCALING" + scaling_mode = "WAKE_UP_STOPPED_SCALING" replace_monitor_unhealthy = true replace_load_balancer_unhealthy = true diff --git a/tencentcloud/services/as/resource_tc_as_scaling_policy_test.go b/tencentcloud/services/as/resource_tc_as_scaling_policy_test.go index 1463023baa..84d2364bbc 100644 --- a/tencentcloud/services/as/resource_tc_as_scaling_policy_test.go +++ b/tencentcloud/services/as/resource_tc_as_scaling_policy_test.go @@ -45,7 +45,7 @@ func TestAccTencentCloudAsScalingPolicy(t *testing.T) { resource.TestCheckResourceAttrSet("tencentcloud_as_scaling_policy.scaling_policy", "scaling_group_id"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_policy.scaling_policy", "adjustment_type", "CHANGE_IN_CAPACITY"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_policy.scaling_policy", "adjustment_value", "1"), - resource.TestCheckResourceAttr("tencentcloud_as_scaling_policy.scaling_policy", "comparison_operator", "GREATER_tcacctest.THAN_OR_EQUAL_TO"), + resource.TestCheckResourceAttr("tencentcloud_as_scaling_policy.scaling_policy", "comparison_operator", "GREATER_THAN_OR_EQUAL_TO"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_policy.scaling_policy", "metric_name", "MEM_UTILIZATION"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_policy.scaling_policy", "threshold", "85"), resource.TestCheckResourceAttr("tencentcloud_as_scaling_policy.scaling_policy", "period", "60"), @@ -182,7 +182,7 @@ resource "tencentcloud_as_scaling_policy" "scaling_policy" { policy_name = "tf-as-scaling-policy" adjustment_type = "CHANGE_IN_CAPACITY" adjustment_value = 1 - comparison_operator = "GREATER_tcacctest.THAN_OR_EQUAL_TO" + comparison_operator = "GREATER_THAN_OR_EQUAL_TO" metric_name = "MEM_UTILIZATION" threshold = 85 period = 60 diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_test.go b/tencentcloud/services/cos/resource_tc_cos_bucket_test.go index 92a9308ddb..fbd5c371ec 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_test.go @@ -592,7 +592,7 @@ resource "tencentcloud_cos_bucket" "bucket_acl" { qcs::cam::uin/${local.uin}:uin/${local.uin} qcs::cam::uin/${local.uin}:uin/${local.uin} - tcacctest.FULL_CONTROL + FULL_CONTROL @@ -626,20 +626,20 @@ resource "tencentcloud_cos_bucket" "bucket_acl" { qcs::cam::uin/${local.uin}:uin/${local.uin} qcs::cam::uin/${local.uin}:uin/${local.uin} - tcacctest.FULL_CONTROL + FULL_CONTROL qcs::cam::uin/${local.uin}:uin/${local.uin} qcs::cam::uin/${local.uin}:uin/${local.uin} - tcacctest.WRITE_ACP + WRITE_ACP http://cam.qcloud.com/groups/global/AllUsers - tcacctest.READ_ACP + READ_ACP diff --git a/tencentcloud/services/cvm/resource_tc_eip_test.go b/tencentcloud/services/cvm/resource_tc_eip_test.go index ba4e38f5bc..612dd68071 100644 --- a/tencentcloud/services/cvm/resource_tc_eip_test.go +++ b/tencentcloud/services/cvm/resource_tc_eip_test.go @@ -201,7 +201,7 @@ func TestAccTencentCloudEipResource_chargetype(t *testing.T) { Config: testAccEipChargeType, Check: resource.ComposeTestCheckFunc( testAccCheckEipExists("tencentcloud_eip.foo"), - resource.TestCheckResourceAttr("tencentcloud_eip.foo", "internet_charge_type", "TRAFFIC_tcacctest.POSTPAID_BY_HOUR"), + resource.TestCheckResourceAttr("tencentcloud_eip.foo", "internet_charge_type", "TRAFFIC_POSTPAID_BY_HOUR"), ), }, { @@ -224,7 +224,7 @@ func TestAccTencentCloudEipResource_prepaid(t *testing.T) { Config: testAccEipPrepaid, Check: resource.ComposeTestCheckFunc( testAccCheckEipExists("tencentcloud_eip.foo"), - resource.TestCheckResourceAttr("tencentcloud_eip.foo", "internet_charge_type", "BANDWIDTH_tcacctest.PREPAID_BY_MONTH"), + resource.TestCheckResourceAttr("tencentcloud_eip.foo", "internet_charge_type", "BANDWIDTH_PREPAID_BY_MONTH"), ), }, { @@ -357,7 +357,7 @@ resource "tencentcloud_eip" "foo" { const testAccEipBandwidth = ` resource "tencentcloud_eip" "foo" { name = "eip_bandwidth" - internet_charge_type = "TRAFFIC_tcacctest.POSTPAID_BY_HOUR" + internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" internet_max_bandwidth_out = 2 } ` @@ -365,14 +365,14 @@ resource "tencentcloud_eip" "foo" { const testAccEipChargeType = ` resource "tencentcloud_eip" "foo" { name = "eip_charge_type" - internet_charge_type = "TRAFFIC_tcacctest.POSTPAID_BY_HOUR" + internet_charge_type = "TRAFFIC_POSTPAID_BY_HOUR" } ` const testAccEipPrepaid = ` resource "tencentcloud_eip" "foo" { name = "eip_prepaid" - internet_charge_type = "BANDWIDTH_tcacctest.PREPAID_BY_MONTH" + internet_charge_type = "BANDWIDTH_PREPAID_BY_MONTH" prepaid_period = 6 auto_renew_flag = 1 internet_max_bandwidth_out = 2 diff --git a/tencentcloud/services/cvm/resource_tc_instance_test.go b/tencentcloud/services/cvm/resource_tc_instance_test.go index 6a6499fdf3..1d1f9bd4dd 100644 --- a/tencentcloud/services/cvm/resource_tc_instance_test.go +++ b/tencentcloud/services/cvm/resource_tc_instance_test.go @@ -639,7 +639,7 @@ func TestAccTencentCloudNeedFixInstancePostpaidToPrepaid(t *testing.T) { testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_charge_type", "PREPAID"), resource.TestCheckResourceAttr(id, "instance_charge_type_prepaid_period", "1"), - resource.TestCheckResourceAttr(id, "instance_charge_type_prepaid_renew_flag", "NOTIFY_tcacctest.AND_MANUAL_RENEW"), + resource.TestCheckResourceAttr(id, "instance_charge_type_prepaid_renew_flag", "NOTIFY_AND_MANUAL_RENEW"), ), }, }, @@ -663,7 +663,7 @@ func TestAccTencentCloudInstanceResource_PrepaidFallbackToPostpaid(t *testing.T) testAccCheckTencentCloudInstanceExists(id), resource.TestCheckResourceAttr(id, "instance_charge_type", "PREPAID"), resource.TestCheckResourceAttr(id, "instance_charge_type_prepaid_period", "1"), - resource.TestCheckResourceAttr(id, "instance_charge_type_prepaid_renew_flag", "NOTIFY_tcacctest.AND_MANUAL_RENEW"), + resource.TestCheckResourceAttr(id, "instance_charge_type_prepaid_renew_flag", "NOTIFY_AND_MANUAL_RENEW"), ), }, { @@ -890,7 +890,7 @@ resource "tencentcloud_instance" "foo" { system_disk_type = "CLOUD_PREMIUM" instance_charge_type = "PREPAID" instance_charge_type_prepaid_period = 1 - instance_charge_type_prepaid_renew_flag = "NOTIFY_tcacctest.AND_MANUAL_RENEW" + instance_charge_type_prepaid_renew_flag = "NOTIFY_AND_MANUAL_RENEW" force_delete = true } ` diff --git a/tencentcloud/services/cynosdb/resource_tc_cynosdb_param_template_test.go b/tencentcloud/services/cynosdb/resource_tc_cynosdb_param_template_test.go index f147d5380e..18cd9bb97e 100644 --- a/tencentcloud/services/cynosdb/resource_tc_cynosdb_param_template_test.go +++ b/tencentcloud/services/cynosdb/resource_tc_cynosdb_param_template_test.go @@ -694,7 +694,7 @@ resource "tencentcloud_cynosdb_param_template" "param_template" { } param_list { current_value = "OFF" - param_name = "explicit_tcacctest.Defaults_for_timestamp" + param_name = "explicit_Defaults_for_timestamp" } param_list { current_value = "OFF" @@ -885,7 +885,7 @@ resource "tencentcloud_cynosdb_param_template" "param_template" { param_name = "slow_query_log" } param_list { - current_value = "ONLY_tcacctest.FULL_GROUP_BY,STRICT_tcacctest.TRANS_TABLES,NO_tcacctest.ZERO_IN_DATE,NO_tcacctest.ZERO_DATE,ERROR_tcacctest.FOR_DIVISION_BY_ZERO,NO_tcacctest.AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" + current_value = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" param_name = "sql_mode" } param_list { From eefb1a3218b9b615a4a7234f6b597dcc8c68c097 Mon Sep 17 00:00:00 2001 From: Yanghao LUO Date: Wed, 20 Dec 2023 17:06:40 +0800 Subject: [PATCH 31/31] style: fmt --- .../apigateway/data_source_tc_api_gateway_api_app_api.go | 4 ++-- .../services/cfs/data_source_tc_cfs_available_zone.go | 4 ++-- tencentcloud/services/cos/data_source_tc_cos_batchs.go | 3 ++- tencentcloud/services/cos/data_source_tc_cos_batchs_test.go | 3 ++- .../services/cos/data_source_tc_cos_bucket_inventorys.go | 3 ++- .../cos/data_source_tc_cos_bucket_inventorys_test.go | 3 ++- .../cos/data_source_tc_cos_bucket_multipart_uploads.go | 3 ++- .../cos/data_source_tc_cos_bucket_multipart_uploads_test.go | 3 ++- .../services/cos/data_source_tc_cos_bucket_object.go | 3 ++- tencentcloud/services/cos/data_source_tc_cos_buckets.go | 3 ++- tencentcloud/services/cos/resource_tc_cos_batch.go | 3 ++- tencentcloud/services/cos/resource_tc_cos_batch_test.go | 3 ++- tencentcloud/services/cos/resource_tc_cos_bucket.go | 3 ++- .../resource_tc_cos_bucket_domain_certificate_attachment.go | 3 ++- ...tc_cos_bucket_generate_inventory_immediately_operation.go | 3 ++- ...s_bucket_generate_inventory_immediately_operation_test.go | 3 ++- .../services/cos/resource_tc_cos_bucket_inventory.go | 3 ++- .../services/cos/resource_tc_cos_bucket_inventory_test.go | 3 ++- tencentcloud/services/cos/resource_tc_cos_bucket_object.go | 3 ++- tencentcloud/services/cos/resource_tc_cos_bucket_policy.go | 5 +++-- tencentcloud/services/cos/resource_tc_cos_bucket_referer.go | 3 ++- tencentcloud/services/cos/resource_tc_cos_bucket_version.go | 3 ++- .../services/cos/resource_tc_cos_bucket_version_test.go | 3 ++- ...esource_tc_cos_object_abort_multipart_upload_operation.go | 3 ++- .../services/cos/resource_tc_cos_object_copy_operation.go | 3 ++- .../cos/resource_tc_cos_object_copy_operation_test.go | 3 ++- .../cos/resource_tc_cos_object_download_operation.go | 3 ++- .../cos/resource_tc_cos_object_download_operation_test.go | 3 ++- .../services/cos/resource_tc_cos_object_restore_operation.go | 3 ++- .../cos/resource_tc_cos_object_restore_operation_test.go | 3 ++- tencentcloud/services/cos/service_tencentcloud_cam.go | 3 ++- 31 files changed, 63 insertions(+), 34 deletions(-) diff --git a/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_api.go b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_api.go index 390e9908f0..a5aaaadbfa 100644 --- a/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_api.go +++ b/tencentcloud/services/apigateway/data_source_tc_api_gateway_api_app_api.go @@ -95,8 +95,8 @@ func DataSourceTencentCloudApiGatewayApiAppApi() *schema.Resource { Description: "API authentication type. Possible values are SECRET (key pair authentication), NONE (authentication-free), and OAUTH.", }, "api_business_type": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Computed: true, Description: "Type of OAUTH API. Possible values are NORMAL (Business API), OAUTH (Authorization API).", }, "auth_relation_api_id": { diff --git a/tencentcloud/services/cfs/data_source_tc_cfs_available_zone.go b/tencentcloud/services/cfs/data_source_tc_cfs_available_zone.go index ea3c241e6b..2799acab0b 100644 --- a/tencentcloud/services/cfs/data_source_tc_cfs_available_zone.go +++ b/tencentcloud/services/cfs/data_source_tc_cfs_available_zone.go @@ -71,8 +71,8 @@ func DataSourceTencentCloudCfsAvailableZone() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "sale_status": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Computed: true, Description: " Sale status. Valid values: sale_out (sold out), saling (purchasable), no_saling (non-purchasable).", }, "protocol": { diff --git a/tencentcloud/services/cos/data_source_tc_cos_batchs.go b/tencentcloud/services/cos/data_source_tc_cos_batchs.go index 347656bd9b..aef8ca0bac 100644 --- a/tencentcloud/services/cos/data_source_tc_cos_batchs.go +++ b/tencentcloud/services/cos/data_source_tc_cos_batchs.go @@ -1,11 +1,12 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/json" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentyun/cos-go-sdk-v5" diff --git a/tencentcloud/services/cos/data_source_tc_cos_batchs_test.go b/tencentcloud/services/cos/data_source_tc_cos_batchs_test.go index 0268815a1b..843c2a18db 100644 --- a/tencentcloud/services/cos/data_source_tc_cos_batchs_test.go +++ b/tencentcloud/services/cos/data_source_tc_cos_batchs_test.go @@ -1,9 +1,10 @@ package cos_test import ( - tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) diff --git a/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys.go b/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys.go index c13965e4ee..19468bab2d 100644 --- a/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys.go +++ b/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys.go @@ -1,12 +1,13 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/json" "log" "strconv" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) diff --git a/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys_test.go b/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys_test.go index 3e70811da8..caf6fe7c5e 100644 --- a/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys_test.go +++ b/tencentcloud/services/cos/data_source_tc_cos_bucket_inventorys_test.go @@ -1,9 +1,10 @@ package cos_test import ( - tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) diff --git a/tencentcloud/services/cos/data_source_tc_cos_bucket_multipart_uploads.go b/tencentcloud/services/cos/data_source_tc_cos_bucket_multipart_uploads.go index d031acc482..ff5220cd22 100644 --- a/tencentcloud/services/cos/data_source_tc_cos_bucket_multipart_uploads.go +++ b/tencentcloud/services/cos/data_source_tc_cos_bucket_multipart_uploads.go @@ -1,11 +1,12 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/json" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" "github.com/tencentyun/cos-go-sdk-v5" diff --git a/tencentcloud/services/cos/data_source_tc_cos_bucket_multipart_uploads_test.go b/tencentcloud/services/cos/data_source_tc_cos_bucket_multipart_uploads_test.go index 24df6d3ebb..5edb77f0cd 100644 --- a/tencentcloud/services/cos/data_source_tc_cos_bucket_multipart_uploads_test.go +++ b/tencentcloud/services/cos/data_source_tc_cos_bucket_multipart_uploads_test.go @@ -1,9 +1,10 @@ package cos_test import ( - tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) diff --git a/tencentcloud/services/cos/data_source_tc_cos_bucket_object.go b/tencentcloud/services/cos/data_source_tc_cos_bucket_object.go index 25f7caa3cc..9bf67322b0 100644 --- a/tencentcloud/services/cos/data_source_tc_cos_bucket_object.go +++ b/tencentcloud/services/cos/data_source_tc_cos_bucket_object.go @@ -1,11 +1,12 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/aws/aws-sdk-go/service/s3" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" diff --git a/tencentcloud/services/cos/data_source_tc_cos_buckets.go b/tencentcloud/services/cos/data_source_tc_cos_buckets.go index 0401441697..34c8994145 100644 --- a/tencentcloud/services/cos/data_source_tc_cos_buckets.go +++ b/tencentcloud/services/cos/data_source_tc_cos_buckets.go @@ -1,13 +1,14 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/xml" "fmt" "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper" ) diff --git a/tencentcloud/services/cos/resource_tc_cos_batch.go b/tencentcloud/services/cos/resource_tc_cos_batch.go index e16ae7448e..56665b8558 100644 --- a/tencentcloud/services/cos/resource_tc_cos_batch.go +++ b/tencentcloud/services/cos/resource_tc_cos_batch.go @@ -1,7 +1,6 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/json" "fmt" @@ -9,6 +8,8 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/google/uuid" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" diff --git a/tencentcloud/services/cos/resource_tc_cos_batch_test.go b/tencentcloud/services/cos/resource_tc_cos_batch_test.go index c8f9cb059c..3948e9a5c8 100644 --- a/tencentcloud/services/cos/resource_tc_cos_batch_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_batch_test.go @@ -1,9 +1,10 @@ package cos_test import ( - tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket.go b/tencentcloud/services/cos/resource_tc_cos_bucket.go index ec3e09171d..c9b3fc38f6 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket.go @@ -1,7 +1,6 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "bytes" "context" "encoding/json" @@ -12,6 +11,8 @@ import ( "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/tencentyun/cos-go-sdk-v5" "github.com/beevik/etree" diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_domain_certificate_attachment.go b/tencentcloud/services/cos/resource_tc_cos_bucket_domain_certificate_attachment.go index e08fb49fea..2f82a889d7 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_domain_certificate_attachment.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_domain_certificate_attachment.go @@ -1,13 +1,14 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/xml" "fmt" "log" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/pkg/errors" diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation.go b/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation.go index c8a63e8e4b..7cf0f64715 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation.go @@ -1,13 +1,14 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "fmt" "log" "strings" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/tencentyun/cos-go-sdk-v5" diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation_test.go b/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation_test.go index f8e5570a8d..78c1975538 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_generate_inventory_immediately_operation_test.go @@ -1,9 +1,10 @@ package cos_test import ( - tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_inventory.go b/tencentcloud/services/cos/resource_tc_cos_bucket_inventory.go index 6dc3d44fcb..c294aeb528 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_inventory.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_inventory.go @@ -1,7 +1,6 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/json" "fmt" @@ -9,6 +8,8 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cos "github.com/tencentyun/cos-go-sdk-v5" diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_inventory_test.go b/tencentcloud/services/cos/resource_tc_cos_bucket_inventory_test.go index f94f21eb48..4c8e5b12e4 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_inventory_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_inventory_test.go @@ -1,9 +1,10 @@ package cos_test import ( - tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_object.go b/tencentcloud/services/cos/resource_tc_cos_bucket_object.go index 49313008eb..9ad80d9a0f 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_object.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_object.go @@ -1,7 +1,6 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "bytes" "context" "fmt" @@ -10,6 +9,8 @@ import ( "os" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/service/s3" diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_policy.go b/tencentcloud/services/cos/resource_tc_cos_bucket_policy.go index a835180480..29aa7b307f 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_policy.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_policy.go @@ -1,13 +1,14 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/json" "log" "reflect" "time" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" @@ -172,7 +173,7 @@ func resourceTencentCloudCosBucketPolicyDelete(d *schema.ResourceData, meta inte return nil } -//In the returned JSON, the SDK automatically adds the Sid, which needs to be removed +// In the returned JSON, the SDK automatically adds the Sid, which needs to be removed func removeSid(v string) (result string, err error) { m := make(map[string]interface{}) err = json.Unmarshal([]byte(v), &m) diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_referer.go b/tencentcloud/services/cos/resource_tc_cos_bucket_referer.go index 28eccf02c3..494ff83a6d 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_referer.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_referer.go @@ -1,10 +1,11 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cos "github.com/tencentyun/cos-go-sdk-v5" diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_version.go b/tencentcloud/services/cos/resource_tc_cos_bucket_version.go index de2d2ed526..01191a85fc 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_version.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_version.go @@ -1,10 +1,11 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cos "github.com/tencentyun/cos-go-sdk-v5" diff --git a/tencentcloud/services/cos/resource_tc_cos_bucket_version_test.go b/tencentcloud/services/cos/resource_tc_cos_bucket_version_test.go index 8b5d9a2a09..ff1532f731 100644 --- a/tencentcloud/services/cos/resource_tc_cos_bucket_version_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_bucket_version_test.go @@ -1,9 +1,10 @@ package cos_test import ( - tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) diff --git a/tencentcloud/services/cos/resource_tc_cos_object_abort_multipart_upload_operation.go b/tencentcloud/services/cos/resource_tc_cos_object_abort_multipart_upload_operation.go index 25e2b401bb..01ebc3eb03 100644 --- a/tencentcloud/services/cos/resource_tc_cos_object_abort_multipart_upload_operation.go +++ b/tencentcloud/services/cos/resource_tc_cos_object_abort_multipart_upload_operation.go @@ -1,10 +1,11 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) diff --git a/tencentcloud/services/cos/resource_tc_cos_object_copy_operation.go b/tencentcloud/services/cos/resource_tc_cos_object_copy_operation.go index fb513d0be4..16faffd283 100644 --- a/tencentcloud/services/cos/resource_tc_cos_object_copy_operation.go +++ b/tencentcloud/services/cos/resource_tc_cos_object_copy_operation.go @@ -1,10 +1,11 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) diff --git a/tencentcloud/services/cos/resource_tc_cos_object_copy_operation_test.go b/tencentcloud/services/cos/resource_tc_cos_object_copy_operation_test.go index 2cc60b6001..41c84bf26b 100644 --- a/tencentcloud/services/cos/resource_tc_cos_object_copy_operation_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_object_copy_operation_test.go @@ -1,9 +1,10 @@ package cos_test import ( - tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) diff --git a/tencentcloud/services/cos/resource_tc_cos_object_download_operation.go b/tencentcloud/services/cos/resource_tc_cos_object_download_operation.go index e97d5a5b4f..b079142a69 100644 --- a/tencentcloud/services/cos/resource_tc_cos_object_download_operation.go +++ b/tencentcloud/services/cos/resource_tc_cos_object_download_operation.go @@ -1,12 +1,13 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "io" "log" "os" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) diff --git a/tencentcloud/services/cos/resource_tc_cos_object_download_operation_test.go b/tencentcloud/services/cos/resource_tc_cos_object_download_operation_test.go index c376b9c3fb..a1a36f4ca6 100644 --- a/tencentcloud/services/cos/resource_tc_cos_object_download_operation_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_object_download_operation_test.go @@ -1,9 +1,10 @@ package cos_test import ( - tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) diff --git a/tencentcloud/services/cos/resource_tc_cos_object_restore_operation.go b/tencentcloud/services/cos/resource_tc_cos_object_restore_operation.go index dd9da0a30d..c620602789 100644 --- a/tencentcloud/services/cos/resource_tc_cos_object_restore_operation.go +++ b/tencentcloud/services/cos/resource_tc_cos_object_restore_operation.go @@ -1,10 +1,11 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "log" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" cos "github.com/tencentyun/cos-go-sdk-v5" ) diff --git a/tencentcloud/services/cos/resource_tc_cos_object_restore_operation_test.go b/tencentcloud/services/cos/resource_tc_cos_object_restore_operation_test.go index 509620e337..38c4363fef 100644 --- a/tencentcloud/services/cos/resource_tc_cos_object_restore_operation_test.go +++ b/tencentcloud/services/cos/resource_tc_cos_object_restore_operation_test.go @@ -1,9 +1,10 @@ package cos_test import ( - tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" "testing" + tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) diff --git a/tencentcloud/services/cos/service_tencentcloud_cam.go b/tencentcloud/services/cos/service_tencentcloud_cam.go index 4c403134c8..bcc4b4f6e5 100644 --- a/tencentcloud/services/cos/service_tencentcloud_cam.go +++ b/tencentcloud/services/cos/service_tencentcloud_cam.go @@ -1,7 +1,6 @@ package cos import ( - tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" "context" "encoding/json" "fmt" @@ -10,6 +9,8 @@ import ( "strconv" "strings" + tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common" + cam "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116" sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors" "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity"